Bug 2366 - Effective statement implementation
[yangtools.git] / yang / yang-parser-impl / src / test / java / org / opendaylight / yangtools / yang / stmt / effective / build / test / EffectiveModuleTest.java
1 package org.opendaylight.yangtools.yang.stmt.effective.build.test;
2
3
4 import org.junit.BeforeClass;
5 import org.junit.Test;
6 import org.opendaylight.yangtools.yang.common.QName;
7 import org.opendaylight.yangtools.yang.common.QNameModule;
8 import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
9 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
10 import org.opendaylight.yangtools.yang.model.api.Deviation;
11 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
12 import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
13 import org.opendaylight.yangtools.yang.model.api.Module;
14 import org.opendaylight.yangtools.yang.model.api.ModuleImport;
15 import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
16 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
19 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
20 import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
21 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline;
22 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangStatementSourceImpl;
23 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext;
24
25 import java.net.URI;
26 import java.text.ParseException;
27 import java.util.Date;
28 import java.util.List;
29 import java.util.Set;
30
31 import static org.junit.Assert.assertEquals;
32 import static org.junit.Assert.assertNotNull;
33
34 public class EffectiveModuleTest {
35
36     private static final YangStatementSourceImpl ROOT_MODULE = new YangStatementSourceImpl(
37             "/semantic-statement-parser/effective-module/root.yang");
38     private static final YangStatementSourceImpl IMPORTED_MODULE = new YangStatementSourceImpl(
39             "/semantic-statement-parser/effective-module/imported.yang");
40     private static final YangStatementSourceImpl SUBMODULE = new YangStatementSourceImpl(
41             "/semantic-statement-parser/effective-module/submod.yang");
42
43     private static final QNameModule ROOT_MODULE_QNAME = QNameModule.create(URI.create("root-ns"), null);
44
45     private static final QName cont = QName.create(ROOT_MODULE_QNAME, "cont");
46
47     private static final SchemaPath contSchemaPath = SchemaPath.create(true, cont);
48
49     private static Date revision;
50
51     @BeforeClass
52     public static void init() {
53         try {
54             revision = SimpleDateFormatUtil.getRevisionFormat()
55                     .parse("2000-01-01");
56         } catch (ParseException e) {
57             throw new IllegalArgumentException(e);
58         }
59     }
60
61     @Test
62     public void effectiveBuildTest() throws SourceException, ReactorException {
63         CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild();
64         addSources(reactor, ROOT_MODULE, IMPORTED_MODULE, SUBMODULE);
65         EffectiveSchemaContext result = reactor.buildEffective();
66
67         assertNotNull(result);
68
69         Module rootModule = result.findModuleByName("root", null);
70         assertNotNull(rootModule);
71
72         assertEquals("root-pref", rootModule.getPrefix());
73         assertEquals("1", rootModule.getYangVersion());
74         assertEquals("kisko", rootModule.getOrganization());
75         assertEquals("kisko email", rootModule.getContact());
76
77         final Set<AugmentationSchema> augmentations = rootModule.getAugmentations();
78         assertEquals(1, augmentations.size());
79         assertEquals(contSchemaPath, augmentations.iterator().next().getTargetPath());
80
81         final Set<ModuleImport> imports = rootModule.getImports();
82         assertEquals(1, imports.size());
83         final ModuleImport importStmt = imports.iterator().next();
84         assertNotNull(importStmt);
85         assertEquals("imported", importStmt.getModuleName());
86         assertEquals(revision, importStmt.getRevision());
87         assertEquals("imp-pref", importStmt.getPrefix());
88
89         final Set<Module> submodules = rootModule.getSubmodules();
90         //assertEquals(1, submodules.size());
91         //assertEquals("submod", submodules.iterator().next().getName());
92
93         final Set<NotificationDefinition> notifications = rootModule.getNotifications();
94         assertEquals(1, notifications.size());
95         assertEquals("notif1", notifications.iterator().next().getQName().getLocalName());
96
97         final Set<RpcDefinition> rpcs = rootModule.getRpcs();
98         assertEquals(1, rpcs.size());
99         assertEquals("rpc1", rpcs.iterator().next().getQName().getLocalName());
100
101         final Set<Deviation> deviations = rootModule.getDeviations();
102         assertEquals(1, deviations.size());
103         final Deviation deviationStmt = deviations.iterator().next();
104         assertNotNull(deviationStmt);
105         assertEquals(contSchemaPath, deviationStmt.getTargetPath());
106         assertEquals(Deviation.Deviate.ADD, deviationStmt.getDeviate());
107         assertEquals("deviate reference", deviationStmt.getReference());
108
109         final Set<IdentitySchemaNode> identities = rootModule.getIdentities();
110         assertEquals(1, identities.size());
111         assertEquals("identity1", identities.iterator().next().getQName().getLocalName());
112
113 //        final Set<FeatureDefinition> features = rootModule.getFeatures();
114 //        assertEquals(1, features.size());
115 //        assertEquals("feature1", features.iterator().next().getQName().getLocalName());
116
117         final List<ExtensionDefinition> extensionSchemaNodes = rootModule.getExtensionSchemaNodes();
118         assertEquals(1, extensionSchemaNodes.size());
119         assertEquals("ext1", extensionSchemaNodes.iterator().next().getQName().getLocalName());
120     }
121
122     private void addSources(CrossSourceStatementReactor.BuildAction reactor, YangStatementSourceImpl... sources) {
123         for (YangStatementSourceImpl source : sources) {
124             reactor.addSource(source);
125         }
126     }
127 }