87597f9c59d0529ff52897c77f0fef416d3f886f
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug5396Test.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.hamcrest.CoreMatchers.instanceOf;
12 import static org.hamcrest.MatcherAssert.assertThat;
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertNotEquals;
15 import static org.junit.Assert.assertNotNull;
16
17 import java.util.List;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
22 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
24 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
25 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
26 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
27
28 public class Bug5396Test {
29     @Test
30     public void test() throws Exception {
31         SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug5396");
32         assertNotNull(context);
33
34         QName root = QName.create("foo", "root");
35         QName myLeaf2 = QName.create("foo", "my-leaf2");
36
37         SchemaNode findDataSchemaNode = context.findDataTreeChild(root, myLeaf2).get();
38         assertThat(findDataSchemaNode, instanceOf(LeafSchemaNode.class));
39
40         LeafSchemaNode leaf2 = (LeafSchemaNode) findDataSchemaNode;
41         TypeDefinition<?> type = leaf2.getType();
42         assertThat(type, instanceOf(UnionTypeDefinition.class));
43
44         UnionTypeDefinition union = (UnionTypeDefinition) type;
45         List<TypeDefinition<?>> types = union.getTypes();
46
47         assertEquals(4, types.size());
48
49         TypeDefinition<?> type0 = types.get(0);
50         TypeDefinition<?> type1 = types.get(1);
51         TypeDefinition<?> type2 = types.get(2);
52         TypeDefinition<?> type3 = types.get(3);
53
54         assertNotEquals(type0, type1);
55         assertNotEquals(type0, type2);
56         assertNotEquals(type0, type3);
57
58         assertThat(type0, instanceOf(StringTypeDefinition.class));
59         assertThat(type1, instanceOf(StringTypeDefinition.class));
60         assertThat(type2, instanceOf(StringTypeDefinition.class));
61         assertThat(type3, instanceOf(StringTypeDefinition.class));
62
63         StringTypeDefinition stringType0 = (StringTypeDefinition) type0;
64         StringTypeDefinition stringType1 = (StringTypeDefinition) type1;
65         StringTypeDefinition stringType2 = (StringTypeDefinition) type2;
66         StringTypeDefinition stringType3 = (StringTypeDefinition) type3;
67
68         final List<PatternConstraint> patternConstraints0 = stringType0.getPatternConstraints();
69         final List<PatternConstraint> patternConstraints1 = stringType1.getPatternConstraints();
70         final List<PatternConstraint> patternConstraints2 = stringType2.getPatternConstraints();
71         final List<PatternConstraint> patternConstraints3 = stringType3.getPatternConstraints();
72
73         assertEquals(1, patternConstraints0.size());
74         assertEquals(1, patternConstraints1.size());
75         assertEquals(1, patternConstraints2.size());
76         assertEquals(1, patternConstraints3.size());
77
78         final PatternConstraint patternConstraint0 = patternConstraints0.get(0);
79         final PatternConstraint patternConstraint1 = patternConstraints1.get(0);
80         final PatternConstraint patternConstraint2 = patternConstraints2.get(0);
81         final PatternConstraint patternConstraint3 = patternConstraints3.get(0);
82
83         assertEquals("^(?:dp[0-9]+o[0-9]+(d[0-9]+)?)$", patternConstraint0.getJavaPatternString());
84         assertEquals("^(?:dp[0-9]+s[0-9]+(f[0-9]+)?(d[0-9]+)?)$", patternConstraint1.getJavaPatternString());
85         assertEquals("^(?:dp[0-9]+(P[0-9]+)?p[0-9]{1,3}s[0-9]{1,3}(f[0-9]+)?(d[0-9]+)?)$",
86                 patternConstraint2.getJavaPatternString());
87         assertEquals("^(?:dp[0-9]+p[0-9]+p[0-9]+)$", patternConstraint3.getJavaPatternString());
88     }
89 }