1 package org.wikimedia.search.extra.superdetectnoop;
2
3 import static org.hamcrest.Matchers.instanceOf;
4
5 import java.util.Arrays;
6 import java.util.HashMap;
7 import java.util.Map;
8
9 import org.apache.lucene.util.LuceneTestCase;
10 import org.junit.Test;
11
12 public class EqualsHandlerTest extends LuceneTestCase {
13 private ChangeHandler<Object> handler() {
14 return ChangeHandler.Equal.INSTANCE;
15 }
16
17 @Test
18 public void testDeclaration() {
19 ChangeHandler<Object> handler = new ChangeHandler.Equal.Recognizer().build("equals");
20 assertNotNull(handler);
21 assertThat(handler, instanceOf(ChangeHandler.Equal.class));
22 handler = new ChangeHandler.Equal.Recognizer().build("notMe");
23 assertNull(handler);
24 }
25
26 @Test
27 public void testNulls() {
28 assertTrue(handler().handle(null, null).isCloseEnough());
29 assertNull(handler().handle(new HashMap<>(), null).newValue());
30 assertEquals(new HashMap<>(), handler().handle(null, new HashMap<>()).newValue());
31 }
32
33 @Test
34 public void testTypes() {
35 assertEquals(3, handler().handle(new HashMap<>(), 3).newValue());
36 assertEquals(new HashMap<>(), handler().handle(3, new HashMap<>()).newValue());
37 assertTrue(handler().handle(3, 3).isCloseEnough());
38 assertEquals(4, handler().handle(3, 4).newValue());
39 }
40
41 @Test
42 public void testMaps() {
43 assertTrue(handler().handle(new HashMap<>(), new HashMap<>()).isCloseEnough());
44
45 Map<String, Object> oldMap = new HashMap<>();
46 oldMap.put("en", Arrays.asList("hand", "fist"));
47 oldMap.put("fr", Arrays.asList("main", "poignet"));
48 Map<String, Object> newMap = new HashMap<>();
49 newMap.put("fr", Arrays.asList("main", "poignet"));
50 assertEquals(newMap, handler().handle(oldMap, newMap).newValue());
51
52 newMap.put("en", Arrays.asList("hand", "fist"));
53 assertTrue(handler().handle(oldMap, newMap).isCloseEnough());
54
55
56 newMap.put("en", Arrays.asList("fist", "hand"));
57 assertEquals(newMap, handler().handle(oldMap, newMap).newValue());
58 }
59
60 @Test
61 public void testDeepMaps() {
62 assertTrue(handler().handle(new HashMap<>(), new HashMap<>()).isCloseEnough());
63
64 Map<String, Object> oldMap = new HashMap<>();
65 oldMap.put("en", Arrays.asList("hand", "fist"));
66 oldMap.put("fr", Arrays.asList("main", "poignet"));
67 Map<String, Object> newMap = new HashMap<>();
68 Map<String, Object> newLevel = new HashMap<>();
69 newLevel.put("fr", Arrays.asList("main", "poignet"));
70 newMap.put("new_level", newLevel);
71 assertEquals(newMap, handler().handle(oldMap, newMap).newValue());
72 }
73 }