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
8 package org.opendaylight.yangtools.yang.model.util;
10 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
12 import org.junit.jupiter.api.Test;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
15 import org.opendaylight.yangtools.yang.model.api.PathExpression;
16 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
17 import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
19 import org.opendaylight.yangtools.yang.model.api.type.Int16TypeDefinition;
20 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
21 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
24 private static final String NS = "foo";
25 private static final String REV = "2016-03-01";
29 final var context = YangParserTestUtils.parseYangResource("/yt588.yang");
30 final var root = QName.create(NS, REV, "root");
31 final var leafRef2 = QName.create(NS, REV, "leaf-ref-2");
32 final var conGrp = QName.create(NS, REV, "con-grp");
33 final var leafRef = QName.create(NS, REV, "leaf-ref");
35 assertResolvedTypeDefinition(BinaryTypeDefinition.class,
36 SchemaInferenceStack.ofDataTreePath(context, root, conGrp, leafRef),
37 assertInstanceOf(LeafrefTypeDefinition.class,
38 assertInstanceOf(LeafSchemaNode.class, context.findDataTreeChild(root, conGrp, leafRef).orElseThrow())
39 .getType()).getPathStatement());
41 assertResolvedTypeDefinition(Int16TypeDefinition.class,
42 SchemaInferenceStack.ofDataTreePath(context, root, leafRef2),
43 assertInstanceOf(LeafrefTypeDefinition.class,
44 assertInstanceOf(LeafSchemaNode.class, context.findDataTreeChild(root, leafRef2).orElseThrow())
45 .getType()).getPathStatement());
48 private static void assertResolvedTypeDefinition(final Class<? extends TypeDefinition<?>> expectedType,
49 final SchemaInferenceStack stack, final PathExpression expression) {
50 final var typed = assertInstanceOf(TypedDataSchemaNode.class, stack.resolvePathExpression(expression));
51 assertInstanceOf(expectedType, typed.getType());