Add an explicit intermediate YANG representation
[yangtools.git] / yang / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / parser / rfc7950 / repo / ArgumentContextUtilsTest.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.rfc7950.repo;
9
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;
13
14 import java.io.File;
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;
20
21 public class ArgumentContextUtilsTest {
22     @Test
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));
28         //      a\\b -----> a\b
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));
40         //      a\"b -----> a"b
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));
48         //      a\\\"b -----> a\"b
49         assertEquals("\\\"abc", unescape("\\\\\\\"abc", 0));
50         assertEquals("abc\\\"", unescape("abc\\\\\\\"", 3));
51         assertEquals("abc\\\"def", unescape("abc\\\\\\\"def", 3));
52         //      a\tb -----> a   b
53         assertEquals("\tabc", unescape("\\tabc", 0));
54         assertEquals("abc\t", unescape("abc\\t", 3));
55         assertEquals("abc\tdef", unescape("abc\\tdef", 3));
56         //      a\\tb -----> a\tb
57         assertEquals("\\tabc", unescape("\\\\tabc", 0));
58         assertEquals("abc\\t", unescape("abc\\\\t", 3));
59         assertEquals("abc\\tdef", unescape("abc\\\\tdef", 3));
60         //      a\\\tb -----> a\    b
61         assertEquals("\\\tabc", unescape("\\\\\\tabc", 0));
62         assertEquals("abc\\\t", unescape("abc\\\\\\t", 3));
63         assertEquals("abc\\\tdef", unescape("abc\\\\\\tdef", 3));
64         //      a\nb -----> a
65         //                  b
66         assertEquals("\nabc", unescape("\\nabc", 0));
67         assertEquals("abc\n", unescape("abc\\n", 3));
68         assertEquals("abc\ndef", unescape("abc\\ndef", 3));
69         //      a\\nb -----> a\nb
70         assertEquals("\\nabc", unescape("\\\\nabc", 0));
71         assertEquals("abc\\n", unescape("abc\\\\n", 3));
72         assertEquals("abc\\ndef", unescape("abc\\\\ndef", 3));
73         //      a\\\nb -----> a\
74         //                    b
75         assertEquals("\\\nabc", unescape("\\\\\\nabc", 0));
76         assertEquals("abc\\\n", unescape("abc\\\\\\n", 3));
77         assertEquals("abc\\\ndef", unescape("abc\\\\\\ndef", 3));
78
79         assertEquals("\\\nabc abc\\n\nabc abc\t", unescape("\\\\\\nabc abc\\\\n\\nabc abc\\t", 0));
80     }
81
82     @Test
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());
91     }
92
93     private static String unescape(final String str, final int backslash) {
94         StringBuilder sb = new StringBuilder(str.length());
95         unescapeBackslash(sb, str, backslash);
96         return sb.toString();
97     }
98 }