package testcases.csv;
import java.util.HashMap;
import java.util.Map;
import org.testng.annotations.Test;
import de.jpaw.bonaparte.core.BonaPortable;
import de.jpaw.bonaparte.core.CSVComposer2;
import de.jpaw.bonaparte.core.CSVConfiguration;
import de.jpaw.bonaparte.core.StringCSVParser;
import de.jpaw.bonaparte.pojos.multiRecordTypes.EdgeRecord;
import de.jpaw.bonaparte.pojos.multiRecordTypes.EofRecord;
import de.jpaw.bonaparte.pojos.multiRecordTypes.HeadRecord;
import de.jpaw.bonaparte.pojos.multiRecordTypes.NodeRecord;
import de.jpaw.bonaparte.pojos.multiRecordTypes.RecordType;
public class TestMultiRecordTypes {
private static final CSVConfiguration cfg = new CSVConfiguration.Builder().usingSeparator(";").usingQuoteCharacter(null).usingZeroPadding(false).build();
private static final String RECORD_ID_HEAD = "HEAD";
private static final String RECORD_ID_NODE = "NODE";
private static final String RECORD_ID_EDGE = "EDGE";
private static final String RECORD_ID_EOF = "EOF";
private static Map<String, Class<? extends BonaPortable>> typeMap = new HashMap<String, Class<? extends BonaPortable>>(4);
static {
typeMap.put(RECORD_ID_HEAD, HeadRecord.class);
typeMap.put(RECORD_ID_NODE, NodeRecord.class);
typeMap.put(RECORD_ID_EDGE, EdgeRecord.class);
typeMap.put(RECORD_ID_EOF, EofRecord.class);
}
private static final HeadRecord head = new HeadRecord(RECORD_ID_HEAD);
private static final NodeRecord node1 = new NodeRecord(RECORD_ID_NODE, "Node 1");
private static final NodeRecord node2 = new NodeRecord(RECORD_ID_NODE, "Node 2");
private static final EdgeRecord edge = new EdgeRecord(RECORD_ID_EDGE, 1, 2);
private static final EofRecord eof = new EofRecord(RECORD_ID_EOF);
private static final RecordType [] dataToSerialize = {
head, node1, node2, edge, eof
};
@Test
public void testMultiRecord() throws Exception {
// setup composer
String [] results = new String [dataToSerialize.length];
StringBuilder buffer = new StringBuilder(200);
CSVComposer2 cmp = new CSVComposer2(buffer, cfg);
cmp.setWriteCRs(false);
for (int i = 0; i < dataToSerialize.length; ++i) {
cmp.reset();
buffer.setLength(0);
cmp.writeRecord(dataToSerialize[i]);
results[i] = buffer.toString();
// System.out.println("Created record " + results[i]);
}
// setup parser
StringCSVParser p = new StringCSVParser(cfg, "", new StringCSVParser.DelimiterBasedObjectTypeDetector(typeMap, cfg.separator));
for (int i = 0; i < dataToSerialize.length; ++i) {
p.setSource(results[i]);
BonaPortable result = p.readRecord();
assert(result != null);
assert(result.getClass() == dataToSerialize[i].getClass());
assert(result.equals(dataToSerialize[i]));
}
}
}