/*
* 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.sparql.syntax;
import junit.framework.TestCase ;
import org.apache.jena.datatypes.xsd.XSDDatatype ;
import org.apache.jena.graph.Node ;
import org.apache.jena.sparql.ARQConstants ;
import org.apache.jena.sparql.ARQException ;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.sse.Item ;
import org.apache.jena.sparql.sse.ItemException ;
import org.apache.jena.sparql.sse.SSE ;
import org.apache.jena.sparql.util.NodeFactoryExtra ;
import org.junit.Test ;
public class TestSSE_Basic extends TestCase
{
// Tests not requiring URI resolution or prefix name handling.
static Node int1 = org.apache.jena.graph.NodeFactory.createLiteral("1", XSDDatatype.XSDinteger) ;
static Node int2 = org.apache.jena.graph.NodeFactory.createLiteral("2", XSDDatatype.XSDinteger) ;
static Node int3 = org.apache.jena.graph.NodeFactory.createLiteral("3", XSDDatatype.XSDinteger) ;
static Node strLangEN = org.apache.jena.graph.NodeFactory.createLiteral("xyz", "en") ;
static Node typeLit1 = NodeFactoryExtra.createLiteralNode("123", null, "http://example/type") ;
static Item int1i = Item.createNode(int1) ;
static Item int2i = Item.createNode(int2) ;
static Item int3i = Item.createNode(int3) ;
// public static TestSuite suite()
// {
// TestSuite ts = new TestSuite(TestSSE_Basic.class) ;
// ts.setName("SSE Basic") ;
// return ts ;
// }
// ---- Parsing : not check for the correct outcome
@Test public void testParseTerm_01() { parse("'xyz'") ; }
@Test public void testParseTerm_02() { parse("'xyz'@en") ; }
@Test public void testParseTerm_03() { parseBad("'xyz' @en") ; }
@Test public void testParseSymbol_01() { parse("a") ; }
@Test public void testParseSymbol_02() { parseBad("'a") ; }
// TODO Parser needs fixing
//@Test public void testParseSymbol_03() { parse("@a") ; }
@Test public void testParseSymbol_04() { parse("a@") ; }
@Test public void testParseList_01() { parse("()") ; }
@Test public void testParseList_02() { parse("(a)") ; }
@Test public void testParseList_03() { parse(" (a)") ; }
@Test public void testParseList_04() { parse("( a)") ; }
@Test public void testParseList_05() { parse("(a )") ; }
@Test public void testParseList_06() { parse("(a) ") ; }
@Test public void testParseList_07() { parse("('a') ") ; }
@Test public void testParseList_08() { parse("(<a>) ") ; }
@Test public void testParse_10() { parseBad("'foo' @en") ; }
// ---- Terms
@Test public void testLit_01() { testNode("'foo'") ; }
@Test public void testLit_02() { testNode("\"foo\"") ; }
@Test public void testLit_03() { testNode("''") ; }
@Test public void testLit_04() { testNode("\"\"") ; }
@Test public void testLit_05() { testNode("'foo'@en") ; }
@Test public void testLit_06() { parseBad("'foo' @en") ; }
@Test public void testLit_07() { parseBad("'") ; }
@Test public void testLit_08() { parseBad("'\"") ; }
@Test public void testLit_09() { parseBad("'''") ; }
@Test public void testLit_10() { parseBad("''@") ; }
@Test public void testLit_11() { testNode("'''abc\\ndef'''") ; }
@Test public void testLit_12()
{
Node n = org.apache.jena.graph.NodeFactory.createLiteral("A\tB") ;
testNode("'''A\\tB'''", n) ;
}
@Test public void testLit_13() { testNode("'abc\\ndef'") ; }
@Test public void testNum_1() { testNode("1") ; }
@Test public void testNum_2() { testNode("1.1") ; }
@Test public void testNum_3() { testNode("1.0e6") ; }
@Test public void testNum_4() { parseBadNode("1 ") ; }
@Test public void testNum_5() { parseBadNode("1 1") ; }
@Test public void testURI_1() { testNode("<http://example/base>") ; }
@Test public void testURI_2() { parseBadNode("http://example/baseNoDelimiters") ; }
@Test public void testURI_3() { parseBadNode("<http://example/ space>") ; }
@Test public void testVar_01() { testVar("?x") ; }
@Test public void testVar_02() { testVar("?") ; }
@Test public void testVar_03() { testVar("?0") ; }
// See ARQConstants.anonVarMarker
@Test public void testVar_04() { testVar("??x") ; }
@Test public void testVar_05() { testVar("??") ; }
@Test public void testVar_06() { testVar("??0") ; }
// See ARQConstants.allocVarMarker
@Test public void testVar_07() { testVar("?"+ARQConstants.allocVarMarker+"0") ; }
@Test public void testVar_08() { testVar("?"+ARQConstants.allocVarMarker) ; }
// Default allocations
@Test public void testVar_09()
{
Node v = parseNode("?") ;
assertTrue( v instanceof Var ) ;
String vn = ((Var)v).getVarName() ;
assertFalse(vn.equals("")) ;
}
@Test public void testVar_10()
{
Node v = parseNode("?"+ARQConstants.allocVarAnonMarker) ;
assertTrue( v instanceof Var ) ;
String vn = ((Var)v).getVarName() ;
assertFalse(vn.equals(ARQConstants.allocVarAnonMarker)) ;
}
@Test public void testVar_11()
{
Node v = parseNode("?"+ARQConstants.allocVarMarker) ;
assertTrue( v instanceof Var ) ;
String vn = ((Var)v).getVarName() ;
assertFalse(vn.equals(ARQConstants.allocVarMarker)) ;
}
@Test public void testWS_1() { parseBadNode("?x ") ; }
@Test public void testWS_2() { parseBadNode(" ?x") ; }
// ---- Nodes
@Test public void testNode_1() { testNode("3", int3) ; }
@Test public void testNode_2() { testNode("<http://example/node1>", org.apache.jena.graph.NodeFactory.createURI("http://example/node1")) ; }
@Test public void testTypedLit_1() { testNode("\"123\"^^<http://example/type>", typeLit1) ; }
@Test public void testTypedLit_2() { testNode("'123'^^<http://example/type>", typeLit1) ; }
@Test public void testTypedLit_3() { testNode("'3'^^<"+XSDDatatype.XSDinteger.getURI()+">", int3) ; }
// --- Symbols
@Test public void testSymbol_1() { testSymbol("word") ; }
@Test public void testSymbol_2() { testSymbol("+") ; }
// XXX Parser broken
// @Test public void testSymbol_3() { testSymbol("^^") ; }
// @Test public void testSymbol_4() { testSymbol("^^<foo>") ; }
// @Test public void testSymbol_5() { testSymbol("@") ; }
// @Test public void testSymbol_6() { testSymbol("@en") ; }
// --- nil
@Test public void testNil_1() { testItem("nil", Item.nil) ; }
@Test public void testNil_2() { testNotItem("null", Item.nil) ; }
@Test public void testNil_3() { testNotItem("()", Item.nil) ; }
@Test public void testNil_4()
{
Item x = Item.createList() ;
x.getList().add(Item.nil) ;
testItem("(nil)", x) ;
}
// ---- Lists
@Test public void testList_1()
{
Item item = parse("()") ;
assertTrue(item.isList()) ;
assertEquals(item.getList().size(), 0 ) ;
}
@Test public void testList_2() { testList("(1)", int1i) ; }
@Test public void testList_3() { testList("(1 2)", int1i, int2i) ; }
@Test public void testList_4() { testList("(1 a)", int1i, Item.createSymbol("a")) ; }
@Test public void testList_5()
{
Item list = Item.createList() ;
list.getList().add(int1i) ;
testList("((1) a)", list, Item.createSymbol("a")) ;
}
@Test public void testList_6()
{ testList("(+ 1)", Item.createSymbol("+"), int1i) ; }
@Test public void testList_7()
{ testList("[+ 1]", Item.createSymbol("+"), int1i) ; }
@Test public void testNum_01()
{
Item item = SSE.parse("1") ;
assertEquals(1, item.getInt()) ;
}
@Test public void testNum_02()
{
Item item = SSE.parse("3") ;
assertEquals(3d, item.getDouble(), 0) ;
}
@Test public void testNum_03()
{
Item item = SSE.parse("2.5") ; // Exact double
assertEquals(2.5d, item.getDouble(), 0) ;
}
@Test public void testNum_04()
{
Item item = SSE.parse("abc") ;
try {
item.getInt() ;
fail("Succeeded where exceptiSSE.on expected") ;
} catch (ItemException ex) {}
}
@Test public void testNum_05()
{
Item item = SSE.parse("<x>") ;
try {
item.getInt() ;
fail("Succeeded where exception expected") ;
} catch (ItemException ex) {}
}
@Test public void testMisc_01() { testEquals("()") ; }
@Test public void testMisc_02() { testEquals("(a)") ; }
@Test public void testMisc_10() { testNotEquals("(a)", "a") ; }
@Test public void testMisc_11() { testNotEquals("(a)", "()") ; }
@Test public void testMisc_12() { testNotEquals("(a)", "(<a>)") ; }
@Test public void testTaggedList_1()
{
Item x = Item.createTagged("TAG") ;
assertTrue(x.isTagged()) ;
assertTrue(x.isTagged("TAG")) ;
}
@Test public void testTaggedList_2()
{
Item x = Item.createTagged("TAG") ;
Item.addPair(x.getList(), "KEY", "VALUE") ;
Item y = Item.find(x.getList(), "KEY") ;
assertNotNull(y) ;
Item z = Item.find(x.getList(), "KEYKEY") ;
assertNull(z) ;
}
// ---- Workers ----
private void testEquals(String x)
{
Item item1 = parse(x) ;
Item item2 = parse(x) ;
assertTrue(item1.equals(item2)) ;
assertTrue(item2.equals(item1)) ;
}
private void testNotEquals(String x1, String x2)
{
Item item1 = parse(x1) ;
Item item2 = parse(x2) ;
assertFalse(item1.equals(item2)) ;
assertFalse(item2.equals(item1)) ;
}
private Item parse(String str)
{
Item item = SSE.parse(str) ;
return item ;
}
private void testSymbol(String str)
{
Item item = parse(str) ;
assertTrue(item.isSymbol()) ;
assertEquals(item.getSymbol(), str) ;
}
private void testList(String str, Item item1)
{
Item item = parse(str) ;
assertTrue(item.isList()) ;
Item i = item.getList().get(0) ;
assertEquals(1, item.getList().size()) ;
assertEquals(item.getList().get(0), item1) ;
}
private void testList(String str, Item item1, Item item2)
{
Item item = parse(str) ;
assertTrue(item.isList()) ;
assertEquals(2, item.getList().size()) ;
assertEquals(item.getList().get(0), item1) ;
assertEquals(item.getList().get(1), item2) ;
}
private void testList(String str, Item item1, Item item2, Item item3)
{
Item item = parse(str) ;
assertTrue(item.isList()) ;
assertEquals(3, item.getList().size()) ;
assertEquals(item.getList().get(0), item1) ;
assertEquals(item.getList().get(1), item2) ;
assertEquals(item.getList().get(2), item3) ;
}
private void testItem(String str, Item result)
{
Item item = parse(str) ;
assertEquals(result, item) ;
}
private void testNotItem(String str, Item result)
{
Item item = parse(str) ;
assertFalse(result.equals(item)) ;
}
private void testNode(String str)
{
Node node = parseNode(str) ;
}
private void testVar(String str)
{
Node node = parseNode(str) ;
assertTrue( node instanceof Var ) ;
}
private void testNode(String str, Node result)
{
Node node = parseNode(str) ;
assertEquals(result, node) ;
}
private Node parseNode(String str)
{
// Not NodeFactory.parseNode which does not have all the features (e.g. "_" and "?")
return SSE.parseNode(str) ;
}
private void parseBad(String str)
{
try {
Item item = SSE.parse(str) ;
//System.out.println(str+" => "+item) ;
fail("Did not get a parse failure") ;
}
catch (ARQException ex) {}
}
private void parseBadNode(String str)
{
try {
// Not NodeFactory.parseNode which does not have all the features (e.g. "_" and "?")
Node node = parseNode(str) ;
//System.out.println(str+" => "+item) ;
fail("Did not get a parse failure") ;
}
//catch (RiotException ex) {}
catch (ARQException ex) {}
}
}