/**
* 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.riot.thrift;
import org.apache.jena.JenaRuntime ;
import org.apache.jena.atlas.junit.BaseTest ;
import org.apache.jena.graph.Node ;
import org.apache.jena.graph.NodeFactory ;
import org.apache.jena.rdf.model.impl.Util ;
import org.apache.jena.riot.system.PrefixMap ;
import org.apache.jena.riot.system.PrefixMapFactory ;
import org.apache.jena.riot.thrift.wire.RDF_BNode ;
import org.apache.jena.riot.thrift.wire.RDF_IRI ;
import org.apache.jena.riot.thrift.wire.RDF_Literal ;
import org.apache.jena.riot.thrift.wire.RDF_Term ;
import org.apache.jena.sparql.sse.SSE ;
import org.apache.jena.vocabulary.RDF ;
import org.apache.jena.vocabulary.RDFS ;
import org.apache.jena.vocabulary.XSD ;
import org.junit.Test ;
public class TestThriftTerm extends BaseTest {
static PrefixMap prefixMap = PrefixMapFactory.create() ;
static {
prefixMap.add("rdf", RDF.getURI()) ;
prefixMap.add("xsd", XSD.getURI()) ;
prefixMap.add("rdfs", RDFS.getURI()) ;
prefixMap.add("ex", "http://example.org/") ;
prefixMap.add("", "http://example/") ;
prefixMap.add("ns", "http://namespace/ns#") ;
}
// Terms
@Test public void term_uri_01() {
testTerm("<http://hostname/>") ;
}
@Test public void term_uri_02() {
RDF_Term rt = testTerm("<http://example/>") ;
assertTrue(rt.isSetPrefixName()) ;
assertEquals(rt.getPrefixName().prefix, "") ;
assertEquals(rt.getPrefixName().localName, "") ;
}
@Test public void term_uri_03() {
RDF_Term rt = testTerm("<http://namespace/ns#foobar>") ;
assertTrue(rt.isSetPrefixName()) ;
assertEquals(rt.getPrefixName().prefix, "ns") ;
assertEquals(rt.getPrefixName().localName, "foobar") ;
}
@Test public void term_uri_04() {
RDF_Term rt = testTerm("rdf:type") ;
assertTrue(rt.isSetPrefixName()) ;
assertEquals(rt.getPrefixName().prefix, "rdf") ;
assertEquals(rt.getPrefixName().localName, "type") ;
}
@Test public void term_literal_01() {
RDF_Term rt = testTerm("'foo'") ;
assertFalse(rt.getLiteral().isSetDatatype()) ;
assertFalse(rt.getLiteral().isSetDtPrefix()) ;
assertFalse(rt.getLiteral().isSetLangtag()) ;
}
@Test public void term_literal_02() {
RDF_Term rt = testTerm("'foo'@en") ;
assertFalse(rt.getLiteral().isSetDatatype()) ;
assertFalse(rt.getLiteral().isSetDtPrefix()) ;
assertTrue(rt.getLiteral().isSetLangtag()) ;
}
@Test public void term_literal_03() {
RDF_Term rt = testTerm("123") ;
assertFalse(rt.getLiteral().isSetDatatype()) ;
assertTrue(rt.getLiteral().isSetDtPrefix()) ;
assertEquals(rt.getLiteral().getDtPrefix().getPrefix(), "xsd") ;
assertEquals(rt.getLiteral().getDtPrefix().getLocalName(), "integer") ;
}
@Test public void term_literal_04() {
RDF_Term rt = testTerm("'foo'^^<http://dataype/>") ;
assertTrue(rt.getLiteral().isSetDatatype()) ;
assertFalse(rt.getLiteral().isSetDtPrefix()) ;
assertEquals(rt.getLiteral().getDatatype(), "http://dataype/") ;
}
@Test public void term_literal_05() {
RDF_Term rt = testTerm("'foo'^^<http://example/>") ;
assertFalse(rt.getLiteral().isSetDatatype()) ;
assertTrue(rt.getLiteral().isSetDtPrefix()) ;
assertEquals(rt.getLiteral().getDtPrefix().getPrefix(), "") ;
assertEquals(rt.getLiteral().getDtPrefix().getLocalName(), "") ;
}
@Test public void term_var_01() {
testTerm("?var") ;
}
@Test public void term_bnode_01() {
Node n = SSE.parseNode("_:blanknode") ;
RDF_Term rt = testTerm(n) ;
assertEquals(rt.getBnode().getLabel(), n.getBlankNodeLabel()) ;
}
@Test public void term_bnode_02() {
String label = "abcdefghijklmn" ;
Node n = NodeFactory.createBlankNode("abcdefghijklmn") ;
RDF_Term rt = testTerm(n) ;
assertTrue(rt.isSetBnode()) ;
assertEquals("abcdefghijklmn", rt.getBnode().getLabel()) ;
}
@Test public void term_any_1() {
RDF_Term rt = testTerm(Node.ANY) ;
assertTrue(rt.isSetAny()) ;
}
@Test public void term_value_01() {
RDF_Term rt = testTermValue("123") ;
assertTrue(rt.isSetValInteger()) ;
assertEquals(123, rt.getValInteger()) ;
}
@Test public void term_value_02() {
RDF_Term rt = testTermValue("'123'^^xsd:integer") ;
assertTrue(rt.isSetValInteger()) ;
assertEquals(123, rt.getValInteger()) ;
}
@Test public void term_value_03() {
RDF_Term rt = testTermValue("'123'^^xsd:long") ;
assertTrue(rt.isSetValInteger()) ;
assertEquals(123, rt.getValInteger()) ;
}
@Test public void term_value_04() {
RDF_Term rt = testTermValue("'123'^^xsd:int") ;
assertTrue(rt.isSetValInteger()) ;
assertEquals(123, rt.getValInteger()) ;
}
@Test public void term_value_05() {
RDF_Term rt = testTermValue("'123'^^xsd:short") ;
assertTrue(rt.isSetValInteger()) ;
assertEquals(123, rt.getValInteger()) ;
}
@Test public void term_value_06() {
RDF_Term rt = testTermValue("'123'^^xsd:byte") ;
assertTrue(rt.isSetValInteger()) ;
assertEquals(123, rt.getValInteger()) ;
}
@Test public void term_value_10() {
RDF_Term rt = testTermValue("123.6") ;
assertTrue(rt.isSetValDecimal()) ;
assertEquals(1236, rt.getValDecimal().getValue()) ;
assertEquals(1, rt.getValDecimal().getScale()) ;
}
@Test public void term_value_11() {
RDF_Term rt = testTermValue("0.005") ;
assertTrue(rt.isSetValDecimal()) ;
assertEquals(5, rt.getValDecimal().getValue()) ;
assertEquals(3, rt.getValDecimal().getScale()) ;
}
@Test public void term_value_12() {
RDF_Term rt = testTermValue("50.0") ;
assertTrue(rt.isSetValDecimal()) ;
assertEquals(500, rt.getValDecimal().getValue()) ;
assertEquals(1, rt.getValDecimal().getScale()) ;
}
@Test public void term_value_13() {
RDF_Term rt = testTermValue("50.05") ;
assertTrue(rt.isSetValDecimal()) ;
assertEquals(5005, rt.getValDecimal().getValue()) ;
assertEquals(2, rt.getValDecimal().getScale()) ;
}
@Test public void term_value_20() {
RDF_Term rt = testTermValue("50e6") ;
assertTrue(rt.isSetValDouble()) ;
assertEquals(50e6, rt.getValDouble(), 0.001) ;
}
@Test public void term_value_21() {
RDF_Term rt = testTermValue("50e-6") ;
assertTrue(rt.isSetValDouble()) ;
assertEquals(50e-6, rt.getValDouble(), 0.001e6) ;
}
private RDF_Term testTermValue(String str) {
RDF_Term rt = testTerm(SSE.parseNode(str), prefixMap, true) ;
return rt ;
}
private RDF_Term testTerm(String str) {
RDF_Term rt = testTerm(SSE.parseNode(str), prefixMap, false) ;
return rt ;
}
private RDF_Term testTerm(Node node) {
return testTerm(node, null, false) ;
}
private RDF_Term testTerm(Node node, PrefixMap pmap, boolean asValue) {
RDF_Term rt = ThriftConvert.convert(node, pmap, asValue) ;
assertTrue(rt.isSet()) ;
if ( node == null) {
assertTrue(rt.isSetUndefined());
} else if ( node.isURI() ) {
assertTrue(rt.isSetIri() || rt.isSetPrefixName() ) ;
if ( rt.isSetIri() ) {
RDF_IRI iri = rt.getIri() ;
assertEquals(node.getURI(), iri.getIri()) ;
}
if ( rt.isSetPrefixName() ) {
assertTrue(rt.getPrefixName().isSetPrefix()) ;
assertTrue(rt.getPrefixName().isSetLocalName()) ;
}
} else if ( rt.isSetValDecimal() ||
rt.isSetValDouble() ||
rt.isSetValInteger() )
{
// Nothing specific to check.
// And not reversible.
return rt ;
} else if ( node.isLiteral() ) {
assertTrue(rt.isSetLiteral()) ;
RDF_Literal lit = rt.getLiteral() ;
assertTrue(lit.isSetLex()) ;
assertEquals(node.getLiteralLexicalForm(), lit.getLex()) ;
// RDF 1.1
if (JenaRuntime.isRDF11) {
if ( Util.isSimpleString(node) ) {
assertFalse(lit.isSetDatatype()) ;
assertFalse(lit.isSetDtPrefix()) ;
assertFalse(lit.isSetLangtag()) ;
} else if ( Util.isLangString(node) ) {
assertFalse(lit.isSetDatatype()) ;
assertFalse(lit.isSetDtPrefix()) ;
assertTrue(lit.isSetLangtag()) ;
}
else {
// Regular typed literal.
assertTrue(lit.isSetDatatype() || lit.isSetDtPrefix()) ;
assertFalse(lit.isSetLangtag()) ;
}
} else {
// RDF 1.0
if ( node.getLiteralDatatype() == null ) {
if ( Util.isLangString(node ) ) {
assertFalse(lit.isSetDatatype()) ;
assertFalse(lit.isSetDtPrefix()) ;
assertTrue(lit.isSetLangtag()) ;
} else {
assertFalse(lit.isSetDatatype()) ;
assertFalse(lit.isSetDtPrefix()) ;
assertFalse(lit.isSetLangtag()) ;
}
} else {
assertTrue(lit.isSetDatatype() || lit.isSetDtPrefix()) ;
}
}
} else if ( node.isBlank() ) {
assertTrue(rt.isSetBnode()) ;
RDF_BNode bnode = rt.getBnode() ;
assertEquals(node.getBlankNodeLabel(), bnode.getLabel()) ;
} else if ( node.isVariable() ) {
assertTrue(rt.isSetVariable()) ;
assertEquals(node.getName(), rt.getVariable().getName()) ;
} else if ( Node.ANY.equals(node) ) {
assertTrue(rt.isSetAny()) ;
} else
fail("Unknown node type") ;
// And reverse
Node n2 = ThriftConvert.convert(rt,pmap) ;
assertEquals(node, n2) ;
return rt ;
}
@Test public void rdfterm_01() {
RDF_Term rt = TRDF.tANY ;
Node n = ThriftConvert.convert(rt) ;
assertEquals(Node.ANY, n) ;
}
@Test public void rdfterm_02() {
RDF_Term rt = TRDF.tUNDEF ;
Node n = ThriftConvert.convert(rt) ;
assertNull(n) ;
}
@Test public void round_trip_01() {
testTerm(null, null, false);
}
@Test public void round_trip_02() {
testTerm(Node.ANY, null, false);
}
@Test public void round_trip_03() {
testTerm(NodeFactory.createVariable("x"), null, false);
}
}