/** Tests the copy constructor of a query will copy columns, containers, and joins. */ public void testCopyConstructorWithListeners() throws Exception { QueryImpl query = new QueryImpl(new StubDatabaseMapping()); Item leftColumn = new TestingStringItem("leftCol"); Container leftContainer = new TestingItemContainer("leftContainer"); leftContainer.addItem(leftColumn); Item rightColumn = new TestingStringItem("rightCol"); Container rightContainer = new TestingItemContainer("rightContainer"); rightContainer.addItem(rightColumn); SQLJoin join = new TestingSQLJoin(leftColumn, rightColumn); query.addTable(leftContainer); query.addTable(rightContainer); query.addJoin(join); assertTrue(query.getFromTableList().contains(leftContainer)); assertTrue(query.getFromTableList().contains(rightContainer)); assertTrue(query.getJoins().contains(join)); QueryImpl copy = new QueryImpl(query, true); assertEquals(2, copy.getFromTableList().size()); assertEquals(1, copy.getJoins().size()); final Container copiedContainers1 = copy.getFromTableList().get(0); final Container copiedContainers2 = copy.getFromTableList().get(1); final SQLJoin copiedJoin = copy.getJoins().iterator().next(); assertTrue(copy.getJoinMapping().containsKey(copiedContainers1)); assertTrue(copy.getJoinMapping().containsKey(copiedContainers2)); assertTrue(copy.getJoinMapping().get(copiedContainers1).containsAll(copy.getJoins())); assertTrue(copy.getJoinMapping().get(copiedContainers2).containsAll(copy.getJoins())); assertNotSame(copiedContainers1, leftContainer); assertNotSame(copiedContainers2, leftContainer); assertNotSame(copiedContainers1, rightContainer); assertNotSame(copiedContainers2, rightContainer); assertEquals(1, ((TestingItemContainer) copiedContainers1).getListeners().size()); assertTrue( ((TestingItemContainer) copiedContainers1) .getListeners() .contains(copy.getTableChildListener())); assertEquals(1, ((TestingItemContainer) copiedContainers2).getListeners().size()); assertTrue( ((TestingItemContainer) copiedContainers2) .getListeners() .contains(copy.getTableChildListener())); assertEquals(1, ((TestingSQLJoin) copiedJoin).getListeners().size()); assertTrue(((TestingSQLJoin) copiedJoin).getListeners().contains(copy.getJoinChangeListener())); for (Item item : copiedContainers1.getItems()) { assertEquals(1, ((TestingStringItem) item).getListeners().size()); assertTrue(((TestingStringItem) item).getListeners().contains(copy.getItemListener())); } for (Item item : copiedContainers2.getItems()) { assertEquals(1, ((TestingStringItem) item).getListeners().size()); assertTrue(((TestingStringItem) item).getListeners().contains(copy.getItemListener())); } }