/**
   * Tests the parsing of an ISO8601 formatted date
   *
   * @throws Exception Forwards all exceptions to JUnit.
   */
  @Ignore("todo: Import the latest changes to enable the below test case.")
  public void itestParse() throws Exception {
    GregorianCalendar cal = new GregorianCalendar(2006, 05, 30, 23, 59, 54);
    cal.set(Calendar.MILLISECOND, 321);
    cal.setTimeZone(TimeZone.getTimeZone("UTC"));
    XMPDateTime dt = XMPDateTimeFactory.createFromCalendar(cal);
    XMPDateTime parsed = ISO8601Converter.parse("2006-06-30T23:59:54.321Z");
    assertEquals(0, dt.compareTo(parsed));

    cal.set(Calendar.MILLISECOND, 0);
    dt = XMPDateTimeFactory.createFromCalendar(cal);
    assertEquals(0, dt.compareTo(ISO8601Converter.parse("2006-06-30T23:59:54Z")));

    cal.set(Calendar.SECOND, 0);
    dt = XMPDateTimeFactory.createFromCalendar(cal);
    assertEquals(0, dt.compareTo(ISO8601Converter.parse("2006-06-30T23:59Z")));

    cal.set(Calendar.HOUR_OF_DAY, 0);
    dt = XMPDateTimeFactory.createFromCalendar(cal);
    assertEquals(0, dt.compareTo(ISO8601Converter.parse("2006-06-30T00:59Z")));

    cal.set(Calendar.MINUTE, 0);
    dt = XMPDateTimeFactory.createFromCalendar(cal);
    assertEquals(0, dt.compareTo(ISO8601Converter.parse("2006-06-30T00:00Z")));

    // Issue reported by S7, dates w/o timezone have to be accepted
    // toDo: Import latest version to run the following test
    // dt = ISO8601Converter.parse("2006-10-13T17:45:26.16");
    // assertEquals("2006-10-13T17:45:26.16", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17:45:26.16Z");
    assertEquals("2006-10-13T17:45:26.16Z", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17:45:26");
    assertEquals("2006-10-13T17:45:26", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17:45:26+5:30");
    assertEquals("2006-10-13T17:45:26+05:30", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17:45");
    assertEquals("2006-10-13T17:45", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17:45-06");
    assertEquals("2006-10-13T17:45-06:00", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17");
    assertEquals("2006-10-13T17:00", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17Z");
    assertEquals("2006-10-13T17:00Z", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13T17-03:00");
    assertEquals("2006-10-13T17:00-03:00", dt.toString());

    dt = ISO8601Converter.parse("2006-10-13");
    assertEquals("2006-10-13", dt.toString());
  }
  /**
   * Test date variants:
   *
   * <ul>
   *   <li>YYYY
   *   <li>YYYY-MM
   *   <li>YYYY-MM-DD
   *   <li>YYYY-MM-DDThh:mm (according to our spec, this also allowed, even if not allowed in
   *       ISO8601)
   *   <li>YYYY-MM-DDThh:mmTZD
   *   <li>YYYY-MM-DDThh:mm:ssTZD
   *   <li>YYYY-MM-DDThh:mm:ss.sTZD
   * </ul>
   *
   * @throws Exception Forward test exceptions
   */
  public void testRender() throws Exception {
    XMPDateTime dt = XMPDateTimeFactory.create(2006, 12, 31, 23, 59, 59, 987654321);
    dt.setTimeZone(TimeZone.getTimeZone("UTC"));
    assertEquals("2006-12-31T23:59:59.987654321Z", ISO8601Converter.render(dt));

    dt.setNanoSecond(0);
    assertEquals("2006-12-31T23:59:59Z", ISO8601Converter.render(dt));

    dt.setSecond(0);
    assertEquals("2006-12-31T23:59Z", ISO8601Converter.render(dt));

    dt.setMinute(0);
    assertEquals("2006-12-31T23:00Z", ISO8601Converter.render(dt));

    // Following method is available in the latest version of
    // XMPDateTimeFactory class.
    // todo: Import the latest version from the Granite's build.
    // dt = XMPDateTimeFactory.create(2006, 12, 31);
    // assertEquals("2006-12-31", ISO8601Converter.render(dt));

    dt.setHour(0);
    dt.setTimeZone(TimeZone.getTimeZone("Asia/Dushanbe"));
    assertEquals("2006-12-31T00:00+05:00", ISO8601Converter.render(dt));

    dt.setTimeZone(new SimpleTimeZone(-8000000, ""));
    assertEquals("2006-12-31T00:00-02:13", ISO8601Converter.render(dt));
  }
  /**
   * Sanitiy test: the current Date and a random date. TODO test against a reg exp?
   *
   * @throws XMPException
   */
  public void testRenderCurrentTime() throws XMPException {
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTimeInMillis(new Random().nextLong());

    // restrict date to 0000 - 9999?
    cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) % 10000);

    // select random Timezone
    String[] zones = TimeZone.getAvailableIDs();
    String zone = zones[new Random().nextInt(zones.length) + 1];
    cal.setTimeZone(TimeZone.getTimeZone(zone));
    XMPDateTimeFactory.createFromCalendar(cal);
  }