Bug 5829 - New yang parser allows two choice cases with identical child elements
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug5396.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.assertFalse;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertTrue;
15
16 import java.io.FileNotFoundException;
17 import java.net.URISyntaxException;
18 import java.util.List;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.common.QName;
21 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
25 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
26 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
27 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
29 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
30 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
31 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
32
33 public class Bug5396 {
34     @Test
35     public void test() throws SourceException, FileNotFoundException, ReactorException, URISyntaxException {
36         SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug5396");
37         assertNotNull(context);
38
39         QName root = QName.create("foo", "1970-01-01", "root");
40         QName myLeaf2 = QName.create("foo", "1970-01-01", "my-leaf2");
41
42         SchemaPath schemaPath = SchemaPath.create(true, root, myLeaf2);
43         SchemaNode findDataSchemaNode = SchemaContextUtil.findDataSchemaNode(context, schemaPath);
44         assertTrue(findDataSchemaNode instanceof LeafSchemaNode);
45
46         LeafSchemaNode leaf2 = (LeafSchemaNode) findDataSchemaNode;
47         TypeDefinition<?> type = leaf2.getType();
48         assertTrue(type instanceof UnionTypeDefinition);
49
50         UnionTypeDefinition union = (UnionTypeDefinition) type;
51         List<TypeDefinition<?>> types = union.getTypes();
52
53         assertEquals(4, types.size());
54
55         TypeDefinition<?> type0 = types.get(0);
56         TypeDefinition<?> type1 = types.get(1);
57         TypeDefinition<?> type2 = types.get(2);
58         TypeDefinition<?> type3 = types.get(3);
59
60         assertFalse(type0.equals(type1));
61         assertFalse(type0.equals(type2));
62         assertFalse(type0.equals(type3));
63
64         assertTrue(type0 instanceof StringTypeDefinition);
65         assertTrue(type1 instanceof StringTypeDefinition);
66         assertTrue(type2 instanceof StringTypeDefinition);
67         assertTrue(type3 instanceof StringTypeDefinition);
68
69         StringTypeDefinition stringType0 = (StringTypeDefinition) type0;
70         StringTypeDefinition stringType1 = (StringTypeDefinition) type1;
71         StringTypeDefinition stringType2 = (StringTypeDefinition) type2;
72         StringTypeDefinition stringType3 = (StringTypeDefinition) type3;
73
74         List<PatternConstraint> patternConstraints0 = stringType0.getPatternConstraints();
75         List<PatternConstraint> patternConstraints1 = stringType1.getPatternConstraints();
76         List<PatternConstraint> patternConstraints2 = stringType2.getPatternConstraints();
77         List<PatternConstraint> patternConstraints3 = stringType3.getPatternConstraints();
78
79         assertEquals(1, patternConstraints0.size());
80         assertEquals(1, patternConstraints1.size());
81         assertEquals(1, patternConstraints2.size());
82         assertEquals(1, patternConstraints3.size());
83
84         PatternConstraint patternConstraint0 = patternConstraints0.get(0);
85         PatternConstraint patternConstraint1 = patternConstraints1.get(0);
86         PatternConstraint patternConstraint2 = patternConstraints2.get(0);
87         PatternConstraint patternConstraint3 = patternConstraints3.get(0);
88
89         assertEquals("^dp[0-9]+o[0-9]+(d[0-9]+)?$", patternConstraint0.getRegularExpression());
90         assertEquals("^dp[0-9]+s[0-9]+(f[0-9]+)?(d[0-9]+)?$", patternConstraint1.getRegularExpression());
91         assertEquals("^dp[0-9]+(P[0-9]+)?p[0-9]{1,3}s[0-9]{1,3}(f[0-9]+)?(d[0-9]+)?$",
92                 patternConstraint2.getRegularExpression());
93         assertEquals("^dp[0-9]+p[0-9]+p[0-9]+$", patternConstraint3.getRegularExpression());
94     }
95 }