package fr.openwide.core.test.commons.util.functional.converter;
import java.math.BigDecimal;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
import com.google.common.base.Converter;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
import fr.openwide.core.commons.util.functional.Suppliers2;
import fr.openwide.core.commons.util.functional.converter.StringBigDecimalConverter;
import fr.openwide.core.commons.util.functional.converter.StringBooleanConverter;
import fr.openwide.core.commons.util.functional.converter.StringCollectionConverter;
import fr.openwide.core.commons.util.functional.converter.StringDateConverter;
import fr.openwide.core.commons.util.functional.converter.StringDateTimeConverter;
import fr.openwide.core.commons.util.functional.converter.StringLocaleConverter;
import fr.openwide.core.commons.util.functional.converter.StringURIConverter;
@RunWith(Parameterized.class)
public class ConvertersTest {
@Parameters(name = "{index} - {1} expecting {2}")
public static Iterable<Object[]> data() throws URISyntaxException {
return Arrays.asList(new Object[][] {
{ StringBigDecimalConverter.get(), "15.01", new BigDecimal("15.01") },
{ StringBigDecimalConverter.get().reverse(), new BigDecimal("15.01"), "15.01" },
{ StringBooleanConverter.get(), "true", true },
{ StringBooleanConverter.get(), "on", true },
{ StringBooleanConverter.get(), "yes", true },
{ StringBooleanConverter.get(), "1", true },
{ StringBooleanConverter.get(), "false", false },
{ StringBooleanConverter.get(), "off", false },
{ StringBooleanConverter.get(), "no", false },
{ StringBooleanConverter.get(), "0", false },
{ StringBooleanConverter.get().reverse(), true, "true" },
{ StringBooleanConverter.get().reverse(), false, "false" },
{ new StringCollectionConverter<>(StringBooleanConverter.get(), Suppliers2.<Boolean>arrayList()), "true false true", Lists.newArrayList(true, false, true) },
{ new StringCollectionConverter<>(Converter.<String>identity(), Suppliers2.<String>arrayList()).separator("_"), "test1_test2_test3", Lists.newArrayList("test1", "test2", "test3") },
{ new StringCollectionConverter<>(StringBooleanConverter.get(), Suppliers2.<Boolean>arrayList()).separator(";").reverse(), Lists.newArrayList(true, false, true), "true;false;true" },
{ new StringCollectionConverter<>(Converter.<String>identity(), Suppliers2.<String>arrayList()).joiner(Joiner.on("@").skipNulls()).reverse(), Lists.newArrayList("test1", "test2", null), "test1@test2" },
{ StringDateConverter.get(), "1990-04-18", new GregorianCalendar(1990, Calendar.APRIL, 18, 0, 0, 0).getTime() },
{ StringDateConverter.get(), "2015-12-25", new GregorianCalendar(2015, Calendar.DECEMBER, 25, 0, 0, 0).getTime() },
{ StringDateConverter.get().reverse(), new GregorianCalendar(1990, Calendar.APRIL, 18, 0, 0, 0).getTime(), "1990-04-18" },
{ StringDateConverter.get().reverse(), new GregorianCalendar(2015, Calendar.DECEMBER, 25, 0, 0, 0).getTime(), "2015-12-25"},
{ StringDateTimeConverter.get(), "1990-04-18 12:04", new GregorianCalendar(1990, Calendar.APRIL, 18, 12, 4, 0).getTime() },
{ StringDateTimeConverter.get(), "2015-12-31 23:59:59", new GregorianCalendar(2015, Calendar.DECEMBER, 31, 23, 59, 59).getTime() },
{ StringDateTimeConverter.get().reverse(), new GregorianCalendar(1990, Calendar.APRIL, 18, 12, 4, 0).getTime(), "1990-04-18 12:04:00" },
{ StringDateTimeConverter.get().reverse(), new GregorianCalendar(2015, Calendar.DECEMBER, 31, 23, 59, 59).getTime(), "2015-12-31 23:59:59"},
{ StringLocaleConverter.get(), "fr", Locale.FRENCH },
{ StringLocaleConverter.get(), "fr-FR", Locale.FRANCE },
{ StringLocaleConverter.get(), "en", Locale.ENGLISH },
{ StringLocaleConverter.get(), "en-US", Locale.US },
{ StringLocaleConverter.get(), "pt-BR", new Locale("pt", "BR") },
{ StringLocaleConverter.get().reverse(), Locale.FRENCH, "fr" },
{ StringLocaleConverter.get().reverse(), Locale.FRANCE, "fr-FR" },
{ StringLocaleConverter.get().reverse(), Locale.ENGLISH, "en" },
{ StringLocaleConverter.get().reverse(), Locale.US, "en-US" },
{ StringLocaleConverter.get().reverse(), new Locale("pt", "BR"), "pt-BR" },
{ StringURIConverter.get(), "http://www.openwide.fr", new URI("http://www.openwide.fr") },
{ StringURIConverter.get().reverse(), new URI("www.openwide.fr"), "www.openwide.fr" }
});
}
@Parameter(0)
public Converter<Object, Object> converter;
@Parameter(1)
public Object value;
@Parameter(2)
public Object expectedValue;
@Test
public void testConverters() {
Assert.assertEquals(converter.convert(value), expectedValue);
}
}