View Javadoc
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          // Same keys but one value changed
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  }