2 * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.assertEquals;
11 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
13 import org.junit.jupiter.api.Test;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
16 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
17 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
18 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
22 void testChoiceCaseRelativeLeafref() {
23 final var context = YangParserTestUtils.parseYangResource("/yt1100.yang");
24 final var module = context.findModule("yt1100").orElseThrow();
25 final var qnm = module.getQNameModule();
26 final var foo = QName.create(qnm, "foo");
27 final var schedulerNode = QName.create(qnm, "scheduler-node");
28 final var childSchedulerNodes = QName.create(qnm, "child-scheduler-nodes");
29 final var name = QName.create(qnm, "name");
30 final var leaf = assertInstanceOf(LeafSchemaNode.class,
31 module.findDataTreeChild(foo, schedulerNode, childSchedulerNodes, name).orElseThrow());
32 final var leafref = assertInstanceOf(LeafrefTypeDefinition.class, leaf.getType()).getPathStatement();
34 final var resolvedLeafRef = assertInstanceOf(LeafSchemaNode.class,
35 SchemaInferenceStack.ofDataTreePath(context, foo, schedulerNode, childSchedulerNodes, name)
36 .resolvePathExpression(leafref));
37 assertEquals(QName.create(qnm, "name"), resolvedLeafRef.getQName());
38 assertInstanceOf(StringTypeDefinition.class, resolvedLeafRef.getType());