Remove unneeded throws
[yangtools.git] / parser / yang-parser-rfc7950 / src / test / java / org / opendaylight / yangtools / yang / stmt / Bug4623Test.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.Assert.assertEquals;
11 import static org.junit.Assert.assertFalse;
12 import static org.junit.Assert.assertNotNull;
13
14 import com.google.common.collect.Range;
15 import java.util.Collection;
16 import java.util.List;
17 import org.junit.BeforeClass;
18 import org.junit.Test;
19 import org.opendaylight.yangtools.yang.common.QName;
20 import org.opendaylight.yangtools.yang.common.XMLNamespace;
21 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
22 import org.opendaylight.yangtools.yang.model.api.Module;
23 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
24 import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement;
25 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
26 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
27 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
28 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
29
30 public class Bug4623Test extends AbstractYangTest {
31     private static Module TYPES;
32
33     @BeforeClass
34     public static void beforeClass() throws Exception {
35         // given
36         TYPES = assertEffectiveModelDir("/bugs/bug4623").findModules("types").iterator().next();
37     }
38
39     @Test
40     public void testStringTypeWithUnknownSchemaNodeAtTheEndOfTypeDefinition() {
41         // when
42         final LeafSchemaNode leaf = (LeafSchemaNode) TYPES.getDataChildByName(
43             QName.create(XMLNamespace.of("urn:custom.types.demo"), "leaf-length-pattern-unknown"));
44
45         // then
46         final TypeDefinition<?> type = leaf.getType();
47         assertNotNull(type);
48
49         // here are no effective extensions
50         assertEquals(0, type.getUnknownSchemaNodes().size());
51         assertExtension(leaf);
52
53         final LengthConstraint lengthConstraint = ((StringTypeDefinition) type).getLengthConstraint().get();
54         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
55
56         assertNotNull(lengthConstraint);
57         assertNotNull(patternConstraints);
58         assertFalse(lengthConstraint.getAllowedRanges().isEmpty());
59         assertFalse(patternConstraints.isEmpty());
60
61         final Range<Integer> span = lengthConstraint.getAllowedRanges().span();
62         assertEquals(Integer.valueOf(2), span.lowerEndpoint());
63         assertEquals(Integer.valueOf(10), span.upperEndpoint());
64
65         final PatternConstraint patternConstraint = patternConstraints.get(0);
66         assertEquals(patternConstraint.getRegularExpressionString(), "[0-9a-fA-F]");
67     }
68
69     @Test
70     public void testStringTypeWithUnknownSchemaNodeBetweenStringRestrictionStatements() {
71         // when
72         final LeafSchemaNode leaf = (LeafSchemaNode) TYPES.getDataChildByName(
73                 QName.create(XMLNamespace.of("urn:custom.types.demo"), "leaf-length-unknown-pattern"));
74
75         // then
76         assertNotNull(leaf);
77
78         final TypeDefinition<?> type = leaf.getType();
79         assertNotNull(type);
80         assertEquals(0, type.getUnknownSchemaNodes().size());
81         assertExtension(leaf);
82
83         final LengthConstraint lengthConstraints = ((StringTypeDefinition) type).getLengthConstraint().get();
84         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
85
86         assertNotNull(lengthConstraints);
87         assertNotNull(patternConstraints);
88         assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
89         assertFalse(patternConstraints.isEmpty());
90
91         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
92         assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
93         assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
94
95         final PatternConstraint patternConstraint = patternConstraints.get(0);
96         assertEquals(patternConstraint.getRegularExpressionString(), "[0-9a-fA-F]");
97     }
98
99     @Test
100     public void testStringTypeWithUnknownSchemaNodeOnTheStartOfTypeDefinition() {
101         // when
102         final LeafSchemaNode leaf = (LeafSchemaNode) TYPES.getDataChildByName(
103                 QName.create(XMLNamespace.of("urn:custom.types.demo"), "leaf-unknown-length-pattern"));
104
105         // then
106         final TypeDefinition<?> type = leaf.getType();
107         assertNotNull(type);
108         assertEquals(0, type.getUnknownSchemaNodes().size());
109         assertExtension(leaf);
110
111         final LengthConstraint lengthConstraints =
112                 ((StringTypeDefinition) type).getLengthConstraint().get();
113         assertEquals(1, lengthConstraints.getAllowedRanges().asRanges().size());
114
115         final Range<Integer> lengthConstraint = lengthConstraints.getAllowedRanges().span();
116         assertEquals(Integer.valueOf(2), lengthConstraint.lowerEndpoint());
117         assertEquals(Integer.valueOf(10), lengthConstraint.upperEndpoint());
118
119         final List<PatternConstraint> patternConstraints = ((StringTypeDefinition) type).getPatternConstraints();
120         assertEquals(1, patternConstraints.size());
121         final PatternConstraint patternConstraint = patternConstraints.get(0);
122         assertEquals(patternConstraint.getRegularExpressionString(), "[0-9a-fA-F]");
123     }
124
125     private static void assertExtension(final LeafSchemaNode leaf) {
126         final Collection<? extends UnrecognizedStatement> unknownSchemaNodes = leaf.asEffectiveStatement().getDeclared()
127             .findFirstDeclaredSubstatement(TypeStatement.class).orElseThrow()
128             .declaredSubstatements(UnrecognizedStatement.class);
129         assertEquals(1, unknownSchemaNodes.size());
130
131         final UnrecognizedStatement unknownSchemaNode = unknownSchemaNodes.iterator().next();
132         assertEquals("unknown", unknownSchemaNode.argument());
133         assertEquals(QName.create("urn:simple.extension.typedefs", "unknown"),
134             unknownSchemaNode.statementDefinition().getStatementName());
135     }
136 }