package edu.berkeley.cs.succinct.block; import edu.berkeley.cs.succinct.block.json.FieldMapping; import edu.berkeley.cs.succinct.block.json.JsonBlockSerializer; import junit.framework.TestCase; import java.util.Arrays; import java.util.Iterator; public class JsonBlockSerializerTest extends TestCase { public void testSerialize() throws Exception { String jsonString1 = "{\"name\":\"abc\", \"age\":18}"; String jsonString2 = "{\"name\":{\"first\":\"abc\", \"last\":\"def\"}, \"age\":16.5}"; String[] jsonData = new String[] {jsonString1, jsonString2}; byte[] delimiters = new byte[120]; for (int i = 0; i < 120; i++) { delimiters[i] = (byte) (i - 120); } JsonBlockSerializer serializer = new JsonBlockSerializer(delimiters); Iterator<String> jsonDataIterator = Arrays.asList(jsonData).iterator(); BlockSerializer.SerializedData serializedData = serializer.serialize(jsonDataIterator); // Check offsets int[] offsets = serializedData.getOffsets(); assertEquals(2, offsets.length); assertEquals(0, offsets[0]); assertEquals(9, offsets[1]); // Check metadata @SuppressWarnings("unchecked") FieldMapping fieldMapping = (FieldMapping) serializedData.getMetadata(); assertEquals(4, fieldMapping.size()); assertTrue(fieldMapping.containsField("name")); assertTrue(fieldMapping.containsField("age")); assertTrue(fieldMapping.containsField("name.first")); assertTrue(fieldMapping.containsField("name.last")); assertEquals(-120, fieldMapping.getDelimiter("name")); assertEquals(-119, fieldMapping.getDelimiter("age")); assertEquals(-118, fieldMapping.getDelimiter("name.first")); assertEquals(-117, fieldMapping.getDelimiter("name.last")); // Check serialized data byte[] expectedSerializedData = new byte[] {-120, 'a', 'b', 'c', -120, -119, '1', '8', -119, -118, 'a', 'b', 'c', -118, -117, 'd', 'e', 'f', -117, -119, '1', '6', '.', '5', -119}; assertTrue(Arrays.equals(expectedSerializedData, serializedData.getData())); } }