/**
   * Test a cookie date value.
   *
   * @param headerValue The cookie date value.
   */
  private void testCookieDate(String dateValue) {
    final Date date = DateUtils.parse(dateValue, DateUtils.FORMAT_RFC_1036);

    // Rewrite the date
    final String newDateValue = DateUtils.format(date, DateUtils.FORMAT_RFC_1036.get(0));

    // Compare initial and new headers
    assertEquals(dateValue, newDateValue);
  }
  @Override
  public CookieSettingWriter append(CookieSetting cookieSetting) throws IllegalArgumentException {
    String name = cookieSetting.getName();
    String value = cookieSetting.getValue();
    int version = cookieSetting.getVersion();

    if ((name == null) || (name.length() == 0)) {
      throw new IllegalArgumentException("Can't write cookie. Invalid name detected");
    }

    append(name).append('=');

    // Append the value
    if ((value != null) && (value.length() > 0)) {
      appendValue(value, version);
    }

    // Append the version
    if (version > 0) {
      append("; Version=");
      appendValue(Integer.toString(version), version);
    }

    // Append the path
    String path = cookieSetting.getPath();

    if ((path != null) && (path.length() > 0)) {
      append("; Path=");

      if (version == 0) {
        append(path);
      } else {
        appendQuotedString(path);
      }
    }

    // Append the expiration date
    int maxAge = cookieSetting.getMaxAge();

    if (maxAge >= 0) {
      if (version == 0) {
        long currentTime = System.currentTimeMillis();
        long maxTime = (maxAge * 1000L);
        long expiresTime = currentTime + maxTime;
        Date expires = new Date(expiresTime);

        append("; Expires=");
        appendValue(DateUtils.format(expires, DateUtils.FORMAT_RFC_1036.get(0)), version);
      } else {
        append("; Max-Age=");
        appendValue(Integer.toString(cookieSetting.getMaxAge()), version);
      }
    } else if ((maxAge == -1) && (version > 0)) {
      // Discard the cookie at the end of the user's session (RFC
      // 2965)
      append("; Discard");
    } else {
      // NetScape cookies automatically expire at the end of the
      // user's session
    }

    // Append the domain
    String domain = cookieSetting.getDomain();

    if ((domain != null) && (domain.length() > 0)) {
      append("; Domain=");
      appendValue(domain.toLowerCase(), version);
    }

    // Append the secure flag
    if (cookieSetting.isSecure()) {
      append("; Secure");
    }

    // Append the secure flag
    if (cookieSetting.isAccessRestricted()) {
      append("; HttpOnly");
    }

    // Append the comment
    if (version > 0) {
      String comment = cookieSetting.getComment();

      if ((comment != null) && (comment.length() > 0)) {
        append("; Comment=");
        appendValue(comment, version);
      }
    }

    return this;
  }