Migrate YANG inputs for yang-model-util
[yangtools.git] / model / yang-model-util / src / test / java / org / opendaylight / yangtools / yang / model / util / SimpleSchemaContextTest.java
1 /*
2  * Copyright (c) 2018 Pantheon Technologies, s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.model.util;
9
10 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.mock;
13
14 import java.util.List;
15 import java.util.Optional;
16 import java.util.Set;
17 import org.junit.jupiter.api.Test;
18 import org.opendaylight.yangtools.yang.common.QNameModule;
19 import org.opendaylight.yangtools.yang.common.Revision;
20 import org.opendaylight.yangtools.yang.common.XMLNamespace;
21 import org.opendaylight.yangtools.yang.model.api.Module;
22 import org.opendaylight.yangtools.yang.model.spi.SimpleSchemaContext;
23
24 class SimpleSchemaContextTest {
25     @Test
26     void testGetModulesOrdering() {
27         final var foo0 = mockModule("foo", Optional.empty());
28         final var foo1 = mockModule("foo", Revision.ofNullable("2018-01-01"));
29         final var foo2 = mockModule("foo", Revision.ofNullable("2018-01-16"));
30
31         final var expected = List.of(foo2, foo1, foo0);
32         assertGetModules(expected, foo0, foo1, foo2);
33         assertGetModules(expected, foo0, foo2, foo1);
34         assertGetModules(expected, foo1, foo0, foo2);
35         assertGetModules(expected, foo1, foo2, foo0);
36         assertGetModules(expected, foo2, foo0, foo1);
37         assertGetModules(expected, foo2, foo1, foo0);
38
39         assertFindModules(expected, "foo", foo0, foo1, foo2);
40         assertFindModules(expected, "foo", foo0, foo2, foo1);
41         assertFindModules(expected, "foo", foo1, foo0, foo2);
42         assertFindModules(expected, "foo", foo1, foo2, foo0);
43         assertFindModules(expected, "foo", foo2, foo0, foo1);
44         assertFindModules(expected, "foo", foo2, foo1, foo0);
45
46         final XMLNamespace uri = XMLNamespace.of("foo");
47         assertFindModules(expected, uri, foo0, foo1, foo2);
48         assertFindModules(expected, uri, foo0, foo2, foo1);
49         assertFindModules(expected, uri, foo1, foo0, foo2);
50         assertFindModules(expected, uri, foo1, foo2, foo0);
51         assertFindModules(expected, uri, foo2, foo0, foo1);
52         assertFindModules(expected, uri, foo2, foo1, foo0);
53     }
54
55     private static void assertGetModules(final List<Module> expected, final Module... modules) {
56         final var actual = SimpleSchemaContext.forModules(List.of(modules)).getModules();
57         assertArrayEquals(expected.toArray(), actual.toArray());
58     }
59
60     private static void assertFindModules(final List<Module> expected, final String name, final Module... modules) {
61         final var actual = SimpleSchemaContext.forModules(List.of(modules)).findModules(name);
62         assertArrayEquals(expected.toArray(), actual.toArray());
63     }
64
65     private static void assertFindModules(final List<Module> expected, final XMLNamespace uri,
66             final Module... modules) {
67         final var actual = SimpleSchemaContext.forModules(List.of(modules)).findModules(uri);
68         assertArrayEquals(expected.toArray(), actual.toArray());
69     }
70
71     private static Module mockModule(final String name, final Optional<Revision> revision) {
72         final var mod = QNameModule.create(XMLNamespace.of(name), revision);
73         final var ret = mock(Module.class);
74         doReturn(name).when(ret).getName();
75         doReturn(mod.getNamespace()).when(ret).getNamespace();
76         doReturn(mod.getRevision()).when(ret).getRevision();
77         doReturn(mod).when(ret).getQNameModule();
78         doReturn(mod.toString()).when(ret).toString();
79         doReturn(Set.of()).when(ret).getImports();
80         doReturn(Set.of()).when(ret).getSubmodules();
81         doReturn(List.of()).when(ret).getUnknownSchemaNodes();
82         return ret;
83     }
84 }