Config no longer implements Identifiable because this was in violation of the contrac...
[xmlrouter] / impl / src / test / java / org / wamblee / xmlrouter / impl / SingleRouterConfigTest.java
index 6ec16b1b8d5857f7c7eaf9f48eb1a02a0422e586..7a71a6c2e8bda9924698ea03f982d5aa471695f4 100644 (file)
@@ -23,16 +23,15 @@ import org.junit.Test;
 import org.wamblee.xmlrouter.common.Id;
 import org.wamblee.xmlrouter.config.DocumentType;
 import org.wamblee.xmlrouter.config.Filter;
-import org.wamblee.xmlrouter.config.RouterConfig;
 import org.wamblee.xmlrouter.config.Transformation;
 
 public class SingleRouterConfigTest {
 
-    private ExtendedRouterConfig config;
+    private SingleRouterConfig config;
 
     @Before
     public void setUp() {
-        config = new SingleRouterConfig(new Id<RouterConfig>("routerconfig"));
+        config = new SingleRouterConfig("routerconfig");
         assertEquals("routerconfig", config.getId().getId());
     }
 
@@ -47,7 +46,9 @@ public class SingleRouterConfigTest {
         config.documentTypeConfig().add(type2);
 
         assertEquals(2, config.documentTypeConfig().values().size());
-        assertTrue(config.documentTypeConfig().values().get(0) instanceof RobustDocumentType);
+        Object firstValue = config.documentTypeConfig().values().iterator()
+            .next();
+        assertTrue(firstValue instanceof RobustDocumentType);
     }
 
     @Test
@@ -62,7 +63,9 @@ public class SingleRouterConfigTest {
         config.transformationConfig().add(transformation2);
 
         assertEquals(2, config.transformationConfig().values().size());
-        assertTrue(config.transformationConfig().values().get(0) instanceof RobustTransformation);
+        Object firstValue = config.transformationConfig().values().iterator()
+            .next();
+        assertTrue(firstValue instanceof RobustTransformation);
     }
 
     @Test
@@ -77,6 +80,76 @@ public class SingleRouterConfigTest {
         config.filterConfig().add(filter2);
 
         assertEquals(2, config.filterConfig().values().size());
-        assertTrue(config.filterConfig().values().get(0) instanceof RobustFilter);
+        Object firstValue = config.filterConfig().values().iterator().next();
+        assertTrue(firstValue instanceof RobustFilter);
+    }
+
+    @Test
+    public void testEqualityEmptyConfig() {
+        RouterConfig config1 = new SingleRouterConfig("routerconfig");
+        RouterConfig config2 = new SingleRouterConfig("routerconfig");
+        assertEquals(config1, config2);
+    }
+
+    @Test
+    public void testEqualsNonEmpty() {
+        RouterConfig config1 = new SingleRouterConfig("routerconfig");
+
+        assertFalse(config1.equals(null));
+        assertFalse(config.equals("hello"));
+
+        RouterConfig config2 = new SingleRouterConfig("routerconfig");
+        DocumentType type1 = mock(DocumentType.class);
+        when(type1.getId()).thenReturn(new Id<DocumentType>("type1"));
+        DocumentType type2 = mock(DocumentType.class);
+        when(type2.getId()).thenReturn(new Id<DocumentType>("type1"));
+        Filter filter1 = mock(Filter.class);
+        when(filter1.getId()).thenReturn(new Id<Filter>("f1"));
+        Filter filter2 = mock(Filter.class);
+        when(filter2.getId()).thenReturn(new Id<Filter>("f1"));
+        Transformation transformation1 = mock(Transformation.class);
+        when(transformation1.getId()).thenReturn(new Id<Transformation>("t1"));
+        Transformation transformation2 = mock(Transformation.class);
+        when(transformation2.getId()).thenReturn(new Id<Transformation>("t1"));
+
+        config1.documentTypeConfig().add(type1);
+        assertFalse(config1.equals(config2));
+
+        config2.documentTypeConfig().add(type2);
+        assertEquals(config1, config2);
+        assertEquals(config1.hashCode(), config2.hashCode());
+
+        config1.transformationConfig().add(transformation1);
+        config2.transformationConfig().add(transformation2);
+
+        assertEquals(config1, config2);
+        assertEquals(config1.hashCode(), config2.hashCode());
+
+        config1.filterConfig().add(filter1);
+        config2.filterConfig().add(filter2);
+
+        assertEquals(config1, config2);
+        assertEquals(config1.hashCode(), config2.hashCode());
+    }
+
+    @Test
+    public void testCopy() {
+        testDocumentType();
+        testFilter();
+        testTransformation();
+
+        SingleRouterConfig copy = new SingleRouterConfig(config);
+        assertEquals(config.getId(), copy.getId());
+        assertEquals(config, copy);
+
+        // verify the copy is not shallow.
+
+        config.documentTypeConfig().remove(new Id<DocumentType>("type1"));
+        config.transformationConfig().remove(new Id<Transformation>("t1"));
+        config.filterConfig().remove(new Id<Filter>("f1"));
+        assertEquals(1, config.documentTypeConfig().values().size());
+        assertEquals(1, config.transformationConfig().values().size());
+        assertEquals(1, config.filterConfig().values().size());
+        assertFalse(config.equals(copy));
     }
 }