/* * 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.* ; import org.apache.jena.rdf.model.test.helpers.TestingModelFactory ; import org.apache.jena.vocabulary.RDF ; import org.junit.Assert; public class TestIterators extends AbstractModelTestBase { int num = 5; Resource subject[] = new Resource[num]; Property predicate[] = new Property[num]; Statement stmts[] = new Statement[num * num]; String suri = "http://aldabaran/test6/s"; String puri = "http://aldabaran/test6/"; public TestIterators( final TestingModelFactory modelFactory, final String name ) { super(modelFactory, name); } @Override public void setUp() { super.setUp(); for (int i = 0; i < num; i++) { subject[i] = model.createResource(suri + Integer.toString(i)); predicate[i] = model .createProperty(puri + Integer.toString(i), "p"); } for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { final Statement stmt = model.createStatement(subject[i], predicate[j], model.createTypedLiteral((i * num) + j)); model.add(stmt); model.add(stmt); stmts[(i * num) + j] = stmt; } } } /** * bug detected in StatementIteratorImpl - next does not * advance current, so remove doesn't work with next; * this test should expose the bug. */ public void testIteratorRemove() { final StmtIterator it = model.listStatements(); try { while (it.hasNext()) { it.next(); it.remove(); } Assert.assertEquals("Remove failed", 0, model.size()); } finally { it.close(); } } public void testListObjects() { int count = 0; NodeIterator iter; iter = model.listObjects(); while (iter.hasNext()) { iter.nextNode(); count++; } Assert.assertEquals(num * num, count); } public void testNamespaceIterator() { final boolean predf[] = new boolean[num]; for (int i = 0; i < num; i++) { predf[i] = false; } final NsIterator nIter = model.listNameSpaces(); while (nIter.hasNext()) { final String ns = nIter.nextNs(); boolean found = false; for (int i = 0; i < num; i++) { if (ns.equals(predicate[i].getNameSpace())) { found = true; Assert.assertFalse("Should not have found " + predicate[i] + " already.", predf[i]); predf[i] = true; } } Assert.assertTrue("Should have found " + ns, found); } for (int i = 0; i < num; i++) { Assert.assertTrue("Should have found " + predicate[i], predf[i]); } } public void testObjectsOfProperty() { NodeIterator iter; final boolean[] object = new boolean[num * num]; for (int i = 0; i < (num * num); i++) { object[i] = false; } iter = model.listObjectsOfProperty(predicate[0]); while (iter.hasNext()) { final Literal l = (Literal) iter.nextNode(); final int i = l.getInt(); object[i] = true; } for (int i = 0; i < (num * num); i++) { if ((i % num) == 0) { Assert.assertTrue(object[i]); } else { Assert.assertFalse(object[i]); } } } public void testObjectsOfPropertyAndValue() { NodeIterator iter; final boolean[] object = new boolean[num]; final Resource subj = model.createResource(); for (int i = 0; i < num; i++) { model.addLiteral(subj, RDF.value, i); object[i] = false; } iter = model.listObjectsOfProperty(subj, RDF.value); while (iter.hasNext()) { final int i = ((Literal) iter.nextNode()).getInt(); object[i] = true; } for (int i = 0; i < (num); i++) { Assert.assertTrue(object[i]); } } public void testResourceIterator() { final boolean subjf[] = new boolean[num]; for (int i = 0; i < num; i++) { subjf[i] = false; } boolean found = false; final ResIterator rIter = model.listSubjects(); while (rIter.hasNext()) { final Resource subj = rIter.nextResource(); found = false; for (int i = 0; i < num; i++) { if (subj.equals(subject[i])) { found = true; Assert.assertFalse("Should not have found " + subject[i] + " already.", subjf[i]); subjf[i] = true; } } Assert.assertTrue("Should have found " + subj, found); } for (int i = 0; i < num; i++) { Assert.assertTrue("Should have found " + subject[i], subjf[i]); } // System.err.println( // "WARNING: listNameSpace testing wonky for the moment" ); // NsIterator nIter = model.listNameSpaces(); // HashSet fromIterator = new HashSet(); // HashSet fromPredicates = new HashSet(); // while (nIter.hasNext()) fromIterator.add( nIter.next() ); // for (int i = 0; i < num; i += 1) fromPredicates.add( // predicate[i].getNameSpace() ); // if (fromIterator.equals( fromPredicates )) // {} // else // { // System.err.println( "| oh dear." ); // System.err.println( "| predicate namespaces: " + fromPredicates ); // System.err.println( "| iterator namespaces: " + fromIterator ); // } } public void testStatementIter() { final int numStmts = num * num; final boolean stmtf[] = new boolean[numStmts]; Assert.assertEquals(numStmts, model.size()); for (int i = 0; i < numStmts; i++) { stmtf[i] = false; } final StmtIterator sIter = model.listStatements(); while (sIter.hasNext()) { final Statement stmt = sIter.nextStatement(); boolean found = false; for (int i = 0; i < numStmts; i++) { if (stmt.equals(stmts[i])) { found = true; Assert.assertFalse("Should not have found " + stmts[i] + " already.", stmtf[i]); stmtf[i] = true; } } Assert.assertTrue("Should have found " + stmt, found); } for (int i = 0; i < numStmts; i++) { Assert.assertTrue("Should have found " + stmts[i], stmtf[i]); } } // SEE the tests in model.test: TestReifiedStatements and // TestStatementResources // { // System.err.println( // "WARNING: reification testing suppressed for the moment" ); // /* Reification is not working properly // // for (int i=0; i<num; i++) { // stmtf[i] = false; // model.add(stmts[i], predicate[i], i); // } // sIter = model.listReifiedStatements(); // while (sIter.hasNext()) { // Statement stmt = sIter.next(); // found = false; // for (int i=0; i<num; i++) { // if (stmt.equals(stmts[i])) { // found = true; // if (stmtf[i]) error(test, 200); // stmtf[i] = true; // } // } // if (! found) error(test, 210); // } // for (int i=0; i<num; i++) { // if (! stmtf[i]) error(test, 220+i); // } */ // } }