📄 testlist.java
字号:
/*****************************************************************************
* Source code information
* -----------------------
* Original author Ian Dickinson, HP Labs Bristol
* Author email Ian.Dickinson@hp.com
* Package Jena 2
* Web http://sourceforge.net/projects/jena/
* Created 24 Jan 2003
* Filename $RCSfile: TestList.java,v $
* Revision $Revision: 1.13 $
* Release status $State: Exp $
*
* Last modified on $Date: 2007/01/02 11:48:26 $
* by $Author: andy_seaborne $
*
* (c) Copyright 2003, 2004, 2005, 2006, 2007 Hewlett-Packard Development Company, LP
* (see footer for full conditions)
*****************************************************************************/
// Package
///////////////
package com.hp.hpl.jena.rdf.model.test;
// Imports
///////////////
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import junit.framework.*;
import com.hp.hpl.jena.enhanced.*;
import com.hp.hpl.jena.enhanced.EnhGraph;
import com.hp.hpl.jena.graph.Graph;
import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.rdf.model.impl.RDFListImpl;
import com.hp.hpl.jena.shared.JenaException;
import com.hp.hpl.jena.util.iterator.Map1;
import com.hp.hpl.jena.vocabulary.*;
/**
* <p>
* A collection of unit tests for the standard implementation of
* {@link RDFList}.
* </p>
*
* @author Ian Dickinson, HP Labs
* (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
* @version CVS $Id: TestList.java,v 1.13 2007/01/02 11:48:26 andy_seaborne Exp $
*/
public class TestList
extends TestCase
{
// Constants
//////////////////////////////////
public static final String NS = "uri:urn:x-rdf:test#";
// Static variables
//////////////////////////////////
// Instance variables
//////////////////////////////////
// Constructors
//////////////////////////////////
public TestList( String name ) {
super( name );
}
// External signature methods
//////////////////////////////////
public static TestSuite suite() {
TestSuite s = new TestSuite( "TestList" );
for (int i = 0; i <= 5; i++) {
s.addTest( new CountTest( i ) );
s.addTest( new TailTest( i ) );
}
s.addTest( new ValidityTest() );
s.addTest( new HeadTest() );
s.addTest( new SetHeadTest() );
s.addTest( new SetTailTest() );
s.addTest( new ConsTest() );
s.addTest( new AddTest() );
s.addTest( new TestListGet() );
s.addTest( new ReplaceTest() );
s.addTest( new IndexTest1() );
s.addTest( new IndexTest2() );
s.addTest( new AppendTest() );
s.addTest( new ConcatenateTest() );
s.addTest( new ConcatenateTest2() );
s.addTest( new ApplyTest() );
s.addTest( new ReduceTest() );
s.addTest( new RemoveTest() );
s.addTest( new Map1Test() );
s.addTest( new ListEqualsTest() );
s.addTest( new ListSubclassTest() );
s.addTest( new UserDefinedListTest() );
return s;
}
// Internal implementation methods
//////////////////////////////////
/** Test that an iterator delivers the expected values */
protected static void iteratorTest( Iterator i, Object[] expected ) {
Log logger = LogFactory.getLog( TestList.class );
List expList = new ArrayList();
for (int j = 0; j < expected.length; j++) {
expList.add( expected[j] );
}
while (i.hasNext()) {
Object next = i.next();
// debugging
if (!expList.contains( next )) {
logger.debug( "TestList - Unexpected iterator result: " + next );
}
assertTrue( "Value " + next + " was not expected as a result from this iterator ", expList.contains( next ) );
assertTrue( "Value " + next + " was not removed from the list ", expList.remove( next ) );
}
if (!(expList.size() == 0)) {
logger.debug( "TestList - Expected iterator results not found" );
for (Iterator j = expList.iterator(); j.hasNext(); ) {
logger.debug( "TestList - missing: " + j.next() );
}
}
assertEquals( "There were expected elements from the iterator that were not found", 0, expList.size() );
}
//==============================================================================
// Inner class definitions
//==============================================================================
protected static class ListTest extends TestCase {
public ListTest( String n ) {super(n);}
protected void checkValid( String testName, RDFList l, boolean validExpected ) {
l.setStrict( true );
boolean valid = l.isValid();
// for debugging ... String s = l.getValidityErrorMessage();
assertEquals( "Validity test " + testName + " returned wrong isValid() result", validExpected, valid );
}
protected RDFList getListRoot( Model m ) {
Resource root = m.getResource( NS + "root" );
assertNotNull( "Root resource should not be null", root );
Resource listHead = root.getRequiredProperty( m.getProperty( NS + "p" ) ).getResource();
RDFList l = (RDFList) listHead.as( RDFList.class );
assertNotNull( "as(RDFList) should not return null for root", l );
return l;
}
}
protected static class CountTest extends ListTest {
protected int i;
public CountTest( int i ) {
super( "CountTest" );
this.i = i;
}
public void runTest() {
Model m = ModelFactory.createDefaultModel();
m.read( "file:testing/ontology/list" + i + ".rdf" );
RDFList l0 = getListRoot( m );
assertEquals( "List size should be " + i, i, l0.size() );
}
}
protected static class ValidityTest extends ListTest {
public ValidityTest() {
super( "ValidityTest");
}
public void runTest() {
Model m = ModelFactory.createDefaultModel();
Resource root = m.createResource( NS + "root" );
Property p = m.createProperty( NS, "p");
// a list of the nil object, but not typed
Resource nil = RDF.nil;
m.add( root, p, nil );
RDFList l0 = getListRoot( m );
checkValid( "valid1", l0, true );
// add another node to the head of the list
Resource badList = m.createResource();
m.getRequiredProperty( root, p ).remove();
m.add( root, p, badList );
m.add( badList, RDF.type, RDF.List );
RDFList l1 = getListRoot( m );
checkValid( "valid2", l1, false );
//checkValid( "valid3", l1, false );
m.add( badList, RDF.first, "fred" );
checkValid( "valid4", l1, false );
m.add( badList, RDF.rest, nil );
checkValid( "valid5", l1, true );
}
}
protected static class HeadTest extends ListTest {
public HeadTest() {super( "HeadTest");}
public void runTest() {
Model m = ModelFactory.createDefaultModel();
m.read( "file:testing/ontology/list5.rdf" );
RDFList l0 = getListRoot( m );
String[] names = {"a", "b", "c", "d", "e"};
for (int i = 0; i < names.length; i++) {
assertEquals( "head of list has incorrect URI", NS + names[i], ((Resource) l0.getHead()).getURI() );
l0 = l0.getTail();
}
}
}
protected static class TailTest extends ListTest {
protected int i;
public TailTest( int i ) {
super( "TailTest" );
this.i = i;
}
public void runTest() {
Model m = ModelFactory.createDefaultModel();
m.read( "file:testing/ontology/list" + i + ".rdf" );
RDFList l0 = getListRoot( m );
// get the tail n times, should be nil at the end
for (int j = 0; j < i; j++) {
l0 = l0.getTail();
}
assertTrue( "Should have reached the end of the list after " + i + " getTail()'s", l0.isEmpty() );
}
}
protected static class SetHeadTest extends ListTest {
public SetHeadTest() {super( "SetHeadTest");}
public void runTest() {
Model m = ModelFactory.createDefaultModel();
Resource root = m.createResource( NS + "root" );
Property p = m.createProperty( NS, "p");
// a list of the nil object, but not typed
Resource nil = RDF.nil;
m.add( nil, RDF.type, RDF.List );
Resource list = m.createResource();
m.add( list, RDF.type, RDF.List );
m.add( list, RDF.first, "fred" );
m.add( list, RDF.rest, nil );
m.add( root, p, list );
RDFList l1 = getListRoot( m );
checkValid( "sethead1", l1, true );
assertEquals( "List head should be 'fred'", "fred", ((Literal) l1.getHead()).getString() );
l1.setHead( m.createLiteral( 42 ) );
checkValid( "sethead2", l1, true );
assertEquals( "List head should be '42'", 42, ((Literal) l1.getHead()).getInt() );
}
}
protected static class SetTailTest extends ListTest {
public SetTailTest() {super( "SetTailTest");}
public void runTest() {
Model m = ModelFactory.createDefaultModel();
Resource root = m.createResource( NS + "root" );
Property p = m.createProperty( NS, "p");
Resource nil = RDF.nil;
m.add( nil, RDF.type, RDF.List );
Resource list0 = m.createResource();
m.add( list0, RDF.type, RDF.List );
m.add( list0, RDF.first, "fred" );
m.add( list0, RDF.rest, nil );
m.add( root, p, list0 );
RDFList l1 = getListRoot( m );
checkValid( "settail1", l1, true );
Resource list1 = m.createResource();
m.add( list1, RDF.type, RDF.List );
m.add( list1, RDF.first, "george" );
m.add( list1, RDF.rest, nil );
RDFList l2 = (RDFList) list1.as( RDFList.class );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -