Do do not check unique in unsupported lists
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug6180Test.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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.stmt;
9
10 import static org.junit.jupiter.api.Assertions.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import java.util.Optional;
15 import java.util.regex.Pattern;
16 import org.junit.jupiter.api.Test;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
20 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
21
22 class Bug6180Test extends AbstractYangTest {
23     @Test
24     void stringTest() {
25         final var schemaContext = assertEffectiveModel("/bugs/bug6180/string-test.yang");
26         assertEquals(1, schemaContext.getModules().size());
27         final var module = schemaContext.getModules().iterator().next();
28         assertEquals(Optional.of("    1. this text contains \"string enclosed in double quotes\" and"
29             + " special characters: \\,\n,\t          2. this text contains \"string enclosed in double quotes\""
30             + " and special characters: \\,\n,\n,                     3. this text contains \"string enclosed in"
31             + " double quotes\" and special characters: \\,\n,\t      "), module.getDescription());
32     }
33
34     @Test
35     void doubleQuotesTest() {
36         verifyDoubleQuotesExpression(assertEffectiveModel("/bugs/bug6180/double-quotes.yang"));
37     }
38
39     @Test
40     void doubleQuotesSinbleInsideTest() {
41         verifySingleQuotesExpression(assertEffectiveModel("/bugs/bug6180/double-quotes-single-inside.yang"));
42     }
43
44     @Test
45     void singleQuotesTest() {
46         verifyDoubleQuotesExpression(assertEffectiveModel("/bugs/bug6180/single-quotes.yang"));
47     }
48
49     private static void verifyDoubleQuotesExpression(final EffectiveModelContext schemaContext) {
50         final var bar = assertInstanceOf(ContainerSchemaNode.class,
51             schemaContext.getDataChildByName(QName.create("foo", "2016-07-11", "bar")));
52         assertEquals("/foo != \"bar\"", bar.getWhenCondition().orElseThrow().toString());
53
54         final var typeDefinitions = schemaContext.getTypeDefinitions();
55         assertEquals(1, typeDefinitions.size());
56         final var patternConstraints = assertInstanceOf(StringTypeDefinition.class, typeDefinitions.iterator().next())
57             .getPatternConstraints();
58         assertEquals(1, patternConstraints.size());
59         final var pattern = patternConstraints.iterator().next();
60         assertEquals("^(?:\".*\")$", pattern.getJavaPatternString());
61         assertTrue(Pattern.compile(pattern.getJavaPatternString()).matcher("\"enclosed string in quotes\"").matches());
62     }
63
64     private static void verifySingleQuotesExpression(final EffectiveModelContext schemaContext) {
65         final var bar = assertInstanceOf(ContainerSchemaNode.class,
66             schemaContext.getDataChildByName(QName.create("foo", "2016-07-11", "bar")));
67         assertEquals("/foo != 'bar'", bar.getWhenCondition().orElseThrow().toString());
68
69         final var typeDefinitions = schemaContext.getTypeDefinitions();
70         assertEquals(1, typeDefinitions.size());
71         final var patternConstraints = assertInstanceOf(StringTypeDefinition.class, typeDefinitions.iterator().next())
72             .getPatternConstraints();
73         assertEquals(1, patternConstraints.size());
74         final var pattern = patternConstraints.iterator().next();
75         assertEquals("^(?:'.*')$", pattern.getJavaPatternString());
76         assertTrue(Pattern.compile(pattern.getJavaPatternString()).matcher("'enclosed string in quotes'").matches());
77     }
78 }