/*
* 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.util.bytesize.ByteSize;
import org.aeonbits.owner.util.bytesize.ByteSizeUnit;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import static org.junit.Assert.*;
/**
* @author Stefan Freyr Stefansson
*/
public class ByteSizeConverterTest {
public interface ByteSizeConfig extends Config {
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10 byte")
ByteSize singular10byteWithSpace();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10byte")
ByteSize singular10byteWithoutSpace();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10 bytes")
ByteSize plural10byte();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10m")
ByteSize short10mebibytes();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10mi")
ByteSize medium10mebibytes();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10mib")
ByteSize long10mebibytes();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10 megabytes")
ByteSize full10megabytes();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("10 sillybyte")
ByteSize invalidSillybyte();
@ConverterClass(ByteSizeConverter.class)
@DefaultValue("megabyte")
ByteSize invalidNoNumber();
}
@Test
public void testValidByteSizeConverter(){
ByteSizeConfig cfg = ConfigFactory.create(ByteSizeConfig.class);
ByteSize bs;
bs = cfg.plural10byte();
assertEquals(bs, new ByteSize(10, ByteSizeUnit.BYTES));
bs = cfg.singular10byteWithoutSpace();
assertEquals(bs, new ByteSize(10, ByteSizeUnit.BYTES));
bs = cfg.singular10byteWithSpace();
assertEquals(bs, new ByteSize(10, ByteSizeUnit.BYTES));
ByteSize compare = new ByteSize(10, ByteSizeUnit.MEBIBYTES);
assertEquals(compare, cfg.short10mebibytes());
assertEquals(compare, cfg.medium10mebibytes());
assertEquals(compare, cfg.long10mebibytes());
assertNotEquals(compare, cfg.full10megabytes());
assertEquals(new ByteSize(10, ByteSizeUnit.MEGABYTES), cfg.full10megabytes());
}
@Test
public void testInvalid() throws NoSuchMethodException, IllegalAccessException {
ByteSizeConfig cfg = ConfigFactory.create(ByteSizeConfig.class);
ByteSize bs;
for (String method : new String[]{"invalidSillybyte", "invalidNoNumber"}) {
Method m = ByteSizeConfig.class.getDeclaredMethod(method);
try {
bs = (ByteSize) m.invoke(cfg);
fail(String.format("Invalid byte size [%s] should have thrown an exception. Instead we parsed: %s", method, bs));
} catch (InvocationTargetException e) {
if (!(e.getCause() instanceof IllegalArgumentException)){
fail("Got an unexpected exception type when calling method: " + method);
}
}
}
}
}