package com.intellij.tasks; import com.intellij.tasks.impl.TaskUtil; import org.jetbrains.annotations.NotNull; import org.junit.Test; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; /** * @author Mikhail Golubev */ public class DateParsingTest { private static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); static { FORMATTER.setTimeZone(TimeZone.getTimeZone("GMT")); } private static void compareDates(@NotNull Date expected, @NotNull String formattedDate) { Date parsed = TaskUtil.parseDate(formattedDate); assertEquals(expected, parsed); } /** * Test ISO8601 date parsing */ @Test public void testDateParsings() throws Exception { final Date expected = FORMATTER.parse("2013-08-23 10:11:12.000"); final Date expectedWithMillis = FORMATTER.parse("2013-08-23 10:11:12.100"); final Date expectedDateOnly = FORMATTER.parse("2013-08-23 00:00:00.000"); // JIRA, Redmine and Pivotal compareDates(expectedWithMillis, "2013-08-23T14:11:12.100+0400"); // Trello compareDates(expectedWithMillis, "2013-08-23T10:11:12.100Z"); // Assmbla compareDates(expectedWithMillis, "2013-08-23T14:11:12.100+04:00"); // Formatting variations compareDates(expected, "2013/08/23 10:11:12"); compareDates(expectedDateOnly, "2013-08-23"); compareDates(expectedWithMillis, "2013-08-23 14:11:12.100123+04"); // Possible Redmine date format, notice space before timezone compareDates(expected, "2013/08/23 14:11:12 +0400"); // Malformed date assertNull(TaskUtil.parseDate("Fri Aug 23 14:11:12 MSK 2013")); assertNull(TaskUtil.parseDate("2013:00:23")); assertNull(TaskUtil.parseDate("2013/08/23 10:11:12 GMT+04:00")); assertNull(TaskUtil.parseDate("2013-08-23+0400")); } }