/**
* Copyright (c) 2002-2010 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.junit.Test;
import org.neo4j.graphdb.Node;
/**
* Tests the {@link PropertySet} class.
* @author mattias
*/
public class TestPropertySet extends Neo4jTest
{
/**
* Tests some general use of the {@link PropertySet} class.
*/
@Test
public void testSome()
{
Node node = graphDb().createNode();
Collection<Integer> set = new TestSet( 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 ] );
node.delete();
}
private static class TestSet extends PropertySet<Integer>
{
TestSet( Node node, String key )
{
super( node, key, "," );
}
@Override
protected String itemToString( Object item )
{
return item.toString();
}
@Override
protected Integer stringToItem( String string )
{
return new Integer( string );
}
}
}