@Test
  public void date_assertion_should_support_timestamp_string_representation()
      throws ParseException {
    Date date = DateUtil.newTimestampDateFormat().parse("2015-05-08 11:30:00.560");
    String timestampAsString =
        DateUtil.newTimestampDateFormat().format(new Timestamp(date.getTime()));

    assertThat(date).isEqualTo(timestampAsString);
  }
  @Test
  public void use_custom_date_formats_set_from_Assertions_entry_point() {
    final Date date = DateUtil.parse("2003-04-26");

    registerCustomDateFormat("yyyy/MM/dd'T'HH:mm:ss");

    try {
      // fail : the registered format does not match the given date
      assertThat(date).isEqualTo("2003/04/26");
      failBecauseExpectedAssertionErrorWasNotThrown();
    } catch (AssertionError e) {
      assertThat(e)
          .hasMessage(
              format(
                  "Failed to parse 2003/04/26 with any of these date formats:%n"
                      + "   [yyyy/MM/dd'T'HH:mm:ss,%n"
                      + "    yyyy-MM-dd'T'HH:mm:ss.SSS,%n"
                      + "    yyyy-MM-dd HH:mm:ss.SSS,%n"
                      + "    yyyy-MM-dd'T'HH:mm:ss,%n"
                      + "    yyyy-MM-dd]"));
    }

    // register the expected custom formats, they are used in the order they have been registered.
    registerCustomDateFormat("yyyy/MM/dd");
    assertThat(date).isEqualTo("2003/04/26");
    // another to register a DateFormat
    registerCustomDateFormat(new SimpleDateFormat("yyyy/MM/dd'T'HH:mm:ss.SSS"));
    // the assertion uses the last custom date format registered.
    assertThat(date).isEqualTo("2003/04/26T00:00:00.000");

    useDefaultDateFormatsOnly();
    assertThat(date).isEqualTo("2003-04-26");
    assertThat(date).isEqualTo("2003-04-26T00:00:00");
    assertThat(date).isEqualTo("2003-04-26T00:00:00.000");
  }
 @Test
 public void
     date_assertion_using_custom_date_string_representation_then_switching_back_to_defaults_date_formats() {
   final Date date = DateUtil.parse("2003-04-26");
   // chained assertions
   assertThat(date)
       .withDateFormat("yyyy/MM/dd")
       .isEqualTo("2003/04/26")
       .withDefaultDateFormatsOnly()
       .isEqualTo("2003-04-26");
   // new assertions
   assertThat(date).withDateFormat("yyyy/MM/dd").isEqualTo("2003/04/26");
   assertThat(date).withDefaultDateFormatsOnly().isEqualTo("2003-04-26");
 }
 @Test
 public void date_assertion_using_default_date_string_representation() {
   // datetime with ms is supported
   final Date date1timeWithMS = parseDatetimeWithMs("2003-04-26T03:01:02.999");
   assertThat(date1timeWithMS).isEqualTo("2003-04-26T03:01:02.999");
   // datetime without ms is supported
   final Date datetime = parseDatetime("2003-04-26T03:01:02");
   assertThat(datetime).isEqualTo("2003-04-26T03:01:02.000");
   assertThat(datetime).isEqualTo("2003-04-26T03:01:02");
   // date is supported
   final Date date = DateUtil.parse("2003-04-26");
   assertThat(date).isEqualTo("2003-04-26");
   assertThat(date).isEqualTo("2003-04-26T00:00:00");
   assertThat(date).isEqualTo("2003-04-26T00:00:00.000");
 }
 @Test
 public void should_create_error_message() {
   Date actual = DateUtil.parseDatetime("2011-01-01T05:01:00");
   Date expected = DateUtil.parseDatetime("2011-01-01T05:01:01");
   String message =
       shouldHaveSameTime(actual, expected)
           .create(new TextDescription("Test"), new StandardRepresentation());
   assertThat(message)
       .isEqualTo(
           format(
               "[Test] %n"
                   + "Expecting%n"
                   + "  <2011-01-01T05:01:00.000>%n"
                   + "to have the same time as:%n"
                   + "  <2011-01-01T05:01:01.000>%n"
                   + "but actual time is%n"
                   + "  <"
                   + actual.getTime()
                   + "L>%n"
                   + "and expected was:%n"
                   + "  <"
                   + expected.getTime()
                   + "L>"));
 }
  @Test
  public void use_custom_date_formats_first_then_defaults_to_parse_a_date() {
    // using default formats should work
    final Date date = DateUtil.parse("2003-04-26");
    assertThat(date).isEqualTo("2003-04-26");

    try {
      // date with a custom format : failure since the default formats don't match.
      assertThat(date).isEqualTo("2003/04/26");
      failBecauseExpectedAssertionErrorWasNotThrown();
    } catch (AssertionError e) {
      assertThat(e)
          .hasMessage(
              format(
                  "Failed to parse 2003/04/26 with any of these date formats:%n"
                      + "   [yyyy-MM-dd'T'HH:mm:ss.SSS,%n"
                      + "    yyyy-MM-dd HH:mm:ss.SSS,%n"
                      + "    yyyy-MM-dd'T'HH:mm:ss,%n"
                      + "    yyyy-MM-dd]"));
    }

    // registering a custom date format to make the assertion pass
    registerCustomDateFormat("yyyy/MM/dd");
    assertThat(date).isEqualTo("2003/04/26");
    // the default formats are still available and should work
    assertThat(date).isEqualTo("2003-04-26");
    assertThat(date).isEqualTo("2003-04-26T00:00:00");

    try {
      // but if not format at all matches, it fails.
      assertThat(date).isEqualTo("2003 04 26");
      failBecauseExpectedAssertionErrorWasNotThrown();
    } catch (AssertionError e) {
      assertThat(e)
          .hasMessage(
              format(
                  "Failed to parse 2003 04 26 with any of these date formats:%n"
                      + "   [yyyy/MM/dd,%n"
                      + "    yyyy-MM-dd'T'HH:mm:ss.SSS,%n"
                      + "    yyyy-MM-dd HH:mm:ss.SSS,%n"
                      + "    yyyy-MM-dd'T'HH:mm:ss,%n"
                      + "    yyyy-MM-dd]"));
    }

    // register a new custom format should work
    registerCustomDateFormat("yyyy MM dd");
    assertThat(date).isEqualTo("2003 04 26");
  }
 @Test
 public void
     should_fail_if_given_date_string_representation_cant_be_parsed_with_any_custom_date_formats() {
   thrown.expectAssertionError(
       "Failed to parse 2003 04 26 with any of these date formats:%n"
           + "   [yyyy/MM/dd'T'HH:mm:ss,%n"
           + "    yyyy/MM/dd,%n"
           + "    yyyy-MM-dd'T'HH:mm:ss.SSS,%n"
           + "    yyyy-MM-dd HH:mm:ss.SSS,%n"
           + "    yyyy-MM-dd'T'HH:mm:ss,%n"
           + "    yyyy-MM-dd]");
   final Date date = DateUtil.parse("2003-04-26");
   registerCustomDateFormat("yyyy/MM/dd'T'HH:mm:ss");
   // registering again has no effect
   registerCustomDateFormat("yyyy/MM/dd'T'HH:mm:ss");
   assertThat(date).withDateFormat("yyyy/MM/dd").isEqualTo("2003 04 26");
 }
 @Test
 public void date_assertion_using_custom_date_string_representation() {
   final Date date = DateUtil.parse("2003-04-26");
   assertThat(date).withDateFormat("yyyy/MM/dd").isEqualTo("2003/04/26");
   assertThat(date).isEqualTo("2003/04/26");
 }