package com.orientechnologies.orient.core.serialization.serializer; import com.orientechnologies.common.io.OIOUtils; import org.testng.annotations.Test; import java.util.ArrayList; import java.util.List; import java.util.Map; import static com.orientechnologies.orient.core.serialization.serializer.OStringSerializerHelper.*; import static org.testng.Assert.*; public class OStringSerializerHelperTest { @Test public void test() { final List<String> stringItems = new ArrayList<String>(); final String text = "['f\\\'oo', 'don\\\'t can\\\'t', \"\\\"bar\\\"\", 'b\\\"a\\\'z', \"q\\\"u\\'x\"]"; final int startPos = 0; OStringSerializerHelper.getCollection(text, startPos, stringItems, OStringSerializerHelper.LIST_BEGIN, OStringSerializerHelper.LIST_END, OStringSerializerHelper.COLLECTION_SEPARATOR); assertEquals(OIOUtils.getStringContent(stringItems.get(0)), "f'oo"); assertEquals(OIOUtils.getStringContent(stringItems.get(1)), "don't can't"); assertEquals(OIOUtils.getStringContent(stringItems.get(2)), "\"bar\""); assertEquals(OIOUtils.getStringContent(stringItems.get(3)), "b\"a\'z"); assertEquals(OIOUtils.getStringContent(stringItems.get(4)), "q\"u\'x"); } @Test public void testSmartTrim() { String input = " t est "; assertEquals(smartTrim(input, true, true), "t est"); assertEquals(smartTrim(input, false, true), " t est"); assertEquals(smartTrim(input, true, false), "t est "); assertEquals(smartTrim(input, false, false), " t est "); } @Test public void testEncode() { assertEquals(encode("test"), "test"); assertEquals(encode("\"test\""), "\\\"test\\\""); assertEquals(encode("\\test\\"), "\\\\test\\\\"); assertEquals(encode("test\"test"), "test\\\"test"); assertEquals(encode("test\\test"), "test\\\\test"); } @Test public void testDecode() { assertEquals(decode("test"), "test"); assertEquals(decode("\\\"test\\\""), "\"test\""); assertEquals(decode("\\\\test\\\\"), "\\test\\"); assertEquals(decode("test\\\"test"), "test\"test"); assertEquals(decode("test\\\\test"), "test\\test"); } @Test public void testEncodeAndDecode() { String[] values = { "test", "test\"", "test\"test", "test\\test", "test\\\\test", "test\\\\\"test", "\\\\\\\\", "\"\"\"\"", "\\\"\\\"\\\"" }; for (String value : values) { String encoded = encode(value); String decoded = decode(encoded); assertEquals(decoded, value); } } @Test public void testGetMap() { String testText = ""; Map<String, String> map = OStringSerializerHelper.getMap(testText); assertNotNull(map); assertTrue(map.isEmpty()); testText = "{ param1 :value1, param2 :value2}"; // testText = "{\"param1\":\"value1\",\"param2\":\"value2\"}"; map = OStringSerializerHelper.getMap(testText); assertNotNull(map); assertFalse(map.isEmpty()); System.out.println(map); System.out.println(map.keySet()); System.out.println(map.values()); assertEquals(map.get("param1"), "value1"); assertEquals(map.get("param2"), "value2"); // Following tests will be nice to support, but currently it's not supported! // {param1 :value1, param2 :value2} // {param1 : value1, param2 : value2} // {param1 : "value1", param2 : "value2"} // {"param1" : "value1", "param2" : "value2"} // {param1 : "value1\\value1", param2 : "value2\\value2"} } @Test public void testIndexOf() { String testString = "This is my test string"; assertEquals(indexOf(testString, 0, 'T'), 0); assertEquals(indexOf(testString, 0, 'h'), 1); assertEquals(indexOf(testString, 0, 'i'), 2); assertEquals(indexOf(testString, 0, 'h', 'i'), 1); assertEquals(indexOf(testString, 2, 'i'), 2); assertEquals(indexOf(testString, 3, 'i'), 5); } @Test public void testSmartSplit() { String testString = "a, b, c, d"; List<String> splitted = smartSplit(testString, ','); assertEquals(splitted.get(0), "a"); assertEquals(splitted.get(1), " b"); assertEquals(splitted.get(2), " c"); assertEquals(splitted.get(3), " d"); splitted = smartSplit(testString, ',', ' '); assertEquals(splitted.get(0), "a"); assertEquals(splitted.get(1), "b"); assertEquals(splitted.get(2), "c"); assertEquals(splitted.get(3), "d"); splitted = smartSplit(testString, ',', ' ', 'c'); assertEquals(splitted.get(0), "a"); assertEquals(splitted.get(1), "b"); assertEquals(splitted.get(2), ""); assertEquals(splitted.get(3), "d"); testString = "a test, b test, c test, d test"; splitted = smartSplit(testString, ',', ' '); assertEquals(splitted.get(0), "atest"); assertEquals(splitted.get(1), "btest"); assertEquals(splitted.get(2), "ctest"); assertEquals(splitted.get(3), "dtest"); } @Test public void testGetLowerIndexOfKeywords() { assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("from", 0, "from"), 0); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from", 0, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from foo", 0, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select out[' from '] from foo", 0, "from"), 21); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from", 7, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from foo", 7, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from", 8, "from"), -1); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from foo", 8, "from"), -1); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select\tfrom", 0, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select\tfrom\tfoo", 0, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select\tout[' from ']\tfrom\tfoo", 0, "from"), 21); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select\nfrom", 0, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select\nfrom\nfoo", 0, "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select\nout[' from ']\nfrom\nfoo", 0, "from"), 21); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from", 0, "let", "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from foo", 0, "let", "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select out[' from '] from foo", 0, "let", "from"), 21); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from", 0, "let", "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select from foo", 0, "let", "from"), 7); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select out[' from '] from foo let a = 1", 0, "let", "from"), 21); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select out[' from '] from foo let a = 1", 0, "from", "let"), 21); assertEquals(OStringSerializerHelper.getLowerIndexOfKeywords("select (select from foo) as bar from foo", 0, "let", "from"), 32); } }