/** 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())); } }
/** This method tests moving an Item around in the selection list of a query. */ public void testMoveColumn() throws Exception { QueryImpl query = new QueryImpl(new StubDatabaseMapping()); Container container = new ItemContainer("Container"); Item item1 = new StringItem("item1"); container.addItem(item1); Item item2 = new StringItem("item2"); container.addItem(item2); Container container2 = new ItemContainer("Container2"); Item item3 = new StringItem("item3"); container2.addItem(item3); Item item4 = new StringItem("item4"); container2.addItem(item4); query.addTable(container); query.addTable(container2); query.selectItem(item1); query.selectItem(item2); query.selectItem(item3); query.selectItem(item4); assertEquals(item1, query.getSelectedColumns().get(0)); assertEquals(0, item1.getSelected().intValue()); assertEquals(item2, query.getSelectedColumns().get(1)); assertEquals(1, item2.getSelected().intValue()); assertEquals(item3, query.getSelectedColumns().get(2)); assertEquals(2, item3.getSelected().intValue()); assertEquals(item4, query.getSelectedColumns().get(3)); assertEquals(3, item4.getSelected().intValue()); query.moveItem(item3, 0); assertEquals(item3, query.getSelectedColumns().get(0)); assertEquals(0, item3.getSelected().intValue()); assertEquals(item1, query.getSelectedColumns().get(1)); assertEquals(1, item1.getSelected().intValue()); assertEquals(item2, query.getSelectedColumns().get(2)); assertEquals(2, item2.getSelected().intValue()); assertEquals(item4, query.getSelectedColumns().get(3)); assertEquals(3, item4.getSelected().intValue()); query.moveItem(item1, 3); assertEquals(item3, query.getSelectedColumns().get(0)); assertEquals(0, item3.getSelected().intValue()); assertEquals(item2, query.getSelectedColumns().get(1)); assertEquals(1, item2.getSelected().intValue()); assertEquals(item4, query.getSelectedColumns().get(2)); assertEquals(2, item4.getSelected().intValue()); assertEquals(item1, query.getSelectedColumns().get(3)); assertEquals(3, item1.getSelected().intValue()); }
/** Tests adding an item with its order by set will return a query with the order by in it. */ public void testAddingItemWithOrder() throws Exception { Query q = new QueryImpl(new StubDatabaseMapping()); Item col1 = new StringItem("Col 1"); Item col2 = new StringItem("Col 2"); Container table = new TestingItemContainer("Test container"); table.addItem(col1); table.addItem(col2); q.addTable(table); q.selectItem(col1); q.selectItem(col2); q.orderColumn(col1, OrderByArgument.ASC); String query = q.generateQuery().toLowerCase(); System.out.println(query); String selectAndSortRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*order by(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*"; assertTrue(query.matches(selectAndSortRegex)); assertEquals(0, col1.getOrderByOrdering().intValue()); Item col3 = new StringItem("Col 3"); q.selectItem(col3); q.orderColumn(col3, OrderByArgument.DESC); table.addItem(col3); query = q.generateQuery().toLowerCase(); String colAddedWithSort = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*" + col3.getName().toLowerCase() + "(.|\n)*order by(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col3.getName().toLowerCase() + "(.|\n)*"; query = q.generateQuery().toLowerCase(); System.out.println(query); assertTrue(query.matches(colAddedWithSort)); assertEquals(0, col1.getOrderByOrdering().intValue()); assertEquals(1, col3.getOrderByOrdering().intValue()); assertEquals(col1, q.getOrderByList().get(0)); assertEquals(col3, q.getOrderByList().get(1)); }
/** * Basic reset test. * * @throws Exception */ public void testResetQuery() throws Exception { Query q = new QueryImpl(new StubDatabaseMapping()); String startingWhereClause = q.getGlobalWhereClause(); q.setGlobalWhereClause("something"); boolean startingGroupingFlag = q.isGroupingEnabled(); q.setGroupingEnabled(true); int startingZoomLevel = q.getZoomLevel(); q.setZoomLevel(75); Container constantsContainer = q.getConstantsContainer(); List<Item> constantItems = constantsContainer.getItems(); constantsContainer.removeItem(0); constantsContainer.addItem(new StringItem("New Constant")); Container container1 = new ItemContainer("Container 1"); Item item1 = new StringItem("Item 1"); container1.addItem(item1); q.addTable(container1); Container container2 = new ItemContainer("Container 2"); Item item2 = new StringItem("item 2"); container2.addItem(item2); q.addTable(container2); q.selectItem(item1); q.selectItem(item2); q.orderColumn(item1, OrderByArgument.ASC); q.orderColumn(item2, OrderByArgument.DESC); SQLJoin join = new SQLJoin(item1, item2); q.addJoin(join); q.reset(); assertEquals(startingZoomLevel, q.getZoomLevel()); assertEquals(startingWhereClause, q.getGlobalWhereClause()); assertEquals(startingGroupingFlag, q.isGroupingEnabled()); Container resetConstants = q.getConstantsContainer(); assertEquals(constantItems.size(), resetConstants.getItems().size()); for (int i = 0; i < constantItems.size(); i++) { assertEquals(constantItems.get(i).getName(), resetConstants.getItems().get(i).getName()); } assertTrue(q.getFromTableList().isEmpty()); assertTrue(q.getJoins().isEmpty()); assertTrue(q.getOrderByList().isEmpty()); assertTrue(q.getSelectedColumns().isEmpty()); }
@Override void activate() { gametext.infoMessage(activateText); if (!empty) { addItem(); empty = true; } else { gametext.infoMessage("You find nothing."); } }
/** * Test that a correct query is returned when a column that is being aggregated is removed from * the query. * * @throws Exception */ public void testUnselectColumnWithAggregate() throws Exception { Query q = new QueryImpl(new StubDatabaseMapping()); Item col1 = new StringItem("Col 1"); Item col2 = new StringItem("Col 2"); Container table = new TestingItemContainer("Test container"); table.addItem(col1); table.addItem(col2); q.addTable(table); q.selectItem(col1); q.selectItem(col2); String selectRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*from(.|\n)*"; String query = q.generateQuery().toLowerCase(); assertTrue(query.matches(selectRegex)); String groupingRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*from(.|\n)*group by(.|\n)*" + "(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*"; String summingRegex = "select(.|\n)*sum(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*from(.|\n)*"; q.setGroupingEnabled(true); col1.setGroupBy(SQLGroupFunction.SUM); query = q.generateQuery().toLowerCase(); assertFalse(query.matches(groupingRegex)); assertTrue(query.matches(summingRegex)); String failRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*from(.|\n)*"; String col2Regex = "select(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*"; q.unselectItem(col1); query = q.generateQuery().toLowerCase(); System.out.println(query); assertFalse(query.matches(failRegex)); assertTrue(query.matches(col2Regex)); }
/** * Tests that removing a column that had a sort order from the query by un-selecting it removes it * from the generated query and then selecting it adds it back in. */ public void testReselectColWithSorting() throws Exception { Query q = new QueryImpl(new StubDatabaseMapping()); Item col1 = new StringItem("Col 1"); Item col2 = new StringItem("Col 2"); Container table = new TestingItemContainer("Test container"); table.addItem(col1); table.addItem(col2); q.addTable(table); q.selectItem(col1); q.selectItem(col2); q.orderColumn(col1, OrderByArgument.ASC); String query = q.generateQuery().toLowerCase(); System.out.println(query); String selectAndSortRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*order by(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*"; String selectNoSortRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*"; assertTrue(query.matches(selectAndSortRegex)); q.unselectItem(col1); query = q.generateQuery().toLowerCase(); assertFalse(query.matches(selectAndSortRegex)); assertFalse(query.matches(selectNoSortRegex)); System.out.println(query); assertTrue(query.matches("select(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*")); String reselectWithSortRegex = "select(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*order by(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*"; q.selectItem(col1); query = q.generateQuery().toLowerCase(); assertTrue(query.matches(reselectWithSortRegex)); }
@Test public void testNonStringMapKey() { Validator validator = ValidatorUtil.getValidator(); Container container = new Container(); Key id = new Key(); container.addItem(id, new Item(null)); Set<ConstraintViolation<Container>> constraintViolations = validator.validate(container); assertNumberOfViolations(constraintViolations, 1); ConstraintViolation<Container> violation = constraintViolations.iterator().next(); Path path = violation.getPropertyPath(); Iterator<Path.Node> iter = path.iterator(); iter.next(); Path.Node node = iter.next(); assertNotNull(node); assertTrue(node.isInIterable()); assertEquals(node.getKey(), id); }
/** * Test to ensure a column that is selected is added to the query and if it is un-selected it is * removed. */ public void testSelectColumn() throws Exception { Query q = new QueryImpl(new StubDatabaseMapping()); Item col1 = new StringItem("Col 1"); Item col2 = new StringItem("Col 2"); Container table = new TestingItemContainer("Test container"); table.addItem(col1); table.addItem(col2); q.addTable(table); q.selectItem(col1); q.selectItem(col2); assertEquals(2, q.getSelectedColumns().size()); assertTrue(q.getSelectedColumns().contains(col1)); assertTrue(q.getSelectedColumns().contains(col2)); String selectRegex = "select(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*from(.|\n)*"; String query = q.generateQuery().toLowerCase(); assertTrue(query.matches(selectRegex)); String unselectRegex = "select(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*from(.|\n)*"; q.unselectItem(col1); query = q.generateQuery().toLowerCase(); assertFalse(query.matches(selectRegex)); assertTrue(query.matches(unselectRegex)); String reselectRegex = "select(.|\n)*" + col2.getName().toLowerCase() + "(.|\n)*" + col1.getName().toLowerCase() + "(.|\n)*from(.|\n)*"; q.selectItem(col1); query = q.generateQuery().toLowerCase(); assertFalse(query.matches(selectRegex)); assertTrue(query.matches(reselectRegex)); }
/** * This is a test to confirm that a query string can be created from a Query object if the * database is missing. This is for cases where the database may not be able to be connected to. */ public void testQueryConstructionWithMissingDB() throws Exception { Query query = new QueryImpl(new StubDatabaseMapping()); Container container = new ItemContainer("Test_Table"); Item item = new StringItem("column"); container.addItem(item); query.addTable(container); query.selectItem(item); assertEquals(1, query.getSelectedColumns().size()); assertTrue(query.getSelectedColumns().contains(item)); String queryString = query.generateQuery(); queryString = queryString.toLowerCase(); System.out.println(queryString); assertTrue( queryString .toLowerCase() .matches( "select(.|\r|\n)*test_table.column(.|\r|\n)*from(.|\r|\n)*test_table(.|\r|\n)*test_table(.|\r|\n)*")); }
/** Tests that adding and removing a container will fire the correct event from the query. */ public void testContainerFiresEvent() throws Exception { CountingChangeListener listener = new CountingChangeListener(); QueryImpl query = new QueryImpl(new StubDatabaseMapping()); query.addQueryChangeListener(listener); Container container = new ItemContainer("container"); Item item = new StringItem("name"); container.addItem(item); assertEquals(0, listener.getContainerAddedCount()); query.addTable(container); assertEquals(1, listener.getContainerAddedCount()); QueryChangeEvent evt = listener.getLastQueryChangeEvent(); assertEquals(container, evt.getContainerChanged()); assertEquals(query, evt.getSource()); assertEquals(0, listener.getContainerRemovedCount()); query.removeTable(container); assertEquals(1, listener.getContainerRemovedCount()); evt = listener.getLastQueryChangeEvent(); assertEquals(container, evt.getContainerChanged()); assertEquals(query, evt.getSource()); }