Introduce IRSchemaSource
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / parser / repo / SharedSchemaContextFactoryTest.java
index d4fdc97fd31d8cd63edc7c24d9a21951292aa21e..631a76e3ad2f48a83eed5a28b1ef8f50adee7787 100644 (file)
@@ -1,33 +1,38 @@
+/*
+ * 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.parser.repo;
 
 import static org.junit.Assert.assertNotNull;
+import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture;
 
-import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
-
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import java.util.concurrent.ExecutionException;
 import org.junit.Before;
 import org.junit.Test;
-import org.mockito.Mock;
+import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException;
-import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceFilter;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaContextFactoryConfiguration;
 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
 import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource;
-import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider;
-import org.opendaylight.yangtools.yang.parser.util.ASTSchemaSource;
-import org.opendaylight.yangtools.yang.parser.util.TextToASTTransformer;
+import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRSchemaSource;
+import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer;
 
+@RunWith(MockitoJUnitRunner.StrictStubs.class)
 public class SharedSchemaContextFactoryTest {
 
     private final SharedSchemaRepository repository = new SharedSchemaRepository("test");
 
-    @Mock
-    private SchemaSourceFilter filter;
+    private final SchemaContextFactoryConfiguration config = SchemaContextFactoryConfiguration.getDefault();
     private SourceIdentifier s1;
     private SourceIdentifier s2;
 
@@ -35,54 +40,52 @@ public class SharedSchemaContextFactoryTest {
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
 
-        final ResourceYangSource source1 = new ResourceYangSource("/ietf/ietf-inet-types@2010-09-24.yang");
-        final ResourceYangSource source2 = new ResourceYangSource("/ietf/iana-timezones@2012-07-09.yang");
-        s1 = RevisionSourceIdentifier.create("ietf-inet-types", "2010-09-24");
-        s2 = RevisionSourceIdentifier.create("iana-timezones", "2012-07-09");
+        final YangTextSchemaSource source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang");
+        final YangTextSchemaSource source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang");
+        s1 = RevisionSourceIdentifier.create("ietf-inet-types", Revision.of("2010-09-24"));
+        s2 = RevisionSourceIdentifier.create("iana-timezones", Revision.of("2012-07-09"));
 
-        final TextToASTTransformer transformer = TextToASTTransformer.create(repository, repository);
+        final TextToIRTransformer transformer = TextToIRTransformer.create(repository, repository);
         repository.registerSchemaSourceListener(transformer);
 
-        repository.registerSchemaSource(new SchemaSourceProvider<YangTextSchemaSource>() {
-            @Override
-            public CheckedFuture<YangTextSchemaSource, SchemaSourceException> getSource(final SourceIdentifier sourceIdentifier) {
-                return Futures.immediateCheckedFuture(source1);
-            }
-        }, PotentialSchemaSource.create(s1, YangTextSchemaSource.class, 1));
+        repository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(source1),
+            PotentialSchemaSource.create(s1, YangTextSchemaSource.class, 1));
 
-        repository.registerSchemaSource(new SchemaSourceProvider<YangTextSchemaSource>() {
-            @Override
-            public CheckedFuture<YangTextSchemaSource, SchemaSourceException> getSource(final SourceIdentifier sourceIdentifier) {
-                return Futures.immediateCheckedFuture(source2);
-            }
-        }, PotentialSchemaSource.create(s2, YangTextSchemaSource.class, 1));
+        repository.registerSchemaSource(sourceIdentifier -> immediateFluentFuture(source2),
+            PotentialSchemaSource.create(s2, YangTextSchemaSource.class, 1));
     }
 
     @Test
-    public void testCreateSchemaContextWithDuplicateRequiredSources() throws Exception {
-        final SharedSchemaContextFactory sharedSchemaContextFactory = new SharedSchemaContextFactory(repository, filter);
-        final CheckedFuture<SchemaContext, SchemaResolutionException> schemaContext = sharedSchemaContextFactory.createSchemaContext(Lists.newArrayList(s1, s1, s2));
-        assertNotNull(schemaContext.checkedGet());
+    public void testCreateSchemaContextWithDuplicateRequiredSources() throws InterruptedException, ExecutionException {
+        final SharedSchemaContextFactory sharedSchemaContextFactory = new SharedSchemaContextFactory(repository,
+            config);
+        final ListenableFuture<EffectiveModelContext> schemaContext =
+                sharedSchemaContextFactory.createEffectiveModelContext(s1, s1, s2);
+        assertNotNull(schemaContext.get());
     }
 
     @Test
     public void testSourceRegisteredWithDifferentSI() throws Exception {
-        final ResourceYangSource source1 = new ResourceYangSource("/ietf/ietf-inet-types@2010-09-24.yang");
-        final ResourceYangSource source2 = new ResourceYangSource("/ietf/iana-timezones@2012-07-09.yang");
+        final YangTextSchemaSource source1 = YangTextSchemaSource.forResource("/ietf/ietf-inet-types@2010-09-24.yang");
+        final YangTextSchemaSource source2 = YangTextSchemaSource.forResource("/ietf/iana-timezones@2012-07-09.yang");
         s1 = source1.getIdentifier();
         s2 = source2.getIdentifier();
 
-        final SettableSchemaProvider<ASTSchemaSource> provider = SharedSchemaRepositoryTest.getImmediateYangSourceProviderFromResource("/no-revision/imported@2012-12-12.yang");
+        final SettableSchemaProvider<IRSchemaSource> provider =
+                SharedSchemaRepositoryTest.getImmediateYangSourceProviderFromResource(
+                    "/no-revision/imported@2012-12-12.yang");
         provider.setResult();
         provider.register(repository);
 
         // Register the same provider under source id without revision
         final SourceIdentifier sIdWithoutRevision = RevisionSourceIdentifier.create(provider.getId().getName());
         repository.registerSchemaSource(provider, PotentialSchemaSource.create(
-                sIdWithoutRevision, ASTSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue()));
+                sIdWithoutRevision, IRSchemaSource.class, PotentialSchemaSource.Costs.IMMEDIATE.getValue()));
 
-        final SharedSchemaContextFactory sharedSchemaContextFactory = new SharedSchemaContextFactory(repository, filter);
-        final CheckedFuture<SchemaContext, SchemaResolutionException> schemaContext = sharedSchemaContextFactory.createSchemaContext(Lists.newArrayList(sIdWithoutRevision, provider.getId()));
-        assertNotNull(schemaContext.checkedGet());
+        final SharedSchemaContextFactory sharedSchemaContextFactory = new SharedSchemaContextFactory(repository,
+            config);
+        final ListenableFuture<EffectiveModelContext> schemaContext =
+                sharedSchemaContextFactory.createEffectiveModelContext(sIdWithoutRevision, provider.getId());
+        assertNotNull(schemaContext.get());
     }
 }