package org.xenei.jdbc4sparql.sparql.items; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.junit.Before; import org.junit.Test; import org.xenei.jdbc4sparql.iface.name.ItemName; import org.xenei.jdbc4sparql.iface.name.NameSegments; //import org.xenei.jdbc4sparql.iface.name.RenamedBaseName; import org.xenei.jdbc4sparql.iface.name.SearchName; public class QueryItemCollectionTest { private static class TestingNamedObject implements NamedObject<ItemName> { private ItemName name; public TestingNamedObject(final ItemName name) { this.name = name; } @Override public ItemName getName() { return name; } public void setName(final ItemName name) { this.name = name; } } private QueryItemCollection<QueryItemInfo<NamedObject<ItemName>, ItemName>, NamedObject<ItemName>, ItemName> itemCollection; private NamedObject<ItemName> namedObject; @Before public void setup() { itemCollection = new QueryItemCollection<QueryItemInfo<NamedObject<ItemName>, ItemName>, NamedObject<ItemName>, ItemName>(); namedObject = new NamedObject<ItemName>() { @Override public ItemName getName() { return new SearchName("", "", "", "ItemName"); } }; ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { for (final String column : new String[] { "column", "column2" }) { name = new SearchName(catalog, schema, table, column); final TestingNamedObject tno = new TestingNamedObject( name); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( tno, name, false); itemCollection.add(qii); } } } } } @Test public void testAdd() { final int size = itemCollection.size(); ItemName name = new SearchName("catalog", "schema", "table", "column"); QueryItemInfo<NamedObject<ItemName>, ItemName> qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); assertFalse(itemCollection.add(qii)); assertEquals(size, itemCollection.size()); // optional does not matter qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>(namedObject, name, true); assertFalse(itemCollection.add(qii)); assertEquals(size, itemCollection.size()); name = new SearchName("catalog", "schema", "table", "column3"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>(namedObject, name, false); assertTrue(itemCollection.add(qii)); assertEquals(size + 1, itemCollection.size()); } @Test public void testAddAll() { ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; final List<QueryItemInfo<NamedObject<ItemName>, ItemName>> lst = new ArrayList<QueryItemInfo<NamedObject<ItemName>, ItemName>>(); for (final String catalog : new String[] { "catalog3", "catalog4" }) { for (final String schema : new String[] { "schema3", "schema4" }) { for (final String table : new String[] { "table3", "table4" }) { for (final String column : new String[] { "column3", "column4" }) { name = new SearchName(catalog, schema, table, column); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); lst.add(qii); } } } } final int size = itemCollection.size(); final int size2 = lst.size(); assertTrue(itemCollection.addAll(lst)); assertEquals(size + size2, itemCollection.size()); } @Test public void testClear() { assertTrue(itemCollection.size() > 0); assertFalse(itemCollection.isEmpty()); itemCollection.clear(); assertEquals(0, itemCollection.size()); assertTrue(itemCollection.isEmpty()); } @Test public void testContains_ItemName() { ItemName name = new SearchName("catalog", "schema", "table", "column"); assertTrue(itemCollection.contains(name)); name = new SearchName("catalog", "schema", "table", "column4"); assertFalse(itemCollection.contains(name)); // test that null is wild card name = new SearchName("catalog", "schema", "table", "column"); name.setUsedSegments(NameSegments.TTFT); assertTrue(itemCollection.contains(name)); name = new SearchName("catalog", "schema", "table", "column4"); name.setUsedSegments(NameSegments.TTFT); assertFalse(itemCollection.contains(name)); } @Test public void testContains_NamedObject() { ItemName name = new SearchName("catalog", "schema", "table", "column"); final TestingNamedObject testNamedObject = new TestingNamedObject(name); assertTrue(itemCollection.contains(testNamedObject)); testNamedObject.setName(new SearchName("catalog", "schema", "table", "column4")); assertFalse(itemCollection.contains(testNamedObject)); // test that null is wild card name = new SearchName("catalog", "schema", "table", "column"); name.setUsedSegments(NameSegments.TTFT); testNamedObject.setName(name); assertTrue(itemCollection.contains(testNamedObject)); name = new SearchName("catalog", "schema", "table", "column4"); name.setUsedSegments(NameSegments.TTFT); testNamedObject.setName(name); assertFalse(itemCollection.contains(testNamedObject)); } @Test public void testContainsAll() { ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; final List<QueryItemInfo<NamedObject<ItemName>, ItemName>> lst = new ArrayList<QueryItemInfo<NamedObject<ItemName>, ItemName>>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { name = new SearchName(catalog, schema, table, "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); lst.add(qii); } } } assertTrue(itemCollection.containsAll(lst)); name = new SearchName("catalog3", "schema", "table", "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>(namedObject, name, false); lst.add(qii); assertFalse(itemCollection.containsAll(lst)); } @Test public void testGet_int() { final ItemName name = new SearchName("catalog", "schema", "table", "column"); final QueryItemInfo<NamedObject<ItemName>, ItemName> qii = itemCollection .get(0); assertNotNull(qii); assertEquals(0, ItemName.COMPARATOR.compare(name, qii.getName())); try { itemCollection.get(itemCollection.size()); fail("Should have thrown IndexOutOfBoundsException"); } catch (final IndexOutOfBoundsException expected) { // do nothing } } @Test public void testGet_ItemName() { ItemName name = new SearchName("catalog", "schema", "table", "column"); final QueryItemInfo<NamedObject<ItemName>, ItemName> qii = itemCollection .get(name); assertNotNull(qii); assertEquals(0, ItemName.COMPARATOR.compare(name, qii.getName())); name = new SearchName("catalog", "schema", null, "column"); try { itemCollection.get(name); fail("Should have thrown IllegalArgumentException"); } catch (final IllegalArgumentException expected) { // do nothing; } name = new SearchName("catalog", "schema", "table3", "column"); assertNull(itemCollection.get(name)); } @Test public void testIndexOf_ItemName() { ItemName name = new SearchName("catalog", "schema", "table", "column"); int i = itemCollection.indexOf(name); assertEquals(0, i); name = new SearchName("catalog2", "schema2", "table2", "column2"); i = itemCollection.indexOf(name); assertEquals(15, i); name = new SearchName("catalog3", "schema2", "table2", "column2"); i = itemCollection.indexOf(name); assertEquals(-1, i); } @Test public void testMatch_ItemName() { ItemName name = new SearchName("catalog", "schema", "table", "column"); Iterator<QueryItemInfo<NamedObject<ItemName>, ItemName>> iter = itemCollection .match(name); assertTrue(iter.hasNext()); final QueryItemInfo<NamedObject<ItemName>, ItemName> qii = iter.next(); assertNotNull(qii); assertFalse(iter.hasNext()); assertEquals(0, ItemName.COMPARATOR.compare(name, qii.getName())); name = new SearchName("catalog", "schema", "table", null); iter = itemCollection.match(name); assertTrue(iter.hasNext()); iter.next(); assertTrue(iter.hasNext()); iter.next(); assertFalse(iter.hasNext()); } @Test public void testNotMatch_ItemName() { final ItemName name = new SearchName("catalog", "schema", "table", "column"); final Iterator<QueryItemInfo<NamedObject<ItemName>, ItemName>> iter = itemCollection .notMatch(name); assertTrue(iter.hasNext()); while (iter.hasNext()) { final QueryItemInfo<NamedObject<ItemName>, ItemName> qii = iter .next(); final int i = ItemName.COMPARATOR.compare(name, qii.getName()); assertTrue(i != 0); } } @Test public void testRemove() { ItemName name = new SearchName("catalog3", "schema", "table", "column"); QueryItemInfo<NamedObject<ItemName>, ItemName> qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); assertFalse(itemCollection.remove(qii)); final int size = itemCollection.size(); name = new SearchName("catalog", "schema", "table", "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>(namedObject, name, false); assertTrue(itemCollection.remove(qii)); assertEquals(size - 1, itemCollection.size()); } @Test public void testRemoveAll() { ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; final List<QueryItemInfo<NamedObject<ItemName>, ItemName>> lst = new ArrayList<QueryItemInfo<NamedObject<ItemName>, ItemName>>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { name = new SearchName(catalog, schema, table, "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); lst.add(qii); } } } final int startSize = lst.size(); final int size = itemCollection.size(); assertTrue(itemCollection.removeAll(lst)); assertEquals(size - startSize, itemCollection.size()); } @Test public void testRemoveAllWithTooMany() { ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; final List<QueryItemInfo<NamedObject<ItemName>, ItemName>> lst = new ArrayList<QueryItemInfo<NamedObject<ItemName>, ItemName>>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { name = new SearchName(catalog, schema, table, "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); lst.add(qii); } } } final int startSize = lst.size(); name = new SearchName("catalog4", "schema4", "table4", "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>(namedObject, name, false); lst.add(qii); final int size = itemCollection.size(); // true == collection was changed assertTrue(itemCollection.removeAll(lst)); assertEquals(size - startSize, itemCollection.size()); } @Test public void testRetainAll() { ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; final List<QueryItemInfo<NamedObject<ItemName>, ItemName>> lst = new ArrayList<QueryItemInfo<NamedObject<ItemName>, ItemName>>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { name = new SearchName(catalog, schema, table, "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); lst.add(qii); } } } assertTrue(itemCollection.retainAll(lst)); assertEquals(lst.size(), itemCollection.size()); } @Test public void testRetainAll_ItemName() { final List<ItemName> lst = new ArrayList<ItemName>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { lst.add(new SearchName(catalog, schema, table, "column")); } } } assertTrue(itemCollection.retainAll(lst)); assertEquals(lst.size(), itemCollection.size()); } @Test public void testRetainAll_NamedObject() { ItemName name = null; final List<NamedObject<ItemName>> lst = new ArrayList<NamedObject<ItemName>>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { name = new SearchName(catalog, schema, table, "column"); lst.add(new TestingNamedObject(name)); } } } assertTrue(itemCollection.retainAll(lst)); assertEquals(lst.size(), itemCollection.size()); } @Test public void testRetainAllWithMore() { ItemName name = null; QueryItemInfo<NamedObject<ItemName>, ItemName> qii = null; final List<QueryItemInfo<NamedObject<ItemName>, ItemName>> lst = new ArrayList<QueryItemInfo<NamedObject<ItemName>, ItemName>>(); for (final String catalog : new String[] { "catalog", "catalog2" }) { for (final String schema : new String[] { "schema", "schema2" }) { for (final String table : new String[] { "table", "table2" }) { name = new SearchName(catalog, schema, table, "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>( namedObject, name, false); lst.add(qii); } } } name = new SearchName("catalog4", "schema4", "table4", "column"); qii = new QueryItemInfo<NamedObject<ItemName>, ItemName>(namedObject, name, false); lst.add(qii); assertTrue(itemCollection.retainAll(lst)); assertEquals(lst.size() - 1, itemCollection.size()); } @Test public void testToArray() { final Object[] ary = itemCollection.toArray(); assertNotNull(ary); assertEquals(itemCollection.size(), ary.length); } @Test public void testToArrayWithType() { QueryItemInfo<?, ?>[] ary = new QueryItemInfo[itemCollection.size()]; Object[] ary2 = itemCollection.toArray(ary); assertTrue(ary2 == ary); ary = new QueryItemInfo<?, ?>[0]; ary2 = itemCollection.toArray(ary); assertTrue(ary2 != ary); assertEquals(itemCollection.size(), ary2.length); } @Test public void testFindGUID_String() { ItemName name = new SearchName("catalog", "schema", "table", "column"); QueryItemInfo<?, ?> itemInfo = itemCollection.findGUIDVar(name .getGUID()); assertNotNull(itemInfo); assertEquals(name, itemInfo.getName()); name = new SearchName("catalog", "schema", "table", "column5"); itemInfo = itemCollection.findGUIDVar(name.getGUID()); assertNull(itemInfo); } }