2 * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.yangtools.yang.parser.rfc7950.repo;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNotNull;
12 import static org.opendaylight.yangtools.yang.parser.rfc7950.repo.ArgumentContextUtils.unescapeBackslash;
15 import java.util.Optional;
16 import org.junit.Test;
17 import org.opendaylight.yangtools.yang.model.api.Module;
18 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
19 import org.opendaylight.yangtools.yang.stmt.StmtTestUtils;
21 public class ArgumentContextUtilsTest {
23 public void testUnescapeNew() {
24 // a\b -----> a\b (invalid for 7950)
25 assertEquals("\\abc", unescape("\\abc", 0));
26 assertEquals("abc\\", unescape("abc\\", 3));
27 assertEquals("abc\\def", unescape("abc\\def", 3));
29 assertEquals("\\abc", unescape("\\\\abc", 0));
30 assertEquals("abc\\", unescape("abc\\\\", 3));
31 assertEquals("abc\\def", unescape("abc\\\\def", 3));
32 // a\\\b -----> a\\b (invalid for 7950)
33 assertEquals("\\\\abc", unescape("\\\\\\abc", 0));
34 assertEquals("abc\\\\", unescape("abc\\\\\\", 3));
35 assertEquals("abc\\\\def", unescape("abc\\\\\\def", 3));
36 // a"b -----> a"b (not passible)
37 assertEquals("\"abc", unescape("\"abc", 0));
38 assertEquals("abc\"", unescape("abc\"", 3));
39 assertEquals("abc\"def", unescape("abc\"def", 3));
41 assertEquals("\"abc", unescape("\\\"abc", 0));
42 assertEquals("abc\"", unescape("abc\\\"", 3));
43 assertEquals("abc\"def", unescape("abc\\\"def", 3));
44 // a\\"b -----> a\"b (not passible)
45 assertEquals("\\\"abc", unescape("\\\\\"abc", 0));
46 assertEquals("abc\\\"", unescape("abc\\\\\"", 3));
47 assertEquals("abc\\\"def", unescape("abc\\\\\"def", 3));
49 assertEquals("\\\"abc", unescape("\\\\\\\"abc", 0));
50 assertEquals("abc\\\"", unescape("abc\\\\\\\"", 3));
51 assertEquals("abc\\\"def", unescape("abc\\\\\\\"def", 3));
53 assertEquals("\tabc", unescape("\\tabc", 0));
54 assertEquals("abc\t", unescape("abc\\t", 3));
55 assertEquals("abc\tdef", unescape("abc\\tdef", 3));
57 assertEquals("\\tabc", unescape("\\\\tabc", 0));
58 assertEquals("abc\\t", unescape("abc\\\\t", 3));
59 assertEquals("abc\\tdef", unescape("abc\\\\tdef", 3));
61 assertEquals("\\\tabc", unescape("\\\\\\tabc", 0));
62 assertEquals("abc\\\t", unescape("abc\\\\\\t", 3));
63 assertEquals("abc\\\tdef", unescape("abc\\\\\\tdef", 3));
66 assertEquals("\nabc", unescape("\\nabc", 0));
67 assertEquals("abc\n", unescape("abc\\n", 3));
68 assertEquals("abc\ndef", unescape("abc\\ndef", 3));
70 assertEquals("\\nabc", unescape("\\\\nabc", 0));
71 assertEquals("abc\\n", unescape("abc\\\\n", 3));
72 assertEquals("abc\\ndef", unescape("abc\\\\ndef", 3));
75 assertEquals("\\\nabc", unescape("\\\\\\nabc", 0));
76 assertEquals("abc\\\n", unescape("abc\\\\\\n", 3));
77 assertEquals("abc\\\ndef", unescape("abc\\\\\\ndef", 3));
79 assertEquals("\\\nabc abc\\n\nabc abc\t", unescape("\\\\\\nabc abc\\\\n\\nabc abc\\t", 0));
83 public void stringTestUnescape() throws Exception {
84 final SchemaContext schemaContext = StmtTestUtils.parseYangSources(new File(getClass()
85 .getResource("/unescape/string-test.yang").toURI()));
86 assertNotNull(schemaContext);
87 assertEquals(1, schemaContext.getModules().size());
88 final Module module = schemaContext.getModules().iterator().next();
89 assertEquals(Optional.of(" Unescaping examples: \\,\n,\t \"string enclosed in double quotes\" end\n"
90 + "abc \\\\\\ \\t \\\nnn"), module.getDescription());
93 private static String unescape(final String str, final int backslash) {
94 StringBuilder sb = new StringBuilder(str.length());
95 unescapeBackslash(sb, str, backslash);