package testcases.csv;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.testng.annotations.Test;
import de.jpaw.bonaparte.core.BonaCustom;
import de.jpaw.bonaparte.core.BonaPortable;
import de.jpaw.bonaparte.core.CSVComposer;
import de.jpaw.bonaparte.core.CSVConfiguration;
import de.jpaw.bonaparte.core.EnumAsTokenComposerFilter;
import de.jpaw.bonaparte.core.FoldingComposer;
import de.jpaw.bonaparte.core.MessageComposer;
import de.jpaw.bonaparte.pojos.csvTests.Color;
import de.jpaw.bonaparte.pojos.csvTests.Test3;
import de.jpaw.bonaparte.pojos.meta.FoldingStrategy;
public class TestEnumFilter {
private static CSVConfiguration unixPasswdCfg = new CSVConfiguration.Builder().usingSeparator(":").usingQuoteCharacter(null).build();
private static List<String> fields = Arrays.asList( "color");
private static Map<Class<? extends BonaCustom>, List<String>> map = new HashMap<Class<? extends BonaCustom>, List<String>> (10);
static {
map.put(BonaPortable.class, fields);
}
private static void runTest(BonaPortable input, String expectedOutput, boolean doEnumFilter, boolean doFolding) {
StringBuilder buffer = new StringBuilder(200);
CSVComposer cmp = new CSVComposer(buffer, unixPasswdCfg);
cmp.setWriteCRs(false);
MessageComposer<IOException> c1 = doEnumFilter ? new EnumAsTokenComposerFilter<IOException>(cmp) : cmp;
MessageComposer<IOException> c2 = doFolding ? new FoldingComposer<IOException>(c1, map, FoldingStrategy.TRY_SUPERCLASS) : c1;
try {
c2.writeRecord(input);
} catch (IOException e) {
// I hate those checked Exceptions which are even outright wrong!
throw new RuntimeException("Hey, StringBuilder.append threw an IOException!" + e);
}
String actualOutput = buffer.toString();
System.out.println(actualOutput);
if (!expectedOutput.equals(actualOutput))
System.out.println("Got " + actualOutput + " instead of " + expectedOutput);
assert(expectedOutput.equals(actualOutput));
}
@Test
public void testUnixPasswd() throws Exception {
Test3 testCase = new Test3("Hello", Color.GREEN);
runTest(testCase, "Hello:GREEN\n", true, false);
runTest(testCase, "Hello:#00FF00\n", false, false);
runTest(testCase, "#00FF00\n", false, true);
runTest(testCase, "Hello:GREEN\n", true, false);
runTest(testCase, "GREEN\n", true, true);
}
}