Populate data/ hierarchy
[yangtools.git] / data / yang-data-impl / src / test / java / org / opendaylight / yangtools / yang / data / impl / schema / OrderingEqualityTest.java
1 /*
2  * Copyright (c) 2020 PANTHEON.tech, 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.data.impl.schema;
9
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13 import static org.junit.Assert.assertTrue;
14
15 import org.junit.Test;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
18 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
19 import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
20 import org.opendaylight.yangtools.yang.data.api.schema.UserMapNode;
21
22 public class OrderingEqualityTest {
23     private static final QName FOO = QName.create("foo", "foo");
24     private static final QName BAR = QName.create("foo", "bar");
25
26     @Test
27     public void testUserMap() {
28         final UserMapNode firstMap = Builders.orderedMapBuilder()
29             .withNodeIdentifier(new NodeIdentifier(FOO))
30             .withChild(Builders.mapEntryBuilder()
31                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "two"))
32                 .withChild(ImmutableNodes.leafNode(BAR, "two"))
33                 .build())
34             .withChild(Builders.mapEntryBuilder()
35                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "one"))
36                 .withChild(ImmutableNodes.leafNode(BAR, "one"))
37                 .build())
38             .build();
39
40         final UserMapNode secondMap = Builders.orderedMapBuilder()
41             .withNodeIdentifier(new NodeIdentifier(FOO))
42             .withChild(Builders.mapEntryBuilder()
43                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "one"))
44                 .withChild(ImmutableNodes.leafNode(BAR, "one"))
45                 .build())
46             .withChild(Builders.mapEntryBuilder()
47                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "two"))
48                 .withChild(ImmutableNodes.leafNode(BAR, "two"))
49                 .build())
50             .build();
51
52         assertEquals(firstMap.asMap(), secondMap.asMap());
53         assertFalse(firstMap.equals(secondMap));
54         assertFalse(secondMap.equals(firstMap));
55
56         final UserMapNode thirdMap = Builders.orderedMapBuilder()
57             .withNodeIdentifier(new NodeIdentifier(FOO))
58             .withChild(Builders.mapEntryBuilder()
59                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "one"))
60                 .withChild(ImmutableNodes.leafNode(BAR, "one"))
61                 .build())
62             .withChild(Builders.mapEntryBuilder()
63                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "two"))
64                 .withChild(ImmutableNodes.leafNode(BAR, "two"))
65                 .build())
66             .build();
67
68         assertEquals(secondMap.asMap(), thirdMap.asMap());
69         assertFalse(firstMap.equals(thirdMap));
70         assertTrue(secondMap.equals(thirdMap));
71         assertArrayEquals(secondMap.body().toArray(), thirdMap.body().toArray());
72         assertEquals(secondMap.hashCode(), thirdMap.hashCode());
73
74         // Although this map looks as secondMap, it is not equal
75         final SystemMapNode systemMap = Builders.mapBuilder()
76             .withNodeIdentifier(new NodeIdentifier(FOO))
77             .withChild(Builders.mapEntryBuilder()
78                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "one"))
79                 .withChild(ImmutableNodes.leafNode(BAR, "one"))
80                 .build())
81             .withChild(Builders.mapEntryBuilder()
82                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "two"))
83                 .withChild(ImmutableNodes.leafNode(BAR, "two"))
84                 .build())
85             .build();
86
87         assertEquals(secondMap.asMap(), systemMap.asMap());
88         assertFalse(firstMap.equals(systemMap));
89         assertFalse(secondMap.equals(systemMap));
90     }
91
92     @Test
93     public void testSystemMap() {
94         final SystemMapNode firstMap = Builders.mapBuilder()
95             .withNodeIdentifier(new NodeIdentifier(FOO))
96             .withChild(Builders.mapEntryBuilder()
97                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "one"))
98                 .withChild(ImmutableNodes.leafNode(BAR, "one"))
99                 .build())
100             .withChild(Builders.mapEntryBuilder()
101                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "two"))
102                 .withChild(ImmutableNodes.leafNode(BAR, "two"))
103                 .build())
104             .build();
105         final SystemMapNode secondMap = Builders.mapBuilder()
106             .withNodeIdentifier(new NodeIdentifier(FOO))
107             .withChild(Builders.mapEntryBuilder()
108                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "two"))
109                 .withChild(ImmutableNodes.leafNode(BAR, "two"))
110                 .build())
111             .withChild(Builders.mapEntryBuilder()
112                 .withNodeIdentifier(NodeIdentifierWithPredicates.of(FOO, BAR, "one"))
113                 .withChild(ImmutableNodes.leafNode(BAR, "one"))
114                 .build())
115             .build();
116
117         assertEquals(firstMap.asMap(), secondMap.asMap());
118         // Order does not matter
119         assertTrue(firstMap.equals(secondMap));
120         assertTrue(secondMap.equals(firstMap));
121         assertEquals(firstMap.hashCode(), secondMap.hashCode());
122     }
123 }