blob: 6abdd47ef6e87f5cf6f22c3cc023bc4752d12dbf [file] [log] [blame]
Richard Uhlerd6918e32017-06-14 16:42:44 +01001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.ahat;
18
19import com.android.ahat.heapdump.DiffFields;
20import com.android.ahat.heapdump.DiffedFieldValue;
21import com.android.ahat.heapdump.FieldValue;
22import com.android.ahat.heapdump.Value;
23import java.util.ArrayList;
24import java.util.List;
25import org.junit.Test;
26
27import static org.junit.Assert.assertEquals;
28import static org.junit.Assert.assertNull;
29
30public class DiffFieldsTest {
31 @Test
32 public void normalMatchedDiffedFieldValues() {
33 FieldValue normal1 = new FieldValue("name", "type", new Value(1));
34 FieldValue normal2 = new FieldValue("name", "type", new Value(2));
35
36 DiffedFieldValue x = DiffedFieldValue.matched(normal1, normal2);
37 assertEquals("name", x.name);
38 assertEquals("type", x.type);
39 assertEquals(new Value(1), x.current);
40 assertEquals(new Value(2), x.baseline);
41 assertEquals(DiffedFieldValue.Status.MATCHED, x.status);
42 }
43
44 @Test
45 public void nulledMatchedDiffedFieldValues() {
46 FieldValue normal = new FieldValue("name", "type", new Value(1));
47 FieldValue nulled = new FieldValue("name", "type", null);
48
49 DiffedFieldValue x = DiffedFieldValue.matched(normal, nulled);
50 assertEquals("name", x.name);
51 assertEquals("type", x.type);
52 assertEquals(new Value(1), x.current);
53 assertNull(x.baseline);
54 assertEquals(DiffedFieldValue.Status.MATCHED, x.status);
55
56 DiffedFieldValue y = DiffedFieldValue.matched(nulled, normal);
57 assertEquals("name", y.name);
58 assertEquals("type", y.type);
59 assertNull(y.current);
60 assertEquals(new Value(1), y.baseline);
61 assertEquals(DiffedFieldValue.Status.MATCHED, y.status);
62 }
63
64 @Test
65 public void normalAddedDiffedFieldValues() {
66 FieldValue normal = new FieldValue("name", "type", new Value(1));
67
68 DiffedFieldValue x = DiffedFieldValue.added(normal);
69 assertEquals("name", x.name);
70 assertEquals("type", x.type);
71 assertEquals(new Value(1), x.current);
72 assertEquals(DiffedFieldValue.Status.ADDED, x.status);
73 }
74
75 @Test
76 public void nulledAddedDiffedFieldValues() {
77 FieldValue nulled = new FieldValue("name", "type", null);
78
79 DiffedFieldValue x = DiffedFieldValue.added(nulled);
80 assertEquals("name", x.name);
81 assertEquals("type", x.type);
82 assertNull(x.current);
83 assertEquals(DiffedFieldValue.Status.ADDED, x.status);
84 }
85
86 @Test
87 public void normalDeletedDiffedFieldValues() {
88 FieldValue normal = new FieldValue("name", "type", new Value(1));
89
90 DiffedFieldValue x = DiffedFieldValue.deleted(normal);
91 assertEquals("name", x.name);
92 assertEquals("type", x.type);
93 assertEquals(new Value(1), x.baseline);
94 assertEquals(DiffedFieldValue.Status.DELETED, x.status);
95 }
96
97 @Test
98 public void nulledDeletedDiffedFieldValues() {
99 FieldValue nulled = new FieldValue("name", "type", null);
100
101 DiffedFieldValue x = DiffedFieldValue.deleted(nulled);
102 assertEquals("name", x.name);
103 assertEquals("type", x.type);
104 assertNull(x.baseline);
105 assertEquals(DiffedFieldValue.Status.DELETED, x.status);
106 }
107
108 @Test
109 public void basicDiff() {
110 List<FieldValue> a = new ArrayList<FieldValue>();
111 a.add(new FieldValue("n0", "t0", null));
112 a.add(new FieldValue("n2", "t2", null));
113 a.add(new FieldValue("n3", "t3", null));
114 a.add(new FieldValue("n4", "t4", null));
115 a.add(new FieldValue("n5", "t5", null));
116 a.add(new FieldValue("n6", "t6", null));
117
118 List<FieldValue> b = new ArrayList<FieldValue>();
119 b.add(new FieldValue("n0", "t0", null));
120 b.add(new FieldValue("n1", "t1", null));
121 b.add(new FieldValue("n2", "t2", null));
122 b.add(new FieldValue("n3", "t3", null));
123 b.add(new FieldValue("n5", "t5", null));
124 b.add(new FieldValue("n6", "t6", null));
125 b.add(new FieldValue("n7", "t7", null));
126
127 // Note: The expected result makes assumptions about the implementation of
128 // field diff to match the order of the returned fields. If the
129 // implementation changes, this test may need to be generalized to accept
130 // the new implementation.
131 List<DiffedFieldValue> expected = new ArrayList<DiffedFieldValue>();
132 expected.add(DiffedFieldValue.matched(a.get(0), b.get(0)));
133 expected.add(DiffedFieldValue.deleted(b.get(1)));
134 expected.add(DiffedFieldValue.matched(a.get(1), b.get(2)));
135 expected.add(DiffedFieldValue.matched(a.get(2), b.get(3)));
136 expected.add(DiffedFieldValue.added(a.get(3)));
137 expected.add(DiffedFieldValue.matched(a.get(4), b.get(4)));
138 expected.add(DiffedFieldValue.matched(a.get(5), b.get(5)));
139 expected.add(DiffedFieldValue.deleted(b.get(6)));
140
141 List<DiffedFieldValue> diffed = DiffFields.diff(a, b);
142 assertEquals(expected, diffed);
143 }
144
145 @Test
146 public void reorderedDiff() {
147 List<FieldValue> a = new ArrayList<FieldValue>();
148 a.add(new FieldValue("n0", "t0", null));
149 a.add(new FieldValue("n1", "t1", null));
150 a.add(new FieldValue("n2", "t2", null));
151 a.add(new FieldValue("n3", "t3", null));
152 a.add(new FieldValue("n4", "t4", null));
153 a.add(new FieldValue("n5", "t5", null));
154 a.add(new FieldValue("n6", "t6", null));
155
156 List<FieldValue> b = new ArrayList<FieldValue>();
157 b.add(new FieldValue("n4", "t4", null));
158 b.add(new FieldValue("n1", "t1", null));
159 b.add(new FieldValue("n3", "t3", null));
160 b.add(new FieldValue("n0", "t0", null));
161 b.add(new FieldValue("n5", "t5", null));
162 b.add(new FieldValue("n2", "t2", null));
163 b.add(new FieldValue("n6", "t6", null));
164
165 // Note: The expected result makes assumptions about the implementation of
166 // field diff to match the order of the returned fields. If the
167 // implementation changes, this test may need to be generalized to accept
168 // the new implementation.
169 List<DiffedFieldValue> expected = new ArrayList<DiffedFieldValue>();
170 expected.add(DiffedFieldValue.matched(a.get(0), b.get(3)));
171 expected.add(DiffedFieldValue.matched(a.get(1), b.get(1)));
172 expected.add(DiffedFieldValue.matched(a.get(2), b.get(5)));
173 expected.add(DiffedFieldValue.matched(a.get(3), b.get(2)));
174 expected.add(DiffedFieldValue.matched(a.get(4), b.get(0)));
175 expected.add(DiffedFieldValue.matched(a.get(5), b.get(4)));
176 expected.add(DiffedFieldValue.matched(a.get(6), b.get(6)));
177
178 List<DiffedFieldValue> diffed = DiffFields.diff(a, b);
179 assertEquals(expected, diffed);
180 }
181}