package org.neo4j.util; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Transaction; import org.neo4j.util.PropertySet; /** * Tests the {@link PropertySet} class. * @author mattias */ public class TestPropertySet extends Neo4jTest { /** * Tests some general use of the {@link PropertySet} class. */ public void testSome() { Node node = null; Transaction tx = graphDb().beginTx(); try { node = graphDb().createNode(); tx.success(); } finally { tx.finish(); } Collection<Integer> set = new TestSet( graphDb(), node, "ids" ); Integer item = 10; Integer item2 = 21211; assertTrue( set.isEmpty() ); assertEquals( 0, set.size() ); set.clear(); assertTrue( set.isEmpty() ); assertEquals( 0, set.size() ); assertTrue( !set.contains( item ) ); assertTrue( !set.contains( item2 ) ); assertEquals( 0, set.toArray().length ); assertTrue( set.add( item ) ); assertTrue( !set.isEmpty() ); assertEquals( 1, set.size() ); assertTrue( set.contains( item ) ); assertTrue( !set.contains( item2 ) ); Iterator<Integer> iterator = set.iterator(); assertTrue( iterator.hasNext() ); assertEquals( item, iterator.next() ); assertTrue( !iterator.hasNext() ); assertTrue( !set.add( item ) ); assertTrue( !set.remove( item2 ) ); assertEquals( 1, set.toArray().length ); Integer[] array = set.toArray( new Integer[ set.size() ] ); assertEquals( item, array[ 0 ] ); assertEquals( 1, array.length ); assertTrue( set.remove( item ) ); assertTrue( set.isEmpty() ); assertEquals( 0, set.size() ); set.clear(); assertEquals( 0, set.size() ); assertTrue( set.isEmpty() ); set.add( item ); assertTrue( !set.isEmpty() ); set.add( item2 ); assertTrue( !set.isEmpty() ); assertTrue( set.contains( item ) ); assertTrue( set.contains( item2 ) ); assertEquals( 2, set.size() ); set.add( item ); assertEquals( 2, set.size() ); set.remove( item ); assertTrue( !set.contains( item ) ); assertEquals( 1, set.size() ); set.remove( item ); assertEquals( 1, set.size() ); set.remove( item2 ); assertTrue( !set.contains( item2 ) ); assertEquals( 0, set.size() ); set.add( item ); set.add( item2 ); iterator = set.iterator(); assertTrue( iterator.hasNext() ); iterator.next(); assertTrue( iterator.hasNext() ); iterator.next(); assertTrue( !iterator.hasNext() ); set.clear(); Collection<Object> items = new ArrayList<Object>(); assertTrue( !set.retainAll( items ) ); set.add( item ); set.add( item2 ); items.add( item ); items.add( item2 ); assertTrue( !set.retainAll( items ) ); items.add( "kdjfgdkjk" ); assertTrue( !set.retainAll( items ) ); items.clear(); items.add( item2 ); assertTrue( set.retainAll( items ) ); assertEquals( 1, set.size() ); assertEquals( 1, set.toArray().length ); assertEquals( item2, set.toArray( new Integer[ 1 ] )[ 0 ] ); tx = graphDb().beginTx(); try { node.delete(); tx.success(); } finally { tx.finish(); } } private static class TestSet extends PropertySet<Integer> { TestSet( GraphDatabaseService graphDb, Node node, String key ) { super( graphDb, node, key, "," ); } @Override protected String itemToString( Object item ) { return item.toString(); } @Override protected Integer stringToItem( String string ) { return new Integer( string ); } } }