Refactor yang-model-api child traversal return types
[yangtools.git] / yang / 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.Assert.assertArrayEquals;
11 import static org.mockito.Mockito.doReturn;
12 import static org.mockito.Mockito.mock;
13
14 import com.google.common.collect.ImmutableList;
15 import com.google.common.collect.ImmutableSet;
16 import java.net.URI;
17 import java.util.Collection;
18 import java.util.List;
19 import java.util.Optional;
20 import java.util.Set;
21 import org.junit.Test;
22 import org.opendaylight.yangtools.yang.common.QNameModule;
23 import org.opendaylight.yangtools.yang.common.Revision;
24 import org.opendaylight.yangtools.yang.model.api.Module;
25
26 public class SimpleSchemaContextTest {
27     @Test
28     public void testGetModulesOrdering() {
29         final Module foo0 = mockModule("foo", Optional.empty());
30         final Module foo1 = mockModule("foo", Revision.ofNullable("2018-01-01"));
31         final Module foo2 = mockModule("foo", Revision.ofNullable("2018-01-16"));
32
33         final List<Module> expected = ImmutableList.of(foo2, foo1, foo0);
34         assertGetModules(expected, foo0, foo1, foo2);
35         assertGetModules(expected, foo0, foo2, foo1);
36         assertGetModules(expected, foo1, foo0, foo2);
37         assertGetModules(expected, foo1, foo2, foo0);
38         assertGetModules(expected, foo2, foo0, foo1);
39         assertGetModules(expected, foo2, foo1, foo0);
40
41         assertFindModules(expected, "foo", foo0, foo1, foo2);
42         assertFindModules(expected, "foo", foo0, foo2, foo1);
43         assertFindModules(expected, "foo", foo1, foo0, foo2);
44         assertFindModules(expected, "foo", foo1, foo2, foo0);
45         assertFindModules(expected, "foo", foo2, foo0, foo1);
46         assertFindModules(expected, "foo", foo2, foo1, foo0);
47
48         final URI uri = URI.create("foo");
49         assertFindModules(expected, uri, foo0, foo1, foo2);
50         assertFindModules(expected, uri, foo0, foo2, foo1);
51         assertFindModules(expected, uri, foo1, foo0, foo2);
52         assertFindModules(expected, uri, foo1, foo2, foo0);
53         assertFindModules(expected, uri, foo2, foo0, foo1);
54         assertFindModules(expected, uri, foo2, foo1, foo0);
55     }
56
57     private static void assertGetModules(final List<Module> expected, final Module... modules) {
58         final Set<Module> actual = SimpleSchemaContext.forModules(ImmutableList.copyOf(modules)).getModules();
59         assertArrayEquals(expected.toArray(), actual.toArray());
60     }
61
62     private static void assertFindModules(final List<Module> expected, final String name, final Module... modules) {
63         final Collection<? extends Module> actual = SimpleSchemaContext.forModules(ImmutableList.copyOf(modules))
64                 .findModules(name);
65         assertArrayEquals(expected.toArray(), actual.toArray());
66     }
67
68     private static void assertFindModules(final List<Module> expected, final URI uri, final Module... modules) {
69         final Collection<? extends Module> actual = SimpleSchemaContext.forModules(ImmutableSet.copyOf(modules))
70                 .findModules(uri);
71         assertArrayEquals(expected.toArray(), actual.toArray());
72     }
73
74     private static Module mockModule(final String name, final Optional<Revision> revision) {
75         final QNameModule mod = QNameModule.create(URI.create(name), revision);
76         final Module ret = mock(Module.class);
77         doReturn(name).when(ret).getName();
78         doReturn(mod.getNamespace()).when(ret).getNamespace();
79         doReturn(mod.getRevision()).when(ret).getRevision();
80         doReturn(mod).when(ret).getQNameModule();
81         doReturn(mod.toString()).when(ret).toString();
82         doReturn(ImmutableSet.of()).when(ret).getImports();
83         doReturn(ImmutableSet.of()).when(ret).getSubmodules();
84         doReturn(ImmutableList.of()).when(ret).getUnknownSchemaNodes();
85         return ret;
86     }
87 }