package jfxtras.icalendarfx.property.component;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import org.junit.Test;
import jfxtras.icalendarfx.properties.ValueType;
import jfxtras.icalendarfx.properties.component.time.DateTimeStart;
public class DateTimeStartTest
{
@Test
public void canParseDateTimeStart1()
{
DateTimeStart dateTimeStart = DateTimeStart.parse(LocalDateTime.class, "20160322T174422");
String expectedContentLine = "DTSTART:20160322T174422";
String madeContentLine = dateTimeStart.toString();
assertEquals(expectedContentLine, madeContentLine);
assertEquals(LocalDateTime.of(2016, 3, 22, 17, 44, 22), dateTimeStart.getValue());
}
@Test
public void canParseDateTimeStart2()
{
DateTimeStart dateTimeStart = DateTimeStart.parse(LocalDate.class, "DTSTART;VALUE=DATE:20160322");
String expectedContentLine = "DTSTART;VALUE=DATE:20160322";
String madeContentLine = dateTimeStart.toString();
assertEquals(expectedContentLine, madeContentLine);
assertEquals(LocalDate.of(2016, 3, 22), dateTimeStart.getValue());
DateTimeStart dateTimeStart2 = new DateTimeStart(LocalDate.of(2016, 3, 22));
assertEquals(dateTimeStart, dateTimeStart2);
assertEquals(dateTimeStart.toString(), dateTimeStart2.toString());
}
@Test
public void canParseDateTimeStart3()
{
DateTimeStart dateTimeStart = DateTimeStart.parse(ZonedDateTime.class, "DTSTART;TZID=America/Los_Angeles:20160306T043000");
String expectedContentLine = "DTSTART;TZID=America/Los_Angeles:20160306T043000";
String madeContentLine = dateTimeStart.toString();
assertEquals(expectedContentLine, madeContentLine);
assertEquals(ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("America/Los_Angeles")), dateTimeStart.getValue());
}
@Test
public void canParseDateTimeStart4()
{
DateTimeStart dateTimeStart = new DateTimeStart(ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("America/Los_Angeles")))
.withTimeZoneIdentifier("America/Los_Angeles")
.withValueType(ValueType.DATE_TIME);;
String expectedContentLine = "DTSTART;TZID=America/Los_Angeles;VALUE=DATE-TIME:20160306T043000";
DateTimeStart expectedDateTimeStart = DateTimeStart.parse(ZonedDateTime.class, expectedContentLine);
assertEquals(expectedDateTimeStart, dateTimeStart);
String madeContentLine = dateTimeStart.toString();
assertEquals(expectedContentLine, madeContentLine);
}
@Test
public void canBuildDateTimeStartZoned()
{
DateTimeStart dateTimeStart = new DateTimeStart(ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("America/Los_Angeles")))
.withTimeZoneIdentifier("America/Los_Angeles")
.withValueType(ValueType.DATE_TIME);
DateTimeStart expectedDateTimeStart = DateTimeStart.parse(ZonedDateTime.class, "DTSTART;TZID=America/Los_Angeles;VALUE=DATE-TIME:20160306T043000");
assertEquals(expectedDateTimeStart, dateTimeStart);
}
@Test
public void canBuildDateTimeStartZoned2()
{
DateTimeStart dateTimeStart = new DateTimeStart(ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("America/Los_Angeles")));
DateTimeStart expectedDateTimeStart = DateTimeStart.parse(ZonedDateTime.class, "DTSTART;TZID=America/Los_Angeles:20160306T043000");
assertEquals(expectedDateTimeStart, dateTimeStart);
}
@Test
public void canBuildDateTimeStartZonedUTC()
{
DateTimeStart dateTimeStart = new DateTimeStart(ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 4, 30), ZoneId.of("Z")));
String expectedContentLine = "DTSTART:20160306T043000Z";
DateTimeStart expectedDateTimeStart = DateTimeStart.parse(ZonedDateTime.class, expectedContentLine);
assertEquals(expectedContentLine, dateTimeStart.toString());
assertEquals(expectedDateTimeStart, dateTimeStart);
}
@Test
public void canBuildDateTimeStartZonedUTC2()
{
DateTimeStart dateTimeStart = new DateTimeStart(ZonedDateTime.of(LocalDateTime.of(2016, 3, 6, 6, 0), ZoneId.of("Etc/GMT")));
String expectedContentLine = "DTSTART;TZID=Etc/GMT:20160306T060000Z";
DateTimeStart expectedDateTimeStart = DateTimeStart.parse(ZonedDateTime.class, expectedContentLine);
assertEquals(expectedContentLine, dateTimeStart.toString());
assertEquals(expectedDateTimeStart, dateTimeStart);
}
@Test
public void canBuildDateTimeStartLocal()
{
DateTimeStart dateTimeStart = new DateTimeStart(LocalDateTime.of(2016, 3, 6, 4, 30));
String expectedContentLine = "DTSTART:20160306T043000";
DateTimeStart expectedDateTimeStart = DateTimeStart.parse(expectedContentLine);
assertEquals(expectedContentLine, dateTimeStart.toString());
assertEquals(expectedDateTimeStart, dateTimeStart);
}
@Test
public void canCopyDateTimeStart()
{
DateTimeStart dateTimeStart1 = new DateTimeStart(LocalDateTime.of(2016, 3, 6, 4, 30));
DateTimeStart dateTimeStart2 = new DateTimeStart(dateTimeStart1);
assertEquals(dateTimeStart1, dateTimeStart2);
assertTrue(dateTimeStart1 != dateTimeStart2);
}
@Test (expected=ClassCastException.class)
public void canCatchWrongTemporalType()
{
DateTimeStart.parse(LocalDate.class, "DTSTART;TZID=America/Los_Angeles:20160306T043000");
}
@Test (expected=DateTimeException.class)
public void canCatchWrongType()
{
new DateTimeStart(LocalTime.of(5, 10));
}
}