/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.rdf.model.test;
import org.apache.jena.rdf.model.Container ;
import org.apache.jena.rdf.model.Literal ;
import org.apache.jena.rdf.model.NodeIterator ;
import org.apache.jena.rdf.model.Resource ;
import org.apache.jena.rdf.model.test.helpers.TestingModelFactory ;
import org.apache.jena.vocabulary.RDF ;
import org.junit.Assert;
public abstract class AbstractContainerMethods extends AbstractModelTestBase
{
protected Resource resource;
public AbstractContainerMethods( final TestingModelFactory modelFactory,
final String name )
{
super(modelFactory, name);
}
protected abstract Container createContainer();
protected abstract Resource getContainerType();
@Override
public void setUp()
{
super.setUp();
resource = model.createResource();
}
public void testContainerOfIntegers()
{
final int num = 10;
final Container c = createContainer();
for (int i = 0; i < num; i += 1)
{
c.add(i);
}
Assert.assertEquals(num, c.size());
final NodeIterator it = c.iterator();
for (int i = 0; i < num; i += 1)
{
Assert.assertEquals(i, ((Literal) it.nextNode()).getInt());
}
Assert.assertFalse(it.hasNext());
}
public void testContainerOfIntegersRemovingA()
{
final boolean[] retain = { true, true, true, false, false, false,
false, false, true, true };
testContainerOfIntegersWithRemoving(retain);
}
public void testContainerOfIntegersRemovingB()
{
final boolean[] retain = { false, true, true, false, false, false,
false, false, true, false };
testContainerOfIntegersWithRemoving(retain);
}
public void testContainerOfIntegersRemovingC()
{
final boolean[] retain = { false, false, false, false, false, false,
false, false, false, false };
testContainerOfIntegersWithRemoving(retain);
}
protected void testContainerOfIntegersWithRemoving( final boolean[] retain )
{
final int num = retain.length;
final boolean[] found = new boolean[num];
final Container c = createContainer();
for (int i = 0; i < num; i += 1)
{
c.add(i);
}
final NodeIterator it = c.iterator();
for ( boolean aRetain : retain )
{
it.nextNode();
if ( aRetain == false )
{
it.remove();
}
}
final NodeIterator s = c.iterator();
while (s.hasNext())
{
final int v = ((Literal) s.nextNode()).getInt();
Assert.assertFalse(found[v]);
found[v] = true;
}
for (int i = 0; i < num; i += 1)
{
Assert.assertEquals("element " + i, retain[i], found[i]);
}
}
public void testEmptyContainer()
{
final Container c = createContainer();
Assert.assertTrue(model.contains(c, RDF.type, getContainerType()));
Assert.assertEquals(0, c.size());
Assert.assertFalse(c.contains(AbstractModelTestBase.tvBoolean));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvByte));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvShort));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvInt));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvLong));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvChar));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvFloat));
Assert.assertFalse(c.contains(AbstractModelTestBase.tvString));
}
public void testFillingContainer()
{
final Container c = createContainer();
final String lang = "fr";
final Literal tvLiteral = model.createLiteral("test 12 string 2");
// Resource tvResObj = model.createResource( new ResTestObjF() );
c.add(AbstractModelTestBase.tvBoolean);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvBoolean));
c.add(AbstractModelTestBase.tvByte);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvByte));
c.add(AbstractModelTestBase.tvShort);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvShort));
c.add(AbstractModelTestBase.tvInt);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvInt));
c.add(AbstractModelTestBase.tvLong);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvLong));
c.add(AbstractModelTestBase.tvChar);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvChar));
c.add(AbstractModelTestBase.tvFloat);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvFloat));
c.add(AbstractModelTestBase.tvString);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvString));
c.add(AbstractModelTestBase.tvString, lang);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvString, lang));
c.add(tvLiteral);
Assert.assertTrue(c.contains(tvLiteral));
// c.add( tvResObj ); assertTrue( c.contains( tvResObj ) );
c.add(AbstractModelTestBase.tvLitObj);
Assert.assertTrue(c.contains(AbstractModelTestBase.tvLitObj));
Assert.assertEquals(11, c.size());
}
}