Files
github-api/src/test/java/org/kohsuke/github/GitHubStaticTest.java
2019-10-31 16:10:34 -07:00

80 lines
2.8 KiB
Java

package org.kohsuke.github;
import org.junit.Assert;
import org.junit.Test;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.TimeZone;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.not;
/**
* Unit test for {@link GitHub} static helpers.
*
* @author Liam Newman
*/
public class GitHubStaticTest extends Assert {
@Test
public void timeRoundTrip() throws Exception {
Instant instantNow = Instant.now();
Date instantSeconds = Date.from(instantNow.truncatedTo(ChronoUnit.SECONDS));
Date instantMillis = Date.from(instantNow.truncatedTo(ChronoUnit.MILLIS));
// if we happen to land exactly on zero milliseconds, add 1 milli
if (instantSeconds.equals(instantMillis)) {
instantMillis = Date.from(instantNow.plusMillis(1).truncatedTo(ChronoUnit.MILLIS));
}
// TODO: other formats
String instantFormatSlash = formatDate(instantMillis, "yyyy/MM/dd HH:mm:ss ZZZZ");
String instantFormatDash = formatDate(instantMillis, "yyyy-MM-dd'T'HH:mm:ss'Z'");
String instantFormatMillis = formatDate(instantMillis, "yyyy-MM-dd'T'HH:mm:ss.S'Z'");
String instantSecondsFormatMillis = formatDate(instantSeconds, "yyyy-MM-dd'T'HH:mm:ss.S'Z'");
String instantBadFormat = formatDate(instantMillis, "yy-MM-dd'T'HH:mm'Z'");
assertThat(GitHub.parseDate(GitHub.printDate(instantSeconds)),
equalTo(GitHub.parseDate(GitHub.printDate(instantMillis))));
assertThat(instantSeconds,
equalTo(GitHub.parseDate(GitHub.printDate(instantSeconds))));
// printDate will truncate to the nearest second, so it should not be equal
assertThat(instantMillis,
not(equalTo(GitHub.parseDate(GitHub.printDate(instantMillis)))));
assertThat(instantSeconds,
equalTo(GitHub.parseDate(instantFormatSlash)));
assertThat(instantSeconds,
equalTo(GitHub.parseDate(instantFormatDash)));
// This parser does not truncate to the nearest second, so it will be equal
assertThat(instantMillis,
equalTo(GitHub.parseDate(instantFormatMillis)));
assertThat(instantSeconds,
equalTo(GitHub.parseDate(instantSecondsFormatMillis)));
try {
GitHub.parseDate(instantBadFormat);
fail("Bad time format should throw.");
} catch (IllegalStateException e) {
assertThat(e.getMessage(), equalTo("Unable to parse the timestamp: " + instantBadFormat));
}
}
static String formatDate(Date dt, String format) {
SimpleDateFormat df = new SimpleDateFormat(format);
df.setTimeZone(TimeZone.getTimeZone("GMT"));
return df.format(dt);
}
}