### Question:
TimeValue extends TemporalValue<OffsetTime,TimeValue> { public static TimeValue parse( CharSequence text, Supplier<ZoneId> defaultZone, CSVHeaderInformation fieldsFromHeader ) { if ( fieldsFromHeader != null ) { if ( !(fieldsFromHeader instanceof TimeCSVHeaderInformation) ) { throw new IllegalStateException( "Wrong header information type: " + fieldsFromHeader ); } defaultZone = ((TimeCSVHeaderInformation) fieldsFromHeader).zoneSupplier( defaultZone ); } return parse( TimeValue.class, PATTERN, TimeValue::parse, text, defaultZone ); } private  TimeValue( OffsetTime value ); static TimeValue time( OffsetTime time ); static TimeValue time( int hour, int minute, int second, int nanosOfSecond, String offset ); static TimeValue time( int hour, int minute, int second, int nanosOfSecond, ZoneOffset offset ); static TimeValue time( long nanosOfDayUTC, ZoneOffset offset ); static OffsetTime timeRaw( long nanosOfDayUTC, ZoneOffset offset ); @Override String getTypeName(); static TimeValue parse( CharSequence text, Supplier<ZoneId> defaultZone, CSVHeaderInformation fieldsFromHeader ); static TimeValue parse( CharSequence text, Supplier<ZoneId> defaultZone ); static TimeValue parse( TextValue text, Supplier<ZoneId> defaultZone ); static TimeValue now( Clock clock ); static TimeValue now( Clock clock, String timezone ); static TimeValue now( Clock clock, Supplier<ZoneId> defaultZone ); static TimeValue build( MapValue map, Supplier<ZoneId> defaultZone ); static TimeValue select( AnyValue from, Supplier<ZoneId> defaultZone ); static TimeValue truncate(
            TemporalUnit unit,
            TemporalValue input,
            MapValue fields,
            Supplier<ZoneId> defaultZone ); @Override boolean supportsTimeZone(); @Override boolean equals( Value other ); @Override void writeTo( ValueWriter<E> writer ); @Override String prettyPrint(); @Override ValueGroup valueGroup(); @Override T map( ValueMapper<T> mapper ); @Override TimeValue add( DurationValue duration ); @Override TimeValue sub( DurationValue duration ); static final TimeValue MIN_VALUE; static final TimeValue MAX_VALUE; }### Answer:
@Test @SuppressWarnings( "ThrowableNotThrown" ) void shouldFailToParseTimeOutOfRange() { assertThrows( TemporalParseException.class, () -> parse( "24", inUTC ) ); assertThrows( TemporalParseException.class, () -> parse( "1760", inUTC ) ); assertThrows( TemporalParseException.class, () -> parse( "173260", inUTC ) ); assertThrows( TemporalParseException.class, () -> parse( "173250.0000000001", inUTC ) ); }
@Test void shouldBeAbleToParseTimeWithoutTimeZoneWithHeaderInformation() { String headerInformation = "{timezone:-01:00}"; String data = "14:05:17"; TimeValue expected = TimeValue.parse( data, () -> ZoneId.of( "-01:00" ) ); TimeValue unexpected = TimeValue.parse( data, inUTC ); TimeValue actual = TimeValue.parse( data, orFail, TemporalValue.parseHeaderInformation( headerInformation ) ); assertEqual( expected, actual ); assertNotEquals( unexpected, actual ); }