DateValue selectDate( org.neo4j.values.AnyValue date ) { if ( date instanceof DateValue ) { return (DateValue) date; } return date( getDateOf( date ) ); } }
@Test public void shouldHandleDate() { // Given DateValue dvalue = DateValue.date( 1, 2, 3 ); // When dvalue.writeTo( converter ); // Then Object value = converter.value(); assertThat( value, instanceOf( LocalDate.class ) ); assertThat( value, equalTo( dvalue.asObjectCopy() ) ); }
@Test void shouldParseYearMonth() { assertEquals( date( 2015, 3, 1 ), parse( "201503" ) ); assertEquals( date( 2015, 3, 1 ), parse( "2015-03" ) ); assertEquals( date( 2015, 3, 1 ), parse( "2015-3" ) ); assertEquals( date( 2015, 3, 1 ), parse( "+2015-03" ) ); assertCannotParse( "2018-00" ); assertCannotParse( "2018-13" ); }
public static DateValue epochDate( long epochDay ) { return new DateValue( epochDateRaw( epochDay ) ); }
@Override public void writeDate( LocalDate localDate ) throws RuntimeException { builder.append( DateValue.date( localDate ).prettyPrint() ); builder.append( '|' ); }
public static DateValue truncate( TemporalUnit unit, TemporalValue input, MapValue fields, Supplier<ZoneId> defaultZone ) { LocalDate localDate = input.getDatePart(); DateValue truncated = date( truncateTo( localDate, unit ) ); if ( fields.size() == 0 ) { return truncated; } else { MapValue updatedFields = fields.updatedWith( "date", truncated ); return build( updatedFields, defaultZone ); } }
@Test public void testDateTypeSmallEpochDay() { LocalDate date = DateValue.date( 2018, 1, 31 ).asObjectCopy(); String key = "dt"; node1.setProperty( key, date ); newTransaction(); Object property = node1.getProperty( key ); assertEquals( date, property ); }
@Test public void testDateArray() { LocalDate[] array = new LocalDate[]{DateValue.date( 2018, 1, 31 ).asObjectCopy(), DateValue.epochDate( 2147483648L ).asObjectCopy()}; String key = "testarray"; node1.setProperty( key, array ); newTransaction(); LocalDate[] propertyValue = (LocalDate[]) node1.getProperty( key ); assertEquals( array.length, propertyValue.length ); for ( int i = 0; i < array.length; i++ ) { assertEquals( array[i], propertyValue[i] ); } node1.removeProperty( key ); newTransaction(); assertTrue( !node1.hasProperty( key ) ); }
@Override protected DateValue parse( TextValue value, Supplier<ZoneId> defaultZone ) { return DateValue.parse( value ); }
@Test void shouldWriteDate() { // given for ( DateValue value : new DateValue[] { date( 2016, 2, 29 ), date( 2017, 12, 22 ), } ) { List<DateValue> values = new ArrayList<>( 1 ); ValueWriter<RuntimeException> writer = new ThrowingValueWriter.AssertOnly() { @Override public void writeDate( LocalDate localDate ) { values.add( date( localDate ) ); } }; // when value.writeTo( writer ); // then assertEquals( singletonList( value ), values ); } }
@Test void shouldAddDurationToDates() { assertEquals( date( 2018, 2, 1 ), date( 2018, 1, 1 ).add( DurationValue.duration( 1, 0, 900, 0 ) ) ); assertEquals(date( 2018, 2, 28 ), date( 2018, 1, 31 ).add( DurationValue.duration( 1, 0, 0, 0 ) ) ); assertEquals(date( 2018, 1, 28 ), date( 2018, 2, 28 ).add( DurationValue.duration( -1, 0, 0, 0 ) ) ); }
@Override public Value asValue() { return DateValue.epochDate( epochDay ); }
@Test void shouldEnforceStrictWeekRanges() { LocalDate localDate = weekDate( 2017, 52, 7 ).temporal(); assertEquals( DayOfWeek.SUNDAY, localDate.getDayOfWeek(), "Sunday is the seventh day of the week." ); assertEquals( 52, localDate.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR ) ); assertEquals( localDate, date( 2017, 12, 31 ).temporal() ); InvalidValuesArgumentException expected = assertThrows( InvalidValuesArgumentException.class, () -> weekDate( 2017, 53, 1 ), "2017 does not have 53 weeks." ); assertEquals( "Year 2017 does not contain 53 weeks.", expected.getMessage() ); assertEquals( date( 2016, 1, 1 ), weekDate( 2015, 53, 5 ) ); }
@Test void shouldSubtractDurationFromDates() { assertEquals( date( 2018, 1, 1 ), date( 2018, 2, 1 ).sub( DurationValue.duration( 1, 0, 900, 0 ) ) ); assertEquals( date( 2018, 1, 28 ), date( 2018, 2, 28 ).sub( DurationValue.duration( 1, 0, 0, 0 ) ) ); assertEquals( date( 2018, 2, 28 ), date( 2018, 1, 31 ).sub( DurationValue.duration( -1, 0, 0, 0 ) ) ); }
@Test void shouldEnforceStrictQuarterRanges() { assertEquals( date( 2017, 3, 31 ), quarterDate( 2017, 1, 90 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 1, 0 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 2, 0 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 3, 0 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 4, 0 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 4, 93 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 3, 93 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 2, 92 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 1, 92 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2017, 1, 91 ) ); assertEquals( date( 2016, 3, 31 ), quarterDate( 2016, 1, 91 ) ); assertThrows( InvalidValuesArgumentException.class, () -> quarterDate( 2016, 1, 92 ) ); }
@Test public void testDateTypeLargeEpochDay() { LocalDate date = DateValue.epochDate( 2147483648L ).asObjectCopy(); String key = "dt"; node1.setProperty( key, date ); newTransaction(); Object property = node1.getProperty( key ); assertEquals( date, property ); }
@Test void shouldParseWeekDate() { assertEquals( weekDate( 2015, 5, 6 ), parse( "2015W056" ) ); assertCannotParse( "+2015W056" ); assertEquals( weekDate( 2015, 5, 6 ), parse( "2015-W05-6" ) ); assertEquals( weekDate( 2015, 5, 6 ), parse( "+2015-W05-6" ) ); assertEquals( weekDate( 2015, 5, 6 ), parse( "2015-W5-6" ) ); assertEquals( weekDate( 2015, 5, 6 ), parse( "+2015-W5-6" ) ); }
@Test void shouldParseQuarterDate() { assumeTrue( DateValue.QUARTER_DATES ); assertEquals( quarterDate( 2017, 3, 92 ), parse( "2017Q392" ) ); assertEquals( quarterDate( 2017, 3, 92 ), parse( "2017-Q3-92" ) ); assertEquals( quarterDate( 2017, 3, 92 ), parse( "+2017-Q3-92" ) ); }
@Test void shouldParseOrdinalDate() { assertEquals( ordinalDate( 2017, 3 ), parse( "2017003" ) ); assertCannotParse( "20173" ); assertEquals( ordinalDate( 2017, 3 ), parse( "2017-003" ) ); assertEquals( ordinalDate( 2017, 3 ), parse( "+2017-003" ) ); assertCannotParse( "2017-366" ); }