@Test public void testCsvDataSourceWithEscapeCharsV2() throws Exception { assumeTrue(csvVersion == CsvStaticDataReader.CSV_V2); verifyCsv("field1,field2,field3\n" + "a\\\\1,a\"2,\"a\\\"3\"\n" + "b\\1,\"b\\2\",\"b\\3\"\n" + "\"c\\\"1\",\"c\\2\",\"c\\3\"" , Lists.mutable.<String>of("field1"), Maps.mutable.of("field1", "a\\1", "field2", "a\"2", "field3", "a\"3"), Maps.mutable.of("field1", "b\\1", "field2", "b\\2", "field3", "b\\3"), Maps.mutable.of("field1", "c\"1", "field2", "c\\2", "field3", "c\\3") ); }
@Test public void testCsvDataSourceWithQuotesAndSpaces() throws Exception { verifyCsv("field1, \"field2\", \"field3 \"\n" + "\" a1 \",a2,a3\n" + "b1, 2, \" b3 \"", Lists.mutable.<String>of("field1"), Maps.mutable.of("field1", " a1 ", "field2", "a2", "field3 ", "a3"), Maps.mutable.of("field1", "b1", "field2", isV2() ? "2" : " 2", "field3 ", " b3 ") ); }
@Test public void testCsvDataSourceMultiLines() throws Exception { verifyCsv("field1, \"field2\", \"field3 \"\n" + "\" a1 \",\"a\n2\",a3\n" + "b1, b2, \" b3 \"", Lists.mutable.<String>of("field1"), Maps.mutable.of("field1", " a1 ", "field2", "a\n2", "field3 ", "a3"), Maps.mutable.of("field1", "b1", "field2", isV2() ? "b2" : " b2", "field3 ", " b3 ") ); }
@Test public void testNullTokens() throws Exception { verifyCsv("field1,field2,field3\n" + "a1, null ,\"null\"\n" + "null,b2,\" null \"", Lists.mutable.<String>of("field1"), Maps.mutable.of("field1", "a1", "field2", isV2() ? null : " null ", "field3", isV2() ? null : "null"), Maps.mutable.of("field1", isV2() ? null : "null", "field2", "b2", "field3", " null ") ); }
@Test public void testCsvDataSourceWithSpaces() throws Exception { verifyCsv("field1, field2, field3\n" + "a1,a2,a3\n" + "b1,b2,b3", Lists.mutable.<String>of("field1"), Maps.mutable.of("field1", "a1", isV2() ? "field2" : " field2", "a2", isV2() ? "field3" : " field3", "a3"), Maps.mutable.of("field1", "b1", isV2() ? "field2" : " field2", "b2", isV2() ? "field3" : " field3", "b3") ); }
@Test public void testSlash() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( " 123 attr=\"abc\\def\" \\ 456=789" ); if (legacyMode) { assertEquals(Maps.mutable.of("attr", "abc\\def", "456", "789"), results.getOne()); assertEquals(Sets.mutable.of("123", "\\"), results.getTwo()); } else { assertEquals(Maps.mutable.of("attr", "abc\\def", "456", "789"), results.getOne()); assertEquals(Sets.mutable.of("123", "\\"), results.getTwo()); } }
@Test public void testQuoteWithinStringIsStillPreservedEvenIfStringIsntClosedForBackwardsCompatibility() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( " =attr 1234 attr2=\"56\"78 mytog1 " ); if (legacyMode) { assertEquals(Maps.mutable.of("", "attr", "attr2", "\"56\"78"), results.getOne()); assertEquals(Sets.mutable.of("1234", "mytog1"), results.getTwo()); } else { assertEquals(Maps.mutable.of("attr2", "\"56\"78"), results.getOne()); assertEquals(Sets.mutable.of("=", "attr", "1234", "mytog1"), results.getTwo()); } }
@Test public void testSlashWithQuoteNoEscaping2() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( " 123 attr=\"abc\\d ef\" \\ 456=789" ); if (legacyMode) { assertEquals(Maps.mutable.of("attr", "\"abc\\d", "456", "789"), results.getOne()); assertEquals(Sets.mutable.of("123", "\\", "ef\""), results.getTwo()); } else { assertEquals(Maps.mutable.of("attr", "abc\\d ef", "456", "789"), results.getOne()); assertEquals(Sets.mutable.of("123", "\\"), results.getTwo()); } }
@Test public void testBehaviorOfStringStartingWithEqualSign() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( " e q =attr 1234 attr2=\"5678\"\" \"\"mytog1\" " ); if (legacyMode) { assertEquals(Maps.mutable.of("", "attr", "attr2", "5678\""), results.getOne()); assertEquals(Sets.mutable.of("1234", "\"\"mytog1\"", "e", "q"), results.getTwo()); } else { assertEquals(Maps.mutable.of("attr2", "5678\""), results.getOne()); assertEquals(Sets.mutable.of("=", "attr", "1234", "\"\"mytog1\"", "e", "q"), results.getTwo()); } }
@Test public void testQuotedSplitWithEqualSign() { String input = "attr=1234 attr2=\"56=78\" mytog1"; if (legacyMode) { try { textMarkupDocumentReader.parseAttrsAndToggles(input); fail("Should have failed here"); } catch (IllegalArgumentException e) { assertThat(e.getMessage(), containsString("Cannot mark = multiple times")); } } else { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles(input); assertEquals(Maps.mutable.of("attr", "1234", "attr2", "56=78"), results.getOne()); assertEquals(Sets.mutable.of("mytog1"), results.getTwo()); } }
@Test public void testSlashWithQuoteNoEscaping() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( " 123 attr=\"abc\\\"d ef\" \\ 456=789" ); if (legacyMode) { assertEquals(Maps.mutable.of("attr", "\"abc\\\"d", "456", "789"), results.getOne()); assertEquals(Sets.mutable.of("123", "\\", "ef\""), results.getTwo()); } else { assertEquals(Maps.mutable.of("attr", "abc\"d ef", "456", "789"), results.getOne()); assertEquals(Sets.mutable.of("123", "\\"), results.getTwo()); } } }
@Test public void testSimpleLineParsing() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( "attr=1234 attr2=\"5678\" mytog1" ); assertEquals(Maps.mutable.of("attr", "1234", "attr2", "5678"), results.getOne()); assertEquals(Sets.mutable.of("mytog1"), results.getTwo()); }
@Test public void testQuoteWithinQuotedStringIsPreservedIfNoSpace() { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles( " abc=attr 1234 attr2=\"56\"78\" mytog1 " ); assertEquals(Maps.mutable.of("abc", "attr", "attr2", "56\"78"), results.getOne()); assertEquals(Sets.mutable.of("1234", "mytog1"), results.getTwo()); }
@Test public void testQuotedSplitWithEqualSignAndSpace() { String input = "attr=1234 attr2=\"56 = 78\" mytog1"; if (legacyMode) { try { textMarkupDocumentReader.parseAttrsAndToggles(input); fail("Should have failed here"); } catch (ArrayIndexOutOfBoundsException e) { assertThat(e.getMessage(), notNullValue()); } } else { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles(input); assertEquals(Maps.mutable.of("attr", "1234", "attr2", "56 = 78"), results.getOne()); assertEquals(Sets.mutable.of("mytog1"), results.getTwo()); } }
@Test public void testWordEndingInEqualSignWillFailInLegacy() { String input = " attr= abc"; if (legacyMode) { try { textMarkupDocumentReader.parseAttrsAndToggles(input); fail("Should have failed here"); } catch (ArrayIndexOutOfBoundsException expected) { } } else { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles(input); assertEquals(Maps.mutable.of("attr", ""), results.getOne()); assertEquals(Sets.mutable.of("abc"), results.getTwo()); } }
@Test public void testEqualSignInQuoteValueWillFailInLegacy() { String input = " attr=\"abc=123\" "; if (legacyMode) { try { textMarkupDocumentReader.parseAttrsAndToggles(input); fail("Should throw exception here"); } catch (IllegalArgumentException expected) { } } else { Pair<ImmutableMap<String, String>, ImmutableSet<String>> results = textMarkupDocumentReader.parseAttrsAndToggles(input); assertEquals(Maps.mutable.of("attr", "abc=123"), results.getOne()); assertEquals(Sets.mutable.empty(), results.getTwo()); } }
@Test public void testPackageMetadataWithMetadataAndProperties() { PackageMetadataReader packageMetadataReader = new PackageMetadataReader(new TextMarkupDocumentReader(false)); PackageMetadata packageMetadata = packageMetadataReader.getPackageMetadata("\n\n \n \n" + "//// METADATA k1=v1 k2=v2 toggle1 toggle2\n" + "sourceEncodings.UTF-8=a1,a2,a3\n" + "sourceEncodings.UTF-16=a4\n" + "otherProps=abc\n" + "\n"); assertEquals(Maps.immutable.of("k1", "v1", "k2", "v2"), packageMetadata.getMetadataSection().getAttrs()); assertEquals(Sets.immutable.of("toggle1", "toggle2"), packageMetadata.getMetadataSection().getToggles()); assertEquals(Maps.mutable.of( "a1", "UTF-8", "a2", "UTF-8", "a3", "UTF-8", "a4", "UTF-16" ) , packageMetadata.getFileToEncodingMap()); } }