Encapsulate regexes in a non-capturing group
[yangtools.git] / yang / yang-parser-impl / 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
9 package org.opendaylight.yangtools.yang.stmt;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14
15 import java.io.File;
16 import java.util.List;
17 import java.util.Set;
18 import java.util.regex.Pattern;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.Module;
24 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
25 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
26 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
27 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
28 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
29
30 public class Bug6180Test {
31
32     @Test
33     public void stringTest() throws Exception {
34         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(new File(getClass().getResource(
35                 "/bugs/bug6180/string-test.yang").toURI()));
36         assertNotNull(schemaContext);
37         assertEquals(1, schemaContext.getModules().size());
38         final Module module = schemaContext.getModules().iterator().next();
39         assertEquals("    1. this text contains \"string enclosed in double quotes\" and"+
40                 " special characters: \\,\n,\t          2. this text contains \"string enclosed in double quotes\" and"+
41                 " special characters: \\,\n,\n,                     3. this text contains \"string enclosed in double quotes\" and"+
42                 " special characters: \\,\n,\t      ", module.getDescription());
43     }
44
45     @Test
46     public void doubleQuotesTest() throws Exception {
47         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(new File(getClass().getResource(
48                 "/bugs/bug6180/double-quotes.yang").toURI()));
49         assertNotNull(schemaContext);
50         verifyDoubleQuotesExpression(schemaContext);
51     }
52
53     @Test
54     public void doubleQuotesSinbleInsideTest() throws Exception {
55         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(new File(getClass().getResource(
56                 "/bugs/bug6180/double-quotes-single-inside.yang").toURI()));
57         assertNotNull(schemaContext);
58         verifySingleQuotesExpression(schemaContext);
59     }
60
61     @Test
62     public void singleQuotesTest() throws Exception {
63         final SchemaContext schemaContext = StmtTestUtils.parseYangSources(new File(getClass().getResource(
64                 "/bugs/bug6180/single-quotes.yang").toURI()));
65         assertNotNull(schemaContext);
66         verifyDoubleQuotesExpression(schemaContext);
67     }
68
69     private static void verifyDoubleQuotesExpression(final SchemaContext schemaContext) {
70         final DataSchemaNode dataNodeBar = schemaContext.getDataChildByName(QName.create("foo", "2016-07-11", "bar"));
71         assertTrue(dataNodeBar instanceof ContainerSchemaNode);
72         final ContainerSchemaNode bar = (ContainerSchemaNode) dataNodeBar;
73         final RevisionAwareXPath whenCondition = bar.getConstraints().getWhenCondition();
74         assertEquals("/foo != \"bar\"", whenCondition.toString());
75
76         final Set<TypeDefinition<?>> typeDefinitions = schemaContext.getTypeDefinitions();
77         assertEquals(1, typeDefinitions.size());
78         final TypeDefinition<?> type = typeDefinitions.iterator().next();
79         assertTrue(type instanceof StringTypeDefinition);
80         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
81         assertEquals(1, patternConstraints.size());
82         final PatternConstraint pattern = patternConstraints.iterator().next();
83         assertEquals("^(?:\".*\")$", pattern.getRegularExpression());
84         assertTrue(Pattern.compile(pattern.getRegularExpression()).matcher("\"enclosed string in quotes\"").matches());
85     }
86
87     private static void verifySingleQuotesExpression(final SchemaContext schemaContext) {
88         final DataSchemaNode dataNodeBar = schemaContext.getDataChildByName(QName.create("foo", "2016-07-11", "bar"));
89         assertTrue(dataNodeBar instanceof ContainerSchemaNode);
90         final ContainerSchemaNode bar = (ContainerSchemaNode) dataNodeBar;
91         final RevisionAwareXPath whenCondition = bar.getConstraints().getWhenCondition();
92         assertEquals("/foo != 'bar'", whenCondition.toString());
93
94         final Set<TypeDefinition<?>> typeDefinitions = schemaContext.getTypeDefinitions();
95         assertEquals(1, typeDefinitions.size());
96         final TypeDefinition<?> type = typeDefinitions.iterator().next();
97         assertTrue(type instanceof StringTypeDefinition);
98         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
99         assertEquals(1, patternConstraints.size());
100         final PatternConstraint pattern = patternConstraints.iterator().next();
101         assertEquals("^(?:'.*')$", pattern.getRegularExpression());
102         assertTrue(Pattern.compile(pattern.getRegularExpression()).matcher("'enclosed string in quotes'").matches());
103     }
104 }