2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.yangtools.yang.stmt;
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;
16 import java.util.List;
17 import org.junit.Test;
18 import org.opendaylight.yangtools.yang.common.QName;
19 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
21 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
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 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
29 public class Bug5396Test {
31 public void test() throws Exception {
32 SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug5396");
33 assertNotNull(context);
35 QName root = QName.create("foo", "root");
36 QName myLeaf2 = QName.create("foo", "my-leaf2");
38 SchemaPath schemaPath = SchemaPath.create(true, root, myLeaf2);
39 SchemaNode findDataSchemaNode = SchemaContextUtil.findDataSchemaNode(context, schemaPath);
40 assertTrue(findDataSchemaNode instanceof LeafSchemaNode);
42 LeafSchemaNode leaf2 = (LeafSchemaNode) findDataSchemaNode;
43 TypeDefinition<?> type = leaf2.getType();
44 assertTrue(type instanceof UnionTypeDefinition);
46 UnionTypeDefinition union = (UnionTypeDefinition) type;
47 List<TypeDefinition<?>> types = union.getTypes();
49 assertEquals(4, types.size());
51 TypeDefinition<?> type0 = types.get(0);
52 TypeDefinition<?> type1 = types.get(1);
53 TypeDefinition<?> type2 = types.get(2);
54 TypeDefinition<?> type3 = types.get(3);
56 assertFalse(type0.equals(type1));
57 assertFalse(type0.equals(type2));
58 assertFalse(type0.equals(type3));
60 assertTrue(type0 instanceof StringTypeDefinition);
61 assertTrue(type1 instanceof StringTypeDefinition);
62 assertTrue(type2 instanceof StringTypeDefinition);
63 assertTrue(type3 instanceof StringTypeDefinition);
65 StringTypeDefinition stringType0 = (StringTypeDefinition) type0;
66 StringTypeDefinition stringType1 = (StringTypeDefinition) type1;
67 StringTypeDefinition stringType2 = (StringTypeDefinition) type2;
68 StringTypeDefinition stringType3 = (StringTypeDefinition) type3;
70 final List<PatternConstraint> patternConstraints0 = stringType0.getPatternConstraints();
71 final List<PatternConstraint> patternConstraints1 = stringType1.getPatternConstraints();
72 final List<PatternConstraint> patternConstraints2 = stringType2.getPatternConstraints();
73 final List<PatternConstraint> patternConstraints3 = stringType3.getPatternConstraints();
75 assertEquals(1, patternConstraints0.size());
76 assertEquals(1, patternConstraints1.size());
77 assertEquals(1, patternConstraints2.size());
78 assertEquals(1, patternConstraints3.size());
80 final PatternConstraint patternConstraint0 = patternConstraints0.get(0);
81 final PatternConstraint patternConstraint1 = patternConstraints1.get(0);
82 final PatternConstraint patternConstraint2 = patternConstraints2.get(0);
83 final PatternConstraint patternConstraint3 = patternConstraints3.get(0);
85 assertEquals("^(?:dp[0-9]+o[0-9]+(d[0-9]+)?)$", patternConstraint0.getJavaPatternString());
86 assertEquals("^(?:dp[0-9]+s[0-9]+(f[0-9]+)?(d[0-9]+)?)$", patternConstraint1.getJavaPatternString());
87 assertEquals("^(?:dp[0-9]+(P[0-9]+)?p[0-9]{1,3}s[0-9]{1,3}(f[0-9]+)?(d[0-9]+)?)$",
88 patternConstraint2.getJavaPatternString());
89 assertEquals("^(?:dp[0-9]+p[0-9]+p[0-9]+)$", patternConstraint3.getJavaPatternString());