import com.google.common.base.Optional;
import java.io.File;
+import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.opendaylight.yangtools.binding.generator.util.generated.type.builder.GeneratedTypeBuilderImpl;
+import org.opendaylight.yangtools.sal.binding.model.api.Type;
import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
import org.opendaylight.yangtools.yang.model.util.BinaryType;
import org.opendaylight.yangtools.yang.parser.builder.impl.LeafSchemaNodeBuilder;
import org.opendaylight.yangtools.yang.parser.builder.impl.ModuleBuilder;
import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
+import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
public class TypeProviderImplTest {
@Rule
public ExpectedException expException = ExpectedException.none();
+ @Test (expected = YangValidationException.class)
+ public void testLeafRefRelativeSelfReference() throws Exception {
+ File relative = new File(getClass().getResource("/leafref/leafref-relative-invalid.yang").toURI());
+
+ final YangParserImpl yangParser = new YangParserImpl();
+ final SchemaContext schemaContext = yangParser.parseFiles(Arrays.asList(relative));
+ final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrr")).iterator().next();
+ final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
+
+ DataSchemaNode leafref = ((ListSchemaNode) moduleRelative.getDataChildByName("neighbor")).getDataChildByName("neighbor-id");
+ LeafSchemaNode leaf = (LeafSchemaNode) leafref;
+ TypeDefinition<?> leafType = leaf.getType();
+ Type leafrefResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafType, leaf);
+ }
+
+ @Test (expected = YangValidationException.class)
+ public void testLeafRefAbsoluteSelfReference() throws Exception {
+ File relative = new File(getClass().getResource("/leafref/leafref-absolute-invalid.yang").toURI());
+
+ final YangParserImpl yangParser = new YangParserImpl();
+ final SchemaContext schemaContext = yangParser.parseFiles(Arrays.asList(relative));
+ final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lra")).iterator().next();
+ final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
+
+ DataSchemaNode leafref = ((ListSchemaNode) moduleRelative.getDataChildByName("neighbor")).getDataChildByName("neighbor-id");
+ LeafSchemaNode leaf = (LeafSchemaNode) leafref;
+ TypeDefinition<?> leafType = leaf.getType();
+ Type leafrefResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafType, leaf);
+ }
+
+ @Test
+ public void testLeafRefRelativeAndAbsoluteValidReference() throws URISyntaxException {
+ File valid = new File(getClass().getResource("/leafref/leafref-valid.yang").toURI());
+
+ final YangParserImpl yangParser = new YangParserImpl();
+ final SchemaContext schemaContext = yangParser.parseFiles(Arrays.asList(valid));
+ final Module moduleValid = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrv")).iterator().next();
+ final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
+
+ DataSchemaNode leafrefRel = ((ListSchemaNode) moduleValid.getDataChildByName("neighbor")).getDataChildByName
+ ("neighbor-id");
+ LeafSchemaNode leafRel = (LeafSchemaNode) leafrefRel;
+ TypeDefinition<?> leafTypeRel = leafRel.getType();
+ Type leafrefRelResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafTypeRel, leafRel);
+ assertNotNull(leafrefRelResolvedType);
+
+ DataSchemaNode leafrefAbs = ((ListSchemaNode) moduleValid.getDataChildByName("neighbor")).getDataChildByName
+ ("neighbor2-id");
+ LeafSchemaNode leafAbs = (LeafSchemaNode) leafrefAbs;
+ TypeDefinition<?> leafTypeAbs = leafAbs.getType();
+ Type leafrefAbsResolvedType = typeProvider.javaTypeForSchemaDefinitionType(leafTypeAbs, leafAbs);
+ assertNotNull(leafrefAbsResolvedType);
+ }
+
@Test
public void testMethodsOfTypeProviderImpl() throws URISyntaxException {
final YangParserImpl yangParser = new YangParserImpl();