/*
* Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.yangtools.yang.stmt;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.junit.Test;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
public class Bug5396Test {
@Test
public void test() throws Exception {
SchemaContext context = StmtTestUtils.parseYangSources("/bugs/bug5396");
assertNotNull(context);
QName root = QName.create("foo", "1970-01-01", "root");
QName myLeaf2 = QName.create("foo", "1970-01-01", "my-leaf2");
SchemaPath schemaPath = SchemaPath.create(true, root, myLeaf2);
SchemaNode findDataSchemaNode = SchemaContextUtil.findDataSchemaNode(context, schemaPath);
assertTrue(findDataSchemaNode instanceof LeafSchemaNode);
LeafSchemaNode leaf2 = (LeafSchemaNode) findDataSchemaNode;
TypeDefinition<?> type = leaf2.getType();
assertTrue(type instanceof UnionTypeDefinition);
UnionTypeDefinition union = (UnionTypeDefinition) type;
List<TypeDefinition<?>> types = union.getTypes();
assertEquals(4, types.size());
TypeDefinition<?> type0 = types.get(0);
TypeDefinition<?> type1 = types.get(1);
TypeDefinition<?> type2 = types.get(2);
TypeDefinition<?> type3 = types.get(3);
assertFalse(type0.equals(type1));
assertFalse(type0.equals(type2));
assertFalse(type0.equals(type3));
assertTrue(type0 instanceof StringTypeDefinition);
assertTrue(type1 instanceof StringTypeDefinition);
assertTrue(type2 instanceof StringTypeDefinition);
assertTrue(type3 instanceof StringTypeDefinition);
StringTypeDefinition stringType0 = (StringTypeDefinition) type0;
StringTypeDefinition stringType1 = (StringTypeDefinition) type1;
StringTypeDefinition stringType2 = (StringTypeDefinition) type2;
StringTypeDefinition stringType3 = (StringTypeDefinition) type3;
List<PatternConstraint> patternConstraints0 = stringType0.getPatternConstraints();
List<PatternConstraint> patternConstraints1 = stringType1.getPatternConstraints();
List<PatternConstraint> patternConstraints2 = stringType2.getPatternConstraints();
List<PatternConstraint> patternConstraints3 = stringType3.getPatternConstraints();
assertEquals(1, patternConstraints0.size());
assertEquals(1, patternConstraints1.size());
assertEquals(1, patternConstraints2.size());
assertEquals(1, patternConstraints3.size());
PatternConstraint patternConstraint0 = patternConstraints0.get(0);
PatternConstraint patternConstraint1 = patternConstraints1.get(0);
PatternConstraint patternConstraint2 = patternConstraints2.get(0);
PatternConstraint patternConstraint3 = patternConstraints3.get(0);
assertEquals("^dp[0-9]+o[0-9]+(d[0-9]+)?$", patternConstraint0.getRegularExpression());
assertEquals("^dp[0-9]+s[0-9]+(f[0-9]+)?(d[0-9]+)?$", patternConstraint1.getRegularExpression());
assertEquals("^dp[0-9]+(P[0-9]+)?p[0-9]{1,3}s[0-9]{1,3}(f[0-9]+)?(d[0-9]+)?$",
patternConstraint2.getRegularExpression());
assertEquals("^dp[0-9]+p[0-9]+p[0-9]+$", patternConstraint3.getRegularExpression());
}
}