/*
* Copyright (c) 2012-2016, Luigi R. Viggiano
* All rights reserved.
*
* This software is distributable under the BSD license.
* See the terms of the BSD license in the documentation provided with this software.
*/
package org.aeonbits.owner.converters;
import org.aeonbits.owner.Config;
import org.aeonbits.owner.ConfigFactory;
import org.aeonbits.owner.converters.DurationConverter;
import org.junit.Test;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.assertEquals;
public class DurationConverterTest {
public interface DurationTypesConfig extends Config {
// empty suffix
@ConverterClass(DurationConverter.class)
@DefaultValue("10")
Duration emptySuffix();
// no space before suffix
@ConverterClass(DurationConverter.class)
@DefaultValue("10ms")
Duration noSpaceBeforeSuffix();
// nanoseconds
@ConverterClass(DurationConverter.class)
@DefaultValue("10 ns")
Duration nsSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 nano")
Duration nanoSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 nanos")
Duration nanosSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 nanosecond")
Duration nanosecondSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 nanoseconds")
Duration nanosecondsSuffix();
// microseconds
@ConverterClass(DurationConverter.class)
@DefaultValue("10 us")
Duration usSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 µs")
Duration µsSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 micro")
Duration microSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 micros")
Duration microsSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 microsecond")
Duration microsecondSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 microseconds")
Duration microsecondsSuffix();
// milliseconds
@ConverterClass(DurationConverter.class)
@DefaultValue("10 ms")
Duration msSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 milli")
Duration milliSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 millis")
Duration millisSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 millisecond")
Duration millisecondSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 milliseconds")
Duration millisecondsSuffix();
// seconds
@ConverterClass(DurationConverter.class)
@DefaultValue("10 s")
Duration sSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 second")
Duration secondSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 seconds")
Duration secondsSuffix();
// minutes
@ConverterClass(DurationConverter.class)
@DefaultValue("10 m")
Duration mSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 minute")
Duration minuteSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 minutes")
Duration minutesSuffix();
// hours
@ConverterClass(DurationConverter.class)
@DefaultValue("10 h")
Duration hSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 hour")
Duration hourSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 hours")
Duration hoursSuffix();
// days
@ConverterClass(DurationConverter.class)
@DefaultValue("10 d")
Duration dSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 day")
Duration daySuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("10 days")
Duration daysSuffix();
@ConverterClass(DurationConverter.class)
@DefaultValue("PT15M")
Duration iso8601NoPrefix15Minutes();
@ConverterClass(DurationConverter.class)
@DefaultValue("-PT15M")
Duration iso8601MinusPrefix15Minutes();
@ConverterClass(DurationConverter.class)
@DefaultValue("+PT15M")
Duration iso8601PlusPrefix15Minutes();
@ConverterClass(DurationConverter.class)
@DefaultValue("-PT-6H+3M")
Duration iso8601Complex();
}
private static boolean allEqual(Duration compareTo, Collection<Duration> durations){
for (Duration duration : durations) {
if( !compareTo.equals(duration) ){
return false;
}
}
return true;
}
@Test
public void testEmptySuffix() {
DurationTypesConfig cfg = ConfigFactory.create(DurationTypesConfig.class);
assertEquals(Duration.of(10, ChronoUnit.MILLIS), cfg.emptySuffix());
}
@Test
public void testNoSpaceBeforeSuffix() {
DurationTypesConfig cfg = ConfigFactory.create(DurationTypesConfig.class);
assertEquals(Duration.of(10, ChronoUnit.MILLIS), cfg.noSpaceBeforeSuffix());
}
@Test
public void testSuffixEquality() {
DurationTypesConfig cfg = ConfigFactory.create(DurationTypesConfig.class);
allEqual(Duration.of(10, ChronoUnit.NANOS),
Arrays.asList(cfg.nsSuffix(),cfg.nanoSuffix(),cfg.nanosSuffix(),cfg.nanosecondSuffix(),cfg.nanosecondsSuffix()));
allEqual(Duration.of(10, ChronoUnit.MICROS),
Arrays.asList(cfg.usSuffix(),cfg.µsSuffix(),cfg.microSuffix(),cfg.microsSuffix(),cfg.microsecondSuffix(),cfg.microsecondsSuffix()));
allEqual(Duration.of(10, ChronoUnit.MILLIS),
Arrays.asList(cfg.msSuffix(),cfg.milliSuffix(),cfg.millisSuffix(),cfg.millisecondSuffix(),cfg.millisecondsSuffix()));
allEqual(Duration.of(10, ChronoUnit.SECONDS),
Arrays.asList(cfg.sSuffix(),cfg.secondSuffix(),cfg.secondsSuffix()));
allEqual(Duration.of(10, ChronoUnit.MINUTES),
Arrays.asList(cfg.mSuffix(),cfg.minuteSuffix(),cfg.minutesSuffix()));
allEqual(Duration.of(10, ChronoUnit.HOURS),
Arrays.asList(cfg.hSuffix(),cfg.hourSuffix(),cfg.hoursSuffix()));
allEqual(Duration.of(10, ChronoUnit.DAYS),
Arrays.asList(cfg.dSuffix(),cfg.daySuffix(),cfg.daysSuffix()));
}
@Test
public void testIso8601() {
DurationTypesConfig cfg = ConfigFactory.create(DurationTypesConfig.class);
assertEquals(Duration.of(15, ChronoUnit.MINUTES), cfg.iso8601NoPrefix15Minutes());
assertEquals(cfg.iso8601NoPrefix15Minutes(), cfg.iso8601PlusPrefix15Minutes());
assertEquals(Duration.of(-15, ChronoUnit.MINUTES), cfg.iso8601MinusPrefix15Minutes());
assertEquals(Duration.of(6, ChronoUnit.HOURS).minus(3, ChronoUnit.MINUTES), cfg.iso8601Complex());
}
}