Added support for annotations in generated APIs.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / test / java / org / opendaylight / controller / yang / model / parser / impl / YangModelValidationListenerTest_SubModule.java
1 package org.opendaylight.controller.yang.model.parser.impl;
2
3 import static org.junit.Assert.*;
4 import static org.junit.matchers.JUnitMatchers.*;
5 import static org.mockito.Mockito.*;
6
7 import org.antlr.v4.runtime.tree.ParseTree;
8 import org.junit.Before;
9 import org.junit.Test;
10 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Belongs_to_stmtContext;
11 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Prefix_stmtContext;
12 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Revision_stmtContext;
13 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Revision_stmtsContext;
14 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Submodule_header_stmtsContext;
15 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Submodule_stmtContext;
16
17 public class YangModelValidationListenerTest_SubModule {
18
19     private YangModelValidationListener valid;
20     private Submodule_stmtContext ctx;
21
22     @Before
23     public void setUp() {
24         valid = new YangModelValidationListener();
25     }
26
27     @Test(expected = YangValidationException.class)
28     public void testNoRevision() {
29
30         Submodule_stmtContext ctx = mock(Submodule_stmtContext.class);
31         doReturn(1).when(ctx).getChildCount();
32         YangModelValidationListenerTest_Module.mockName(ctx, "submodule1");
33
34         try {
35             valid.enterSubmodule_stmt(ctx);
36         } catch (YangValidationException e) {
37             assertThat(
38                     e.getMessage(),
39                     containsString("Missing revision statements in submodule:submodule1"));
40             throw e;
41         }
42     }
43
44     @Test(expected = YangValidationException.class)
45     public void testNoHeaderStmts() {
46         mockSubmoduleWithRevision(2, "1999-4-5", "submodule");
47
48         try {
49             valid.enterSubmodule_stmt(ctx);
50         } catch (YangValidationException e) {
51             assertThat(
52                     e.getMessage(),
53                     containsString("Missing header statements in submodule:submodule"));
54             throw e;
55         }
56     }
57
58     @Test(expected = YangValidationException.class)
59     public void testNoBelongsTo() {
60         Submodule_header_stmtsContext header = mock(Submodule_header_stmtsContext.class);
61         mockSubmoduleParent(2, header, "submodule");
62
63         try {
64             valid.enterSubmodule_header_stmts(header);
65         } catch (YangValidationException e) {
66             assertThat(
67                     e.getMessage(),
68                     containsString("Missing belongs-to statement in submodule:submodule"));
69             throw e;
70         }
71     }
72
73     @Test(expected = YangValidationException.class)
74     public void testBelongsToNoPrefix() {
75         Belongs_to_stmtContext belongsTo = mock(Belongs_to_stmtContext.class);
76         doReturn(1).when(belongsTo).getChildCount();
77         YangModelValidationListenerTest_Module.mockName(belongsTo,
78                 "supermodule");
79
80         mockSubmoduleParent(2, belongsTo, "submodule");
81
82         try {
83             valid.enterBelongs_to_stmt(belongsTo);
84         } catch (YangValidationException e) {
85             assertThat(
86                     e.getMessage(),
87                     containsString("Missing prefix statement in belongs-to:supermodule, in (sub)module:submodule"));
88             throw e;
89         }
90     }
91
92     @Test
93     public void testBelongsTo() {
94         Belongs_to_stmtContext belongsTo = mock(Belongs_to_stmtContext.class);
95         doReturn(2).when(belongsTo).getChildCount();
96         YangModelValidationListenerTest_Module.mockName(belongsTo,
97                 "supermodule");
98
99         Prefix_stmtContext prefix = mock(Prefix_stmtContext.class);
100         doReturn(prefix).when(belongsTo).getChild(1);
101         doReturn(belongsTo).when(prefix).getParent();
102
103         mockSubmoduleParent(2, belongsTo, "submodule");
104         valid.enterBelongs_to_stmt(belongsTo);
105
106     }
107
108     private Revision_stmtContext mockSubmoduleWithRevision(int moduleChildren,
109             String date, String nameOfSubmodule) {
110         Revision_stmtContext mockedRev = mock(Revision_stmtContext.class);
111         doReturn(1).when(mockedRev).getChildCount();
112         YangModelValidationListenerTest_Module.mockName(mockedRev, date);
113
114         Revision_stmtsContext revs = YangModelValidationListenerTest_Module
115                 .mockRevisionsParent(2, mockedRev);
116
117         mockSubmoduleParent(moduleChildren, revs, nameOfSubmodule);
118         return mockedRev;
119     }
120
121     private void mockSubmoduleParent(int moduleChildren, ParseTree child,
122             String moduleName) {
123         ctx = mock(Submodule_stmtContext.class);
124         doReturn(moduleChildren).when(ctx).getChildCount();
125         YangModelValidationListenerTest_Module.mockName(ctx, moduleName);
126         doReturn(child).when(ctx).getChild(1);
127         doReturn(ctx).when(child).getParent();
128     }
129 }