/*
* 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.graph.test;
import junit.framework.TestSuite ;
import org.apache.jena.JenaRuntime ;
import org.apache.jena.datatypes.RDFDatatype ;
import org.apache.jena.datatypes.TypeMapper ;
import org.apache.jena.datatypes.xsd.XSDDatatype ;
import org.apache.jena.graph.* ;
import org.apache.jena.graph.impl.LiteralLabel ;
import org.apache.jena.graph.impl.LiteralLabelFactory ;
import org.apache.jena.rdf.model.impl.Util ;
import org.apache.jena.shared.JenaException ;
import org.apache.jena.shared.PrefixMapping ;
import org.apache.jena.vocabulary.* ;
/**
Exercise nodes. Make sure that the different node types do not overlap
and that the test predicates work properly on the different node kinds.
*/
public class TestNode extends GraphTestBase
{
public TestNode( String name )
{ super( name ); }
public static TestSuite suite()
{ return new TestSuite( TestNode.class ); }
private static final String U = "http://some.domain.name/magic/spells.incant";
private static final String N = "Alice";
private static final LiteralLabel L = LiteralLabelFactory.create( "ashes are burning", "en", false );
private static final BlankNodeId A = BlankNodeId.create();
public void testBlanks()
{
assertTrue( "anonymous nodes are blank", NodeFactory.createBlankNode().isBlank() );
assertFalse( "anonymous nodes aren't literal", NodeFactory.createBlankNode().isLiteral() );
assertFalse( "anonymous nodes aren't URIs", NodeFactory.createBlankNode().isURI() );
assertFalse( "anonymous nodes aren't variables", NodeFactory.createBlankNode().isVariable() );
assertEquals( "anonymous nodes have the right id", NodeFactory.createBlankNode(A).getBlankNodeId(), A );
}
public void testLiterals()
{
assertFalse( "literal nodes aren't blank", NodeFactory.createLiteral( L ).isBlank() );
assertTrue( "literal nodes are literal", NodeFactory.createLiteral( L ).isLiteral() );
assertFalse( "literal nodes aren't variables", NodeFactory.createLiteral( L ).isVariable() );
assertFalse( "literal nodes aren't URIs", NodeFactory.createLiteral( L ).isURI() );
assertEquals( "literal nodes preserve value", NodeFactory.createLiteral( L ).getLiteral(), L );
}
public void testURIs()
{
assertFalse( "URI nodes aren't blank", NodeFactory.createURI( U ).isBlank() );
assertFalse( "URI nodes aren't literal", NodeFactory.createURI( U ).isLiteral() );
assertFalse( "URI nodes aren't variables", NodeFactory.createURI( U ).isVariable() );
assertTrue( "URI nodes are URIs", NodeFactory.createURI( U ).isURI() );
assertEquals( "URI nodes preserve URI", NodeFactory.createURI( U ).getURI(), U );
}
public void testVariables()
{
assertFalse( "variable nodes aren't blank", NodeFactory.createVariable( N ).isBlank() );
assertFalse( "variable nodes aren't literal", NodeFactory.createVariable( N ).isLiteral() );
assertFalse( "variable nodes aren't URIs", NodeFactory.createVariable( N ).isURI() );
assertTrue( "variable nodes are variable", NodeFactory.createVariable( N ).isVariable() );
assertEquals( "variable nodes keep their name", N, NodeFactory.createVariable( N ).getName() );
assertEquals( "variable nodes keep their name", N + "x", NodeFactory.createVariable( N + "x" ).getName() );
}
public void testANY()
{
assertFalse( "ANY nodes aren't blank", Node.ANY.isBlank() );
assertFalse( "ANY nodes aren't literals", Node.ANY.isLiteral() );
assertFalse( "ANY nodes aren't URIs", Node.ANY.isURI() );
assertFalse( "ANY nodes aren't variables", Node.ANY.isVariable() );
assertFalse( "ANY nodes aren't blank", Node.ANY.isBlank() );
assertFalse( "ANY nodes aren't blank", Node.ANY.isBlank() );
}
public void testNodeVariableConstructor()
{
assertEquals( NodeFactory.createVariable( "hello" ), new Node_Variable( "hello" ) );
assertEquals( NodeFactory.createVariable( "world" ), new Node_Variable( "world" ) );
assertDiffer( NodeFactory.createVariable( "hello" ), new Node_Variable( "world" ) );
assertEquals( "myName", new Node_Variable( "myName" ).getName() );
}
/**
test cases for equality: an array of (Node, String) pairs. [It's not worth
making a special class for these pairs.] The nodes are created with caching
off, to make sure that caching effects don't hide the effect of using .equals().
The strings are "equality groups": the nodes should test equal iff their
associated strings test equal.
*/
private Object [][] eqTestCases()
{
BlankNodeId id = BlankNodeId.create();
LiteralLabel L2 = LiteralLabelFactory.create( id.toString(), "", false );
LiteralLabel LLang1 = LiteralLabelFactory.createByValue( "xyz", "en", null) ;
LiteralLabel LLang2 = LiteralLabelFactory.createByValue( "xyz", "EN", null) ;
String U2 = id.toString();
String N2 = id.toString();
return new Object [][]
{
{ Node.ANY, "0" },
{ NodeFactory.createBlankNode( id ), "1" },
{ NodeFactory.createBlankNode(), "2" },
{ NodeFactory.createBlankNode( id ), "1" },
{ NodeFactory.createLiteral( L ), "3" },
{ NodeFactory.createLiteral( L2 ), "4" },
{ NodeFactory.createLiteral( L ), "3" },
{ NodeFactory.createURI( U ), "5" },
{ NodeFactory.createURI( U2 ), "6" },
{ NodeFactory.createURI( U ), "5" },
{ NodeFactory.createVariable( N ), "7" },
{ NodeFactory.createVariable( N2 ), "8" },
{ NodeFactory.createVariable( N ), "7" } ,
{ NodeFactory.createLiteral( LLang1 ), "9" },
{ NodeFactory.createLiteral( LLang2 ), "10" },
};
}
public void testNodeEquals()
{
Object [][] tests = eqTestCases();
for ( Object[] I : tests )
{
assertFalse( I[0] + " should not equal null", I[0].equals( null ) );
assertFalse( I[0] + "should not equal 'String'", I[0].equals( "String" ) );
for ( Object[] J : tests )
{
testEquality( I[1].equals( J[1] ), I[0], J[0] );
}
}
}
private void testEquality( boolean testEq, Object x, Object y )
{
String testName = getType( x ) + " " + x + " and " + getType( y ) + " " + y;
if (testEq)
assertEquals( testName + "should be equal", x, y );
else
assertDiffer( testName + " should differ", x, y );
}
private String getType( Object x )
{
String fullName = x.getClass().getName();
return fullName.substring( fullName.lastIndexOf( '.' ) + 1 );
}
public void testEquals()
{
assertDiffer( "different variables", NodeFactory.createVariable( "xx" ), NodeFactory.createVariable( "yy" ) );
assertEquals( "same vars", NodeFactory.createVariable( "aa" ), NodeFactory.createVariable( "aa" ) );
assertEquals( "same URI", NodeFactory.createURI( U ), NodeFactory.createURI( U ) );
assertEquals( "same anon", NodeFactory.createBlankNode( A ), NodeFactory.createBlankNode( A ) );
assertEquals( "same literal", NodeFactory.createLiteral( L ), NodeFactory.createLiteral( L ) );
assertFalse( "distinct URIs", NodeFactory.createURI( U ) == NodeFactory.createURI( U ) );
assertFalse( "distinct hyphens", NodeFactory.createBlankNode( A ) == NodeFactory.createBlankNode( A ) );
assertFalse( "distinct literals", NodeFactory.createLiteral( L ) == NodeFactory.createLiteral( L ) );
assertFalse( "distinct vars", NodeFactory.createVariable( "aa" ) == NodeFactory.createVariable( "aa" ) );
}
/**
test that the label of a Node can be retrieved from that Node in
a way appropriate to that Node.
*/
public void testLabels()
{
BlankNodeId id = BlankNodeId.create();
assertEquals( "get URI value", U, NodeFactory.createURI( U ).getURI() );
assertEquals( "get blank value", id, NodeFactory.createBlankNode( id ).getBlankNodeId() );
assertEquals( "get literal value", L, NodeFactory.createLiteral( L ).getLiteral() );
assertEquals( "get variable name", N, NodeFactory.createVariable( N ).getName() );
}
/**
this is where we test that using the wrong accessor on a Node gets you
an exception.
*/
public void testFailingLabels()
{
Node u = NodeFactory.createURI( U ), b = NodeFactory.createBlankNode();
Node l = NodeFactory.createLiteral( L ), v = NodeFactory.createVariable( N );
Node a = Node.ANY;
/* */
testGetURIFails( a );
testGetURIFails( b );
testGetURIFails( l );
testGetURIFails( v );
/* */
testGetLiteralFails( a );
testGetLiteralFails( u );
testGetLiteralFails( b );
testGetLiteralFails( v );
/* */
testGetNameFails( a );
testGetNameFails( u );
testGetNameFails( b );
testGetNameFails( l );
/* */
testGetBlankNodeIdFails( a );
testGetBlankNodeIdFails( u );
testGetBlankNodeIdFails( l );
testGetBlankNodeIdFails( v );
}
public void testGetBlankNodeIdFails( Node n )
{ try { n.getBlankNodeId(); fail( n.getClass() + " should fail getName()" ); } catch (UnsupportedOperationException e) {} }
public void testGetURIFails( Node n )
{ try { n.getURI(); fail( n.getClass() + " should fail getURI()" ); } catch (UnsupportedOperationException e) {} }
public void testGetNameFails( Node n )
{ try { n.getName(); fail( n.getClass() + " should fail getName()" ); } catch (UnsupportedOperationException e) {} }
public void testGetLiteralFails( Node n )
{ try { n.getLiteral(); fail( n.getClass() + " should fail getLiteral()" ); } catch (UnsupportedOperationException e) {} }
public void testGetBlankNodeLabelString()
{
Node n = NodeFactory.createBlankNode();
assertEquals( n.getBlankNodeId().getLabelString(), n.getBlankNodeLabel() );
}
public void testVariableSupport()
{
assertEquals( Node_Variable.variable( "xxx" ), Node_Variable.variable( "xxx" ) );
assertDiffer( Node_Variable.variable( "xxx" ), Node_Variable.variable( "yyy" ) );
assertEquals( Node_Variable.variable( "aaa" ), Node_Variable.variable( "aaa" ) );
assertDiffer( Node_Variable.variable( "aaa" ), Node_Variable.variable( "yyy" ) );
}
/**
Test that the create method does sensible things on null and ""
*/
public void testCreateBadString()
{
try { NodeCreateUtils.create( null ); fail( "must catch null argument" ); }
catch (NullPointerException e) {}
catch (JenaException e) {}
try { NodeCreateUtils.create( "" ); fail("must catch empty argument" ); }
catch (JenaException e) {}
}
/**
Test that anonymous nodes are created with the correct labels
*/
public void testCreateBlankNode()
{
String idA = "_xxx", idB = "_yyy";
Node a = NodeCreateUtils.create( idA ), b = NodeCreateUtils.create( idB );
assertTrue( "both must be bnodes", a.isBlank() && b.isBlank() );
assertEquals( BlankNodeId.create( idA ), a.getBlankNodeId() );
assertEquals( BlankNodeId.create( idB ), b.getBlankNodeId() );
}
public void testCreateVariable()
{
String V = "wobbly";
Node v = NodeCreateUtils.create( "?" + V );
assertTrue( "must be a variable", v.isVariable() );
assertEquals( "name must be correct", V, v.getName() );
}
public void testCreateANY()
{
assertEquals( "?? must denote ANY", Node.ANY, NodeCreateUtils.create( "??" ) );
}
public void testCreatePlainLiteralSingleQuotes()
{
Node n = NodeCreateUtils.create( "'xxx'" );
assertEquals( "xxx", n.getLiteralLexicalForm() );
assertString(n);
}
public void testCreatePlainLiteralDoubleQuotes()
{
Node n = NodeCreateUtils.create( "\"xxx\"" );
assertEquals( "xxx", n.getLiteralLexicalForm() );
assertString(n);
}
public void testCreateLiteralBackslashEscape()
{
testStringConversion( "xx\\x", "'xx\\\\x'" );
testStringConversion( "xx\\x\\y", "'xx\\\\x\\\\y'" );
testStringConversion( "\\xyz\\", "'\\\\xyz\\\\'" );
}
public void testCreateLiteralQuoteEscapes()
{
testStringConversion( "x\'y", "'x\\'y'" );
testStringConversion( "x\"y", "'x\\\"y'" );
testStringConversion( "x\'y\"z", "'x\\\'y\\\"z'" );
}
public void testCreateLiteralOtherEscapes()
{
testStringConversion( " ", "'\\s'" );
testStringConversion( "\t", "'\\t'" );
testStringConversion( "\n", "'\\n'" );
}
protected void testStringConversion(String wanted, String template) {
Node n = NodeCreateUtils.create(template) ;
assertEquals(wanted, n.getLiteralLexicalForm()) ;
assertEquals("", n.getLiteralLanguage()) ;
assertString(n) ;
}
public void testCreateLanguagedLiteralEN1()
{
Node n = NodeCreateUtils.create( "'chat'en-UK" );
assertEquals( "chat", n.getLiteralLexicalForm() );
assertLangString(n);
assertEquals( "en-UK", n.getLiteralLanguage() );
}
public void testCreateLanguagedLiteralEN2()
{
Node n1 = NodeCreateUtils.create( "'chat'en-UK" );
Node n2 = NodeCreateUtils.create( "'chat'EN-UK" );
assertTrue( n1.sameValueAs(n2) ) ;
assertFalse( n1.equals(n2) ) ;
}
public void testCreateLanguagedLiteralXY()
{
Node n = NodeCreateUtils.create( "\"chat\"xy-AB" );
assertEquals( "chat", n.getLiteralLexicalForm() );
assertEquals( "xy-AB", n.getLiteralLanguage() );
assertLangString(n) ;
}
public void testCreateTypedLiteralInteger()
{
Node n = NodeCreateUtils.create( "'42'xsd:integer" );
assertEquals( "42", n.getLiteralLexicalForm() );
assertEquals( "", n.getLiteralLanguage() );
assertEquals( expand( "xsd:integer" ), n.getLiteralDatatypeURI() );
}
public void testCreateTypedLiteralBoolean()
{
Node n = NodeCreateUtils.create( "\"true\"xsd:boolean" );
assertEquals( "true", n.getLiteralLexicalForm() );
assertEquals( "", n.getLiteralLanguage() );
assertEquals( expand( "xsd:boolean" ), n.getLiteralDatatypeURI() );
}
public void testGetPlainLiteralLexicalForm()
{
Node n = NodeCreateUtils.create( "'stuff'" );
assertEquals( "stuff", n.getLiteralLexicalForm() );
}
public void testGetNumericLiteralLexicalForm()
{
Node n = NodeCreateUtils.create( "17" );
assertEquals( "17", n.getLiteralLexicalForm() );
}
public void testTypesExpandPrefix()
{
testTypeExpandsPrefix( "rdf:spoo" );
testTypeExpandsPrefix( "rdfs:bar" );
testTypeExpandsPrefix( "owl:henry" );
testTypeExpandsPrefix( "xsd:bool" );
testTypeExpandsPrefix( "unknown:spoo" );
}
private void testTypeExpandsPrefix( String type )
{
Node n = NodeCreateUtils.create( "'stuff'" + type );
String wanted = PrefixMapping.Extended.expandPrefix( type );
assertEquals( wanted, n.getLiteralDatatypeURI() );
}
public void testCreateURI()
{
String uri = "http://www.electric-hedgehog.net/";
testCreateURI( uri );
testCreateURI( "rdf:trinket", "http://www.w3.org/1999/02/22-rdf-syntax-ns#trinket" );
testCreateURI( "rdfs:device", "http://www.w3.org/2000/01/rdf-schema#device" );
testCreateURI( "dc:creator", DC.getURI() + "creator" );
testCreateURI( "rss:something", RSS.getURI() + "something" );
testCreateURI( "vcard:TITLE", VCARD.getURI() + "TITLE" );
testCreateURI( "owl:wol", OWL.NAMESPACE + "wol" );
}
public void testCreateURIOtherMap()
{
String myNS = "eh:foo/bar#", suffix = "something";
PrefixMapping mine = PrefixMapping.Factory.create().setNsPrefix( "mine", myNS );
Node n = NodeCreateUtils.create( mine, "mine:" + suffix );
assertEquals( myNS + suffix, n.getURI() );
}
private void testCreateURI( String inOut )
{ testCreateURI( inOut, inOut ); }
private void testCreateURI( String in, String wanted )
{
String got = NodeCreateUtils.create( in ).getURI();
if (!wanted.equals( got ))
{
if (in.equals( wanted )) fail( "should preserve " + in );
else fail( "should translate " + in + " to " + wanted + " not " + got );
}
}
public void testCreatePrefixed()
{
PrefixMapping pm = PrefixMapping.Factory.create();
/* TODO Node n = */ NodeCreateUtils.create( pm, "xyz" );
}
public void testToStringWithPrefixMapping()
{
PrefixMapping pm = PrefixMapping.Factory.create();
String prefix = "spoo", ns = "abc:def/ghi#";
pm.setNsPrefix( prefix, ns );
String suffix = "bamboozle";
assertEquals( prefix + ":" + suffix, NodeCreateUtils.create( ns + suffix ).toString( pm ) );
}
public void testNodeHelp()
{
assertTrue( "node() making URIs", node( "hello" ).isURI() );
assertTrue( "node() making literals", node( "123" ).isLiteral() );
assertTrue( "node() making literals", node( "'hello'" ).isLiteral() );
assertTrue( "node() making hyphens", node( "_x" ).isBlank() );
assertTrue( "node() making variables", node( "?x" ).isVariable() );
}
public void testVisitorPatternNode()
{
NodeVisitor returnNode = new NodeVisitor()
{
@Override
public Object visitAny( Node_ANY it ) { return it; }
@Override
public Object visitBlank( Node_Blank it, BlankNodeId id ) { return it; }
@Override
public Object visitLiteral( Node_Literal it, LiteralLabel lit ) { return it; }
@Override
public Object visitURI( Node_URI it, String uri ) { return it; }
@Override
public Object visitVariable( Node_Variable it, String name ) { return it; }
};
testVisitorPatternNode( "sortOfURI", returnNode );
testVisitorPatternNode( "?variable", returnNode );
testVisitorPatternNode( "_anon", returnNode );
testVisitorPatternNode( "11", returnNode );
testVisitorPatternNode( "??", returnNode );
}
private void testVisitorPatternNode( String ns, NodeVisitor v )
{
Node n = node( ns );
assertEquals( n, n.visitWith( v ) );
}
private void visitExamples( NodeVisitor nv )
{
node( "sortOfURI" ).visitWith( nv );
node( "?variableI" ).visitWith( nv );
node( "_anon" ).visitWith( nv );
node( "11" ).visitWith( nv );
node( "??" ).visitWith( nv );
}
public void testVisitorPatternValue()
{
NodeVisitor checkValue = new NodeVisitor()
{
@Override
public Object visitAny( Node_ANY it )
{ return null; }
@Override
public Object visitBlank( Node_Blank it, BlankNodeId id )
{ assertTrue( it.getBlankNodeId() == id ); return null; }
@Override
public Object visitLiteral( Node_Literal it, LiteralLabel lit )
{ assertTrue( it.getLiteral() == lit ); return null; }
@Override
public Object visitURI( Node_URI it, String uri )
{ assertTrue( it.getURI() == uri ); return null; }
@Override
public Object visitVariable( Node_Variable it, String name )
{ assertEquals( it.getName(), name ); return null; }
};
visitExamples( checkValue );
}
/**
Test that the appropriate elements of the visitor are called exactly once;
this relies on the order of the visits in visitExamples.
*/
public void testVisitorPatternCalled()
{
final String [] strings = new String [] { "" };
NodeVisitor checkCalled = new NodeVisitor()
{
@Override
public Object visitAny( Node_ANY it )
{ strings[0] += " any"; return null; }
@Override
public Object visitBlank( Node_Blank it, BlankNodeId id )
{ strings[0] += " blank"; return null; }
@Override
public Object visitLiteral( Node_Literal it, LiteralLabel lit )
{ strings[0] += " literal"; return null; }
@Override
public Object visitURI( Node_URI it, String uri )
{ strings[0] += " uri"; return null; }
@Override
public Object visitVariable( Node_Variable it, String name )
{ strings[0] += " variable"; return null; }
};
String desired = " uri variable blank literal any";
visitExamples( checkCalled );
assertEquals( "all vists must have been made", desired, strings[0] );
}
public void testSimpleMatches()
{
assertTrue( NodeCreateUtils.create( "S").matches( NodeCreateUtils.create( "S" ) ) );
assertFalse( "", NodeCreateUtils.create( "S").matches( NodeCreateUtils.create( "T" ) ) );
assertFalse( "", NodeCreateUtils.create( "S" ).matches( null ) );
assertTrue( NodeCreateUtils.create( "_X").matches( NodeCreateUtils.create( "_X" ) ) );
assertFalse( "", NodeCreateUtils.create( "_X").matches( NodeCreateUtils.create( "_Y" ) ) );
assertFalse( "", NodeCreateUtils.create( "_X").matches( null ) );
assertTrue( NodeCreateUtils.create( "10" ).matches( NodeCreateUtils.create( "10" ) ) );
assertFalse( "", NodeCreateUtils.create( "10" ).matches( NodeCreateUtils.create( "11" ) ) );
assertFalse( "", NodeCreateUtils.create( "10" ).matches( null ) );
assertTrue( Node.ANY.matches( NodeCreateUtils.create( "S" ) ) );
assertTrue( Node.ANY.matches( NodeCreateUtils.create( "_X" ) ) );
assertTrue( Node.ANY.matches( NodeCreateUtils.create( "10" ) ) );
assertFalse( "", Node.ANY.matches( null ) );
}
public void testDataMatches()
{
TypeMapper tm = TypeMapper.getInstance();
RDFDatatype dt1 = tm.getTypeByValue( new Integer( 10 ) );
RDFDatatype dt2 = tm.getTypeByValue( new Short( (short) 10 ) );
Node a = NodeFactory.createLiteral( "10", dt1 );
Node b = NodeFactory.createLiteral( "10", dt2 );
assertDiffer( "types must make a difference", a, b );
assertTrue( "A and B must express the same value", a.sameValueAs( b ) );
assertTrue( "matching literals must respect sameValueAs", a.matches( b ) );
}
public void testLiteralToString()
{
TypeMapper tm = TypeMapper.getInstance();
RDFDatatype dtInt = tm.getTypeByValue( new Integer( 10 ) );
Node plain = NodeFactory.createLiteral( "rhubarb", "");
Node english = NodeFactory.createLiteral( "eccentric", "en_UK");
Node typed = NodeFactory.createLiteral( "10", dtInt );
assertEquals( "\"rhubarb\"", plain.toString() );
assertEquals( "rhubarb", plain.toString( false ) );
assertEquals( "\"eccentric\"@en_UK", english.toString() );
assertEquals( "10^^http://www.w3.org/2001/XMLSchema#int", typed.toString( false ) );
}
public void testGetIndexingValueURI()
{
Node u = NodeCreateUtils.create( "eh:/telephone" );
assertSame( u, u.getIndexingValue() );
}
public void testGetIndexingValueBlank()
{
Node b = NodeCreateUtils.create( "_television" );
assertSame( b, b.getIndexingValue() );
}
public void testGetIndexingValuePlainString()
{ testIndexingValueLiteral( NodeCreateUtils.create( "'literally'" ) ); }
public void testGetIndexingValueLanguagedString()
{ testIndexingValueLiteral( NodeCreateUtils.create( "'chat'fr" ) ); }
public void testGetIndexingValueXSDString()
{ testIndexingValueLiteral( NodeCreateUtils.create( "'string'xsd:string" ) ); }
private void testIndexingValueLiteral( Node s )
{ assertEquals( s.getLiteral().getIndexingValue(), s.getIndexingValue() ); }
public void testGetLiteralValuePlainString()
{
Node s = NodeCreateUtils.create( "'aString'" );
assertSame( s.getLiteral().getValue(), s.getLiteralValue() );
}
public void testGetLiteralDatatypePlainString()
{
assertString(NodeCreateUtils.create( "'plain'" )) ;
}
public void testLiteralIsXML()
{
assertFalse( NodeCreateUtils.create( "'notXML'" ).getLiteralIsXML() );
assertFalse( NodeCreateUtils.create( "17" ).getLiteralIsXML() );
assertFalse( NodeCreateUtils.create( "'joke'xsd:Joke" ).getLiteralIsXML() );
assertTrue( NodeFactory.createLiteral( "lit", "lang", true ).getLiteralIsXML() );
assertFalse( NodeFactory.createLiteral( "lit", "lang", false ).getLiteralIsXML() );
}
public void testConcrete()
{
assertTrue( NodeCreateUtils.create( "S" ).isConcrete() );
assertTrue( NodeCreateUtils.create( "_P" ).isConcrete() );
assertTrue( NodeCreateUtils.create( "11" ).isConcrete() );
assertTrue( NodeCreateUtils.create( "'hello'" ).isConcrete() );
assertFalse( NodeCreateUtils.create( "??" ).isConcrete() );
assertFalse( NodeCreateUtils.create( "?x" ).isConcrete() );
}
static String [] someURIs = new String []
{
"http://domainy.thing/stuff/henry",
"http://whatever.com/stingy-beast/bee",
"ftp://erewhon/12345",
"potatoe:rhubarb"
};
/**
test that URI nodes have namespace/localname splits which are consistent
with Util.splitNamepace.
*/
public void testNamespace()
{
for ( String uri : someURIs )
{
int split = Util.splitNamespaceXML( uri );
Node n = NodeCreateUtils.create( uri );
assertEquals( "check namespace", uri.substring( 0, split ), n.getNameSpace() );
assertEquals( "check localname", uri.substring( split ), n.getLocalName() );
}
}
protected static String [] someNodes =
{
"42",
"'hello'",
"_anon",
"'robotic'tick",
"'teriffic'abc:def"
};
public void testHasURI()
{
for ( String someURI : someURIs )
{
testHasURI( someURI );
}
for ( String someNode : someNodes )
{
testHasURI( someNode );
}
}
protected void testHasURI( String uri )
{
Node n = NodeCreateUtils.create( uri );
assertTrue( uri, !n.isURI() || n.hasURI( uri ) );
assertFalse( uri, n.hasURI( uri + "x" ) );
}
private static void assertString(Node n) {
RDFDatatype dt = n.getLiteralDatatype() ;
assertEquals("", n.getLiteralLanguage() ) ;
if ( JenaRuntime.isRDF11 )
assertEquals(XSDDatatype.XSDstring, dt) ;
else
assertEquals(null, dt) ;
}
private static void assertLangString(Node n) {
RDFDatatype dt = n.getLiteralDatatype() ;
assertDiffer("", n.getLiteralLanguage() ) ; // "" is not legal.
if ( JenaRuntime.isRDF11 )
assertEquals(RDF.dtLangString, dt) ;
else
assertEquals(null, dt) ;
}
/**
Answer the string <code>s</code> prefix-expanded using the built-in
PrefixMapping.Extended.
*/
private String expand( String s )
{ return PrefixMapping.Extended.expandPrefix( s ); }
}