You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/05/14 14:03:32 UTC
[33/42] jena git commit: Merge commit 'refs/pull/143/head' of
github.com:apache/jena
http://git-wip-us.apache.org/repos/asf/jena/blob/4b5cd267/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
----------------------------------------------------------------------
diff --cc jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
index 0f07a2a,0f07a2a..d3a6250
--- a/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
+++ b/jena-arq/src/test/java/org/apache/jena/query/TestParameterizedSparqlString.java
@@@ -1,1881 -1,1881 +1,1881 @@@
--/**
-- * 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.query;
--
--import java.util.Calendar ;
--import java.util.Iterator ;
--import java.util.TimeZone ;
--
--import org.apache.jena.datatypes.TypeMapper ;
--import org.apache.jena.graph.Node ;
--import org.apache.jena.graph.NodeFactory ;
--import org.apache.jena.iri.IRIFactory ;
--import org.apache.jena.rdf.model.* ;
--import org.apache.jena.shared.impl.PrefixMappingImpl ;
--import org.apache.jena.sparql.ARQException ;
--import org.apache.jena.sparql.syntax.Element ;
--import org.apache.jena.sparql.syntax.ElementGroup ;
--import org.apache.jena.sparql.syntax.ElementTriplesBlock ;
--import org.apache.jena.update.UpdateExecutionFactory ;
--import org.apache.jena.update.UpdateProcessor ;
--import org.apache.jena.update.UpdateRequest ;
--import org.apache.jena.vocabulary.OWL ;
--import org.apache.jena.vocabulary.RDF ;
--import org.apache.jena.vocabulary.XSD ;
--import org.junit.Assert ;
--import org.junit.Test ;
--
--/**
-- * Tests for the {@link ParameterizedSparqlString}
-- *
-- */
--public class TestParameterizedSparqlString {
--
-- private void test(ParameterizedSparqlString query, String[] expected, String[] notExpected) {
-- // System.out.println("Raw Command:");
-- // System.out.println(query.getCommandText());
-- String command = query.toString();
-- // System.out.println("Injected Command:");
-- // System.out.println(command);
-- for (String x : expected) {
-- Assert.assertTrue(command.contains(x));
-- }
-- for (String x : notExpected) {
-- Assert.assertFalse(command.contains(x));
-- }
-- }
--
-- private Query testAsQuery(ParameterizedSparqlString query) {
-- return query.asQuery();
-- }
--
-- private UpdateRequest testAsUpdate(ParameterizedSparqlString update) {
-- return update.asUpdate();
-- }
--
-- @Test
-- public void test_param_string_constructor_1() {
-- // Test empty constructor
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- Assert.assertEquals("", query.getCommandText());
-- }
--
-- @Test
-- public void test_param_string_constructor_2() {
-- // Test constructor with null command - null command should map to empty
-- // command automagically
-- ParameterizedSparqlString query = new ParameterizedSparqlString((String) null);
-- Assert.assertEquals("", query.getCommandText());
-- }
--
-- @Test
-- public void test_param_string_constructor_3() {
-- // Test constructor with base URI
-- ParameterizedSparqlString query = new ParameterizedSparqlString("", "http://example.org");
-- Assert.assertEquals("http://example.org", query.getBaseUri());
-- }
--
-- @Test
-- public void test_param_string_constructor_4() {
-- // Test constructor with predefined parameters
-- QuerySolutionMap map = new QuerySolutionMap();
-- Resource r = ResourceFactory.createResource("http://example.org");
-- map.add("s", r);
-- ParameterizedSparqlString query = new ParameterizedSparqlString("", map);
--
-- Assert.assertEquals(r.asNode(), query.getParam("s"));
-- }
--
-- @Test
-- public void test_param_string_constructor_5() {
-- // Test constructor with predefined parameters - variant of constructor
-- // that does not require command text
-- QuerySolutionMap map = new QuerySolutionMap();
-- Resource r = ResourceFactory.createResource("http://example.org");
-- map.add("s", r);
-- ParameterizedSparqlString query = new ParameterizedSparqlString(map);
--
-- Assert.assertEquals(r.asNode(), query.getParam("s"));
-- }
--
-- @Test
-- public void test_param_string_constructor_6() {
-- // Test constructor with predefined parameters
-- QuerySolutionMap map = new QuerySolutionMap();
-- Resource r = ResourceFactory.createResource("http://example.org");
-- map.add("s", r);
-- Literal l = ResourceFactory.createPlainLiteral("example");
-- map.add("o", l);
-- ParameterizedSparqlString query = new ParameterizedSparqlString("", map);
--
-- Assert.assertEquals(r.asNode(), query.getParam("s"));
-- Assert.assertEquals(l.asNode(), query.getParam("o"));
-- }
--
-- @Test
-- public void test_param_string_constructor_7() {
-- // Test constructor with predefined parameters - variant of constructor
-- // that does not require command text
-- QuerySolutionMap map = new QuerySolutionMap();
-- Resource r = ResourceFactory.createResource("http://example.org");
-- map.add("s", r);
-- Literal l = ResourceFactory.createPlainLiteral("example");
-- map.add("o", l);
-- ParameterizedSparqlString query = new ParameterizedSparqlString(map);
--
-- Assert.assertEquals(r.asNode(), query.getParam("s"));
-- Assert.assertEquals(l.asNode(), query.getParam("o"));
-- }
--
-- @Test
-- public void test_param_string_constructor_8() {
-- // Test constructors with predefined prefixes
-- PrefixMappingImpl prefixes = new PrefixMappingImpl();
-- prefixes.setNsPrefix("ex", "http://example.org");
-- ParameterizedSparqlString query = new ParameterizedSparqlString("", prefixes);
--
-- Assert.assertEquals(prefixes.getNsPrefixURI("ex"), query.getNsPrefixURI("ex"));
-- }
--
-- @Test
-- public void test_param_string_constructor_9() {
-- // Test constructors with predefined prefixes - variant of constructor
-- // that does not require command text
-- PrefixMappingImpl prefixes = new PrefixMappingImpl();
-- prefixes.setNsPrefix("ex", "http://example.org");
-- ParameterizedSparqlString query = new ParameterizedSparqlString(prefixes);
--
-- Assert.assertEquals(prefixes.getNsPrefixURI("ex"), query.getNsPrefixURI("ex"));
-- }
--
-- @Test
-- public void test_param_string_iri_1() {
-- // Test simple injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
--
-- test(query, new String[] { "<http://example.org>" }, new String[] { "?s" });
-- }
--
-- @Test
-- public void test_param_string_iri_2() {
-- // Test simple injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("p", "http://example.org");
--
-- test(query, new String[] { "<http://example.org>" }, new String[] { "?p" });
-- }
--
-- @Test
-- public void test_param_string_iri_3() {
-- // Test simple injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("o", "http://example.org");
--
-- test(query, new String[] { "<http://example.org>" }, new String[] { "?o" });
-- }
--
-- @Test
-- public void test_param_string_iri_4() {
-- // Test simple injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . ?s a ?type }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
--
-- test(query, new String[] { "<http://example.org>" }, new String[] { "?s" });
-- }
--
-- @Test
-- public void test_param_string_iri_5() {
-- // Test simple injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
--
-- test(query, new String[] { "<http://example.org>", "<http://predicate>" }, new String[] { "?s", "?p" });
-- }
--
-- @Test
-- public void test_param_string_bnode_1() {
-- // Test Blank Node injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "_:blankNodeID");
--
-- test(query, new String[] { "<_:blankNodeID>" }, new String[] { "?s" });
-- }
--
-- @Test
-- public void test_param_string_bnode_2() {
-- // Test Blank Node injenction
-- String cmdText = "INSERT { GRAPH <target> { ?node a:p ?o . } } WHERE { ?node a:p ?o . }";
-- ParameterizedSparqlString update = new ParameterizedSparqlString(cmdText);
-- update.setIri("node", "_:blankNodeID");
--
-- test(update, new String[] { "<_:blankNodeID>" }, new String[] { "?node" });
-- }
--
-- @Test
-- public void test_param_string_bnode_3() {
-- // Test case related to treatment of blank nodes when injecting into
-- // SPARQL updates using _: syntax
--
-- Model model = ModelFactory.createDefaultModel();
-- Resource bnode = model.createResource();
-- bnode.addProperty(RDF.type, OWL.Thing);
-- Assert.assertEquals(1, model.size());
--
-- Dataset ds = DatasetFactory.create(model);
--
-- // Use a parameterized query to check the data can be found
-- ParameterizedSparqlString pq = new ParameterizedSparqlString();
-- pq.setCommandText("SELECT * WHERE { ?s ?p ?o }");
-- pq.setIri("s", "_:" + bnode.getId());
-- Query q = pq.asQuery();
-- try(QueryExecution qe = QueryExecutionFactory.create(q, ds)) {
-- ResultSet rset = qe.execSelect();
-- Assert.assertEquals(1, ResultSetFormatter.consume(rset));
-- }
--
-- // Use a parameterized update to modify the data
-- ParameterizedSparqlString s = new ParameterizedSparqlString();
-- s.setCommandText("INSERT { ?o ?p ?s } WHERE { ?s ?p ?o }");
-- s.setIri("s", "_:" + bnode.getId());
-- UpdateRequest query = s.asUpdate();
-- UpdateProcessor proc = UpdateExecutionFactory.create(query, ds);
-- proc.execute();
--
-- // This should be true because this was present in the intial model set
-- // up
-- Assert.assertEquals(1, model.listStatements(bnode, null, (RDFNode) null).toList().size());
-- // This should return 0 because the INSERT should result in a new blank
-- // node being created rather than the existing one being reused becaue
-- // of the semantics of blank nodes usage in templates
-- Assert.assertEquals(0, model.listStatements(null, null, bnode).toList().size());
-- }
--
-- @Test
-- public void test_param_string_mixed_1() {
-- // Test simple injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", true);
--
-- test(query, new String[] { "<http://example.org>", "<http://predicate>", "true" }, new String[] { "?s", "?p", "?o" });
-- }
--
-- @Test
-- public void test_param_string_string_1() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "test");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"test\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_string_2() {
-- // Test a string with quotes
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "A \"test\" string");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"A \\\"test\\\" string\" . }",
-- query.toString());
-- }
--
-- @Test
-- public void test_param_string_string_3() {
-- // Test a string with a $
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "Show me the $!");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"Show me the $!\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_string_4() {
-- // Test a string with a newline
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "A multi\nline string");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"A multi\\nline string\" . }",
-- query.toString());
-- }
--
-- @Test
-- public void test_param_string_string_5() {
-- // Test a string with a tab
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "A tabby\tstring");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"A tabby\\tstring\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_string_6() {
-- // Test a string with a single quote
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "A test's test");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"A test\\'s test\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_string_7() {
-- // Test a string with a backslash
-- String cmdText = "SELECT * WHERE { ?s ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("p", "http://predicate");
-- query.setLiteral("o", "test a\\b");
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"test a\\\\b\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_boolean_1() {
-- // Test boolean injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", true);
--
-- // We don't expect #boolean as booleans should be formatted as plain
-- // literals
-- test(query, new String[] { "true" }, new String[] { "?o", XSD.xboolean.toString() });
-- }
--
-- @Test
-- public void test_param_string_boolean_2() {
-- // Test boolean injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", false);
--
-- // We don't expect #boolean as booleans should be formatted as plain
-- // literals
-- test(query, new String[] { "false" }, new String[] { "?o", XSD.xboolean.toString() });
-- }
--
-- @Test
-- public void test_param_string_boolean_3() {
-- // Test invalid boolean injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.xboolean.toString()));
--
-- // We expect #boolean as booleans with invalid lexical values should not
-- // be formatted as plain literals
-- test(query, new String[] { "xyz", XSD.xboolean.toString() }, new String[] { "?o" });
-- }
--
-- @Test
-- public void test_param_string_boolean_4() {
-- // Test boolean injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, true);
--
-- // We don't expect #boolean as booleans should be formatted as plain
-- // literals
-- test(query, new String[] { "true" }, new String[] { "? ", XSD.xboolean.toString() });
-- }
--
-- @Test
-- public void test_param_string_boolean_5() {
-- // Test boolean injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, false);
--
-- // We don't expect #boolean as booleans should be formatted as plain
-- // literals
-- test(query, new String[] { "false" }, new String[] { "? ", XSD.xboolean.toString() });
-- }
--
-- @Test
-- public void test_param_string_boolean_6() {
-- // Test invalid boolean injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.xboolean.toString()));
--
-- // We expect #boolean as booleans with invalid lexical values should not
-- // be formatted as plain literals
-- test(query, new String[] { "xyz", XSD.xboolean.toString() }, new String[] { "? " });
-- }
--
-- @Test
-- public void test_param_string_int_1() {
-- // Test integer injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", 1234);
--
-- // We don't expect #integer as integers should be formatted as typed
-- // literals
-- test(query, new String[] { "1234" }, new String[] { "?o", XSD.integer.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_int_2() {
-- // Test long integer injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", 3000000000l);
--
-- // We don't expect #integer as integers should be formatted as typed
-- // literals
-- test(query, new String[] { "3000000000" }, new String[] { "?o", XSD.integer.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_int_3() {
-- // Test invalid integer injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.integer.toString()));
--
-- // We do expect #integer as invalid integers should be formatted with
-- // their type
-- test(query, new String[] { "xyz", XSD.integer.toString() }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_int_4() {
-- // Test integer injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, 1234);
--
-- // We don't expect #integer as integers should be formatted as typed
-- // literals
-- test(query, new String[] { "1234" }, new String[] { "? ", XSD.integer.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_int_5() {
-- // Test long integer injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, 3000000000l);
--
-- // We don't expect #integer as integers should be formatted as typed
-- // literals
-- test(query, new String[] { "3000000000" }, new String[] { "? ", XSD.integer.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_int_6() {
-- // Test invalid integer injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.integer.toString()));
--
-- // We do expect #integer as invalid integers should be formatted with
-- // their type
-- test(query, new String[] { "xyz", XSD.integer.toString() }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_double_1() {
-- // Test double injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", 123.4);
--
-- // We expect #double as doubles without exponents cannot be formatted as
-- // plain literals
-- test(query, new String[] { "123.4", XSD.xdouble.toString() }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_double_2() {
-- // Test double injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", 123.0e5);
--
-- // We don't expect #double as we expected doubles to be formatted as
-- // plain literals
-- test(query, new String[] { "1.23E7" }, new String[] { "?o", XSD.xdouble.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_double_3() {
-- // Test invalid double injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.xdouble.toString()));
--
-- // We expect #double as invalid doubles cannot be formatted as plain
-- // literals
-- test(query, new String[] { "xyz", XSD.xdouble.toString() }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_double_4() {
-- // Test double injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, 123.4);
--
-- // We expect #double as doubles without exponents cannot be formatted as
-- // plain literals
-- test(query, new String[] { "123.4", XSD.xdouble.toString() }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_double_5() {
-- // Test double injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, 123.0e5);
--
-- // We don't expect #double as we expected doubles to be formatted as
-- // plain literals
-- test(query, new String[] { "1.23E7" }, new String[] { "? ", XSD.xdouble.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_double_6() {
-- // Test invalid double injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.xdouble.toString()));
--
-- // We expect #double as invalid doubles cannot be formatted as plain
-- // literals
-- test(query, new String[] { "xyz", XSD.xdouble.toString() }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_float_1() {
-- // Test float injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", 123.4f);
--
-- // We expect #float as floats should be formatted as typed literals
-- test(query, new String[] { "123.4", XSD.xfloat.toString() }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_float_2() {
-- // Test float injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, 123.4f);
--
-- // We expect #float as floats should be formatted as typed literals
-- test(query, new String[] { "123.4", XSD.xfloat.toString() }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_date_1() {
-- // Test date injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- Calendar dt = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
-- dt.set(2012, 1, 24, 12, 0, 0);
-- query.setLiteral("o", dt);
--
-- // We expect #dateTime as dateTime should be formatted as typed literals
-- test(query, new String[] { "2012-02-24T12:00:00", XSD.dateTime.toString() }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_date_2() {
-- // Test invalid date injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.dateTime.toString()));
--
-- // We expect #dateTime as dateTime should be formatted as typed literals
-- test(query, new String[] { "xyz", XSD.dateTime.toString() }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_date_3() {
-- // Test date injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- Calendar dt = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
-- dt.set(2012, 1, 24, 12, 0, 0);
-- query.setLiteral(0, dt);
--
-- // We expect #dateTime as dateTime should be formatted as typed literals
-- test(query, new String[] { "2012-02-24T12:00:00", XSD.dateTime.toString() }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_date_4() {
-- // Test invalid date injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, "xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.dateTime.toString()));
--
-- // We expect #dateTime as dateTime should be formatted as typed literals
-- test(query, new String[] { "xyz", XSD.dateTime.toString() }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_lang_1() {
-- // Test lang literal injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", "hello", "en");
--
-- test(query, new String[] { "hello", "@en" }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_lang_2() {
-- // Test lang literal injection
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("o", "bonjour", "fr");
--
-- test(query, new String[] { "bonjour", "@fr" }, new String[] { "?o" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_lang_3() {
-- // Test lang literal injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, "hello", "en");
--
-- test(query, new String[] { "hello", "@en" }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_lang_4() {
-- // Test lang literal injection
-- String cmdText = "SELECT * WHERE { ?s ?p ? }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral(0, "bonjour", "fr");
--
-- test(query, new String[] { "bonjour", "@fr" }, new String[] { "? " });
-- testAsQuery(query);
-- }
--
-- @Test(expected = QueryException.class)
-- public void test_param_string_bad_1() {
-- // Test bad input - not a valid query
-- String cmdText = "Not a query";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
--
-- testAsQuery(query);
-- }
--
-- @Test(expected = QueryException.class)
-- public void test_param_string_simple_bad_1() {
-- // Test bad input - injecting the parameter makes the query invalid
-- String cmdText = "SELECT ?s WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
--
-- test(query, new String[] { "<http://example.org>" }, new String[] { "?s" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_precedence_1() {
-- // Test simple injection precedence
-- // Setting parameter multiple times just overrides the existing setting
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setIri("s", "http://alternate.org");
--
-- test(query, new String[] { "<http://alternate.org>" }, new String[] { "?s", "<http://example.org>" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_precedence_2() {
-- // Test simple injection precedence
-- // Setting parameter multiple times just overrides the existing setting
-- String cmdText = "SELECT * WHERE { ? ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri(0, "http://example.org");
-- query.setIri(0, "http://alternate.org");
--
-- test(query, new String[] { "<http://alternate.org>" }, new String[] { "? ", "<http://example.org>" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_name_collision_1() {
-- // Test name collision
-- // The parameter we inject has a name which is a prefix of another
-- // variable name, only the
-- // actual name should be injected to
-- String cmdText = "SELECT * WHERE { ?a ?ab ?abc }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("a", "http://example.org");
--
-- // In the not expected list we need the whitespace after ?a as otherwise
-- // the test will give a
-- // false negative since obviously we should still have ?ab and ?abc
-- // present
-- test(query, new String[] { "<http://example.org>", "?ab", "?abc" }, new String[] { "?a " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_name_collision_2() {
-- // Test name collision
-- // The parameter we inject has a name which is a prefix of another
-- // variable name, only the
-- // actual name should be injected to
-- String cmdText = "SELECT * WHERE { ?abc ?ab ?a. }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("a", "http://example.org");
--
-- // In the not expected list we need the whitespace after ?a as otherwise
-- // the test will give a
-- // false negative since obviously we should still have ?ab and ?abc
-- // present
-- test(query, new String[] { "<http://example.org>", "?ab", "?abc" }, new String[] { "?a " });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_name_collision_3() {
-- // Test name collision
-- // In this test the parameter we inject has a name which collides with a
-- // term used
-- // in a prefix in the query
-- String cmdText = "PREFIX ex: <http://example.org/vocab#> SELECT * WHERE { ?s ex:name ?name }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setLiteral("name", "Bob");
--
-- // In the expected list we want to see Bob, in the not expected list we
-- // don't want to see
-- // ex:Bob since that would be a bad variable insertion
-- test(query, new String[] { "Bob" }, new String[] { "?name", "ex:Bob" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_clear_1() {
-- // Test clearing of parameter
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.clearParam("s");
--
-- test(query, new String[] { "?s" }, new String[] { "<http://example.org>" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_clear_2() {
-- // Test clearing of parameter
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.clearParams();
--
-- test(query, new String[] { "?s" }, new String[] { "<http://example.org>" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_clear_3() {
-- // Test indirect clearing of parameter by setting param to null
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri("s", "http://example.org");
-- query.setParam("s", (Node) null);
--
-- test(query, new String[] { "?s" }, new String[] { "<http://example.org>" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_clear_4() {
-- // Test clearing of parameter
-- String cmdText = "SELECT * WHERE { ? ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri(0, "http://example.org");
-- query.clearParam(0);
--
-- test(query, new String[] { "? " }, new String[] { "<http://example.org>" });
-- }
--
-- @Test
-- public void test_param_string_clear_5() {
-- // Test clearing of parameter
-- String cmdText = "SELECT * WHERE { ? ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri(0, "http://example.org");
-- query.clearParams();
--
-- test(query, new String[] { "? " }, new String[] { "<http://example.org>" });
-- }
--
-- @Test
-- public void test_param_string_clear_6() {
-- // Test indirect clearing of parameter by setting param to null
-- String cmdText = "SELECT * WHERE { ? ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setIri(0, "http://example.org");
-- query.setParam(0, (Node) null);
--
-- test(query, new String[] { "? " }, new String[] { "<http://example.org>" });
-- }
--
-- @Test
-- public void test_param_string_prefixes_1() {
-- // Test prefixes are prepended
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setNsPrefix("ex", "http://example.org");
--
-- test(query, new String[] { "PREFIX", "ex:", "<http://example.org>" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_prefixes_2() {
-- // Test prefixes are prepended
-- String cmdText = "SELECT * WHERE { ?s ex:predicate ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setNsPrefix("ex", "http://example.org");
--
-- test(query, new String[] { "PREFIX", "ex:", "<http://example.org>", "ex:predicate" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test(expected = QueryException.class)
-- public void test_param_string_prefixes_bad_1() {
-- // Test bad input - using a prefix without defining prefix
-- String cmdText = "SELECT * WHERE { ?s ex:predicate ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
--
-- // Testing with an PName using an undefined prefix in the string
-- // Should fail on parsing
-- test(query, new String[] { "ex:predicate" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_base_1() {
-- // Test base is prepended
-- String cmdText = "SELECT * WHERE { ?s <#predicate> ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setBaseUri("http://example.org");
--
-- test(query, new String[] { "BASE", "<http://example.org>" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_base_bad_1() {
-- // Test questionable input - using relative URI without defining base
-- // ARQ accepts this, not sure if this is a way to disable this as this
-- // test should
-- // ideally be expecting a QueryException
-- String cmdText = "SELECT * WHERE { ?s <#predicate> ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
--
-- test(query, new String[] {}, new String[] { "BASE", "<http://example.org>" });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_copy_1() {
-- // Test copying - copying always copies command text
-- String cmdText = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- ParameterizedSparqlString copy = query.copy();
--
-- Assert.assertEquals(cmdText, copy.getCommandText());
-- }
--
-- @Test
-- public void test_param_string_copy_2() {
-- // Test copying - copying and changing a parameter changes only one
-- // instance
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setIri("x", "http://example.org/original");
-- ParameterizedSparqlString copy = query.copy();
-- copy.setIri("x", "http://example.org/copy");
--
-- Assert.assertEquals("http://example.org/original", query.getParam("x").toString());
-- Assert.assertFalse("http://example.org/copy".equals(query.getParam("x").toString()));
--
-- Assert.assertEquals("http://example.org/copy", copy.getParam("x").toString());
-- Assert.assertFalse("http://example.org/original".equals(copy.getParam("x").toString()));
-- }
--
-- @Test
-- public void test_param_string_copy_3() {
-- // Test copying - copying should copy prefixes
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setNsPrefix("ex", "http://example.org");
-- ParameterizedSparqlString copy = query.copy();
--
-- Assert.assertEquals("http://example.org", copy.getNsPrefixURI("ex"));
-- }
--
-- @Test
-- public void test_param_string_copy_4() {
-- // Test copying - copying should copy base URI
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setBaseUri("http://example.org");
-- ParameterizedSparqlString copy = query.copy();
--
-- Assert.assertEquals("http://example.org", copy.getBaseUri());
-- }
--
-- @Test
-- public void test_param_string_copy_5() {
-- // Test selective copying - copying without copying parameters
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setIri("x", "http://example.org/original");
-- ParameterizedSparqlString copy = query.copy(false);
--
-- Assert.assertEquals("http://example.org/original", query.getParam("x").toString());
-- Assert.assertEquals(null, copy.getParam("x"));
-- }
--
-- @Test
-- public void test_param_string_copy_6() {
-- // Test selective copying - copying without copying prefixes
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setNsPrefix("ex", "http://example.org");
-- ParameterizedSparqlString copy = query.copy(true, true, false);
--
-- Assert.assertFalse("http://example.org".equals(copy.getNsPrefixURI("ex")));
-- }
--
-- @Test
-- public void test_param_string_copy_7() {
-- // Test copying - copying and changing a parameter changes only one
-- // instance
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setIri(0, "http://example.org/original");
-- ParameterizedSparqlString copy = query.copy();
-- copy.setIri(0, "http://example.org/copy");
--
-- Assert.assertEquals("http://example.org/original", query.getParam(0).toString());
-- Assert.assertFalse("http://example.org/copy".equals(query.getParam(0).toString()));
--
-- Assert.assertEquals("http://example.org/copy", copy.getParam(0).toString());
-- Assert.assertFalse("http://example.org/original".equals(copy.getParam(0).toString()));
-- }
--
-- @Test
-- public void test_param_string_copy_8() {
-- // Test selective copying - copying without copying parameters
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.setIri(0, "http://example.org/original");
-- ParameterizedSparqlString copy = query.copy(false);
--
-- Assert.assertEquals("http://example.org/original", query.getParam(0).toString());
-- Assert.assertEquals(null, copy.getParam(0));
-- }
--
-- @Test
-- public void test_param_string_append_1() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ?o }");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "?o" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_2() {
-- // Test appending simple types
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.append(true);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "true" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_3() {
-- // Test appending simple types
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.append(123);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "123" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_4() {
-- // Test appending simple types
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.append(123l);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "123" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_5() {
-- // Test appending simple types
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.append(123.0e5);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "1.23E7" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_iri_1() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ");
-- query.appendIri("http://example.org");
-- query.append(" ?o }");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "<http://example.org>", "?o" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_iri_2() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ");
-- query.appendIri(IRIFactory.iriImplementation().construct("http://example.org"));
-- query.append(" ?o }");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "<http://example.org>", "?o" }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_boolean_1() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral(true);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "true" }, new String[] { XSD.xboolean.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_boolean_2() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral("xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.xboolean.toString()));
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "xyz", XSD.xboolean.toString() }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_integer_1() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral(123);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "123" }, new String[] { XSD.integer.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_integer_2() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral("xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.integer.toString()));
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "xyz", XSD.integer.toString() }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_integer_3() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral(123l);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "123" }, new String[] { XSD.integer.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_double_1() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral(123.0e5);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "1.23E7" }, new String[] { XSD.xdouble.toString() });
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_double_2() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral(1.23d);
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "1.23", XSD.xdouble.toString() }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_append_double_3() {
-- // Test appending text
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT *");
-- query.append('\n');
-- query.append("WHERE { ?s ?p ");
-- query.appendLiteral("xyz", TypeMapper.getInstance().getSafeTypeByName(XSD.xdouble.toString()));
-- query.append("}");
--
-- test(query, new String[] { "SELECT", "*", "\n", "WHERE", "?s", "?p", "xyz", XSD.xdouble.toString() }, new String[] {});
-- testAsQuery(query);
-- }
--
-- @Test
-- public void test_param_string_positional_1() {
-- // Test positional parameters
-- ParameterizedSparqlString query = new ParameterizedSparqlString();
-- query.append("SELECT * WHERE { ? ?p ?o }");
-- query.setParam(0, NodeFactory.createURI("http://example.org"));
--
-- test(query, new String[] { "<http://example.org>" }, new String[] { "? " });
-- }
--
-- @Test
-- public void test_param_string_positional_2() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ? ? ? . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setParam(0, NodeFactory.createURI("http://example.org"));
-- query.setParam(1, NodeFactory.createURI("http://predicate"));
-- query.setParam(2, NodeFactory.createLiteral("test"));
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"test\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_positional_3() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ? ? ? . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setParam(0, NodeFactory.createLiteral("with ? mark"));
-- query.setParam(1, NodeFactory.createURI("http://predicate"));
-- query.setParam(2, NodeFactory.createLiteral("test"));
--
-- Assert.assertEquals("SELECT * WHERE { \"with ? mark\" <http://predicate> \"test\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_positional_4() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ? ? ? . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setParam(0, NodeFactory.createLiteral("with ? mark"));
-- query.setParam(1, NodeFactory.createLiteral("with ? mark"));
-- query.setParam(2, NodeFactory.createLiteral("test"));
--
-- Assert.assertEquals("SELECT * WHERE { \"with ? mark\" \"with ? mark\" \"test\" . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_positional_5() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ? ? ?. }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setParam(0, NodeFactory.createURI("http://example.org"));
-- query.setParam(1, NodeFactory.createURI("http://predicate"));
-- query.setParam(2, NodeFactory.createLiteral("test"));
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"test\". }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_positional_6() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ? ? ?; ?p ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setParam(0, NodeFactory.createURI("http://example.org"));
-- query.setParam(1, NodeFactory.createURI("http://predicate"));
-- query.setParam(2, NodeFactory.createLiteral("test"));
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"test\"; ?p ?o . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_positional_7() {
-- // Test regular string injection
-- String cmdText = "SELECT * WHERE { ? ? ?, ?o . }";
-- ParameterizedSparqlString query = new ParameterizedSparqlString(cmdText);
-- query.setParam(0, NodeFactory.createURI("http://example.org"));
-- query.setParam(1, NodeFactory.createURI("http://predicate"));
-- query.setParam(2, NodeFactory.createLiteral("test"));
--
-- Assert.assertEquals("SELECT * WHERE { <http://example.org> <http://predicate> \"test\", ?o . }", query.toString());
-- }
--
-- @Test
-- public void test_param_string_positional_eligible_1() {
-- // Test detection of eligible parameters
-- String cmdText = "SELECT * WHERE { ?s ?p ? . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(cmdText);
--
-- Iterator<Integer> iter = pss.getEligiblePositionalParameters();
-- int count = 0;
-- while (iter.hasNext()) {
-- count++;
-- iter.next();
-- }
-- Assert.assertEquals(1, count);
-- }
--
-- @Test
-- public void test_param_string_positional_eligible_2() {
-- // Test detection of eligible parameters
-- String cmdText = "SELECT * WHERE { ? ? ? . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(cmdText);
--
-- Iterator<Integer> iter = pss.getEligiblePositionalParameters();
-- int count = 0;
-- while (iter.hasNext()) {
-- count++;
-- iter.next();
-- }
-- Assert.assertEquals(3, count);
-- }
--
-- @Test
-- public void test_param_string_positional_eligible_3() {
-- // Test detection of eligible parameters
-- String cmdText = "SELECT * WHERE { ?s ?p ?; ?p1 ?, ?. }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(cmdText);
--
-- Iterator<Integer> iter = pss.getEligiblePositionalParameters();
-- int count = 0;
-- while (iter.hasNext()) {
-- count++;
-- iter.next();
-- }
-- Assert.assertEquals(3, count);
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_01() {
-- // This injection is prevented by forbidding the > character in URIs
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?var2 . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setIri("var2", "hello> } ; DROP ALL ; INSERT DATA { <s> <p> <goodbye>");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_02() {
-- // This injection is prevented by forbidding the > character in URIs
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?var2 . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setIri("var2", "hello> } ; DROP ALL ; INSERT DATA { <s> <p> <goodbye");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_injection_03() {
-- // This injection attempt results in a valid update but a failed
-- // injection
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?var2 . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var2", "hello\" } ; DROP ALL ; INSERT DATA { <s> <p> <goodbye>");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_04() {
-- // This injection is prevented by forbidding the > character in URIs
-- String str = "PREFIX : <http://example/>\nSELECT * WHERE { <s> <p> ?var2 . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setIri("var2", "hello> . ?s ?p ?o");
--
-- Query q = pss.asQuery();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_injection_05() {
-- // This injection attempt results in a valid query but a failed
-- // injection
-- String str = "PREFIX : <http://example/>\nSELECT * WHERE { <s> <p> ?var2 . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var2", "hello\" . ?s ?p ?o");
--
-- Query q = pss.asQuery();
-- Element el = q.getQueryPattern();
-- if (el instanceof ElementTriplesBlock) {
-- Assert.assertEquals(1, ((ElementTriplesBlock) q.getQueryPattern()).getPattern().size());
-- } else if (el instanceof ElementGroup) {
-- Assert.assertEquals(1, ((ElementGroup) el).getElements().size());
-- el = ((ElementGroup) el).getElements().get(0);
-- if (el instanceof ElementTriplesBlock) {
-- Assert.assertEquals(1, ((ElementTriplesBlock) el).getPattern().size());
-- }
-- }
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_06() {
-- // This injection attempt is prevented by forbidding injection to a
-- // variable parameter immediately surrounded by quotes
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> '?var' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "hello' . } ; DROP ALL ; INSERT DATA { <s> <p> \"goodbye");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_07() {
-- // This injection attempt is prevented by forbidding injection of
-- // variable parameters immediately surrounded by quotes
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> \"?var\" }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_08() {
-- // This injection attempt results in an invalid SPARQL update because
-- // you end up with a double quoted literal inside a single quoted
-- // literal
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> '?var' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "' . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_injection_09() {
-- // This injection attempt using comments results in a valid SPARQL
-- // update but a failed injection because the attempt to use comments
-- // ends up being a valid string literal within quotes
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?var }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "\" . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_10() {
-- // This injection attempt tries to chain together injections to achieve
-- // an attack, the first
-- // injection appears innocuous and is an attempt to set up an actual
-- // injection vector
-- // The injection is prevented because a ?var directly surrounded by
-- // quotes is always flagged as
-- // subject to injection because pre-injection validation happens before
-- // each variable is injected
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?var }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "a");
-- pss.setLiteral("var2", "b");
--
-- // Figure out which variable will be injected first
-- @SuppressWarnings("deprecation")
-- String first = pss.getVars().next();
-- String second = first.equals("var") ? "var2" : "var";
--
-- pss.setLiteral(first, "?" + second);
-- pss.setLiteral(second, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_11() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we are now able to detect and
-- // prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> \" ?var \" }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_12() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we are now able to detect and
-- // prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> \"some text ?var other text\" }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_injection_13() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we now escape ' so prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ' ?var ' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "' . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test
-- public void test_param_string_injection_14() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we now escape ' so prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> 'some text ?var other text' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "' . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_injection_15() {
-- // This injection attempt tries to chain together injections to achieve
-- // an attack, the first injection appears innocuous and is an attempt to
-- // set up an actual injection vector
-- // Since we not check out delimiters we are not able to detect and
-- // prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?var }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "a");
-- pss.setLiteral("var2", "b");
--
-- // Figure out which variable will be injected first
-- @SuppressWarnings("deprecation")
-- String first = pss.getVars().next();
-- String second = first.equals("var") ? "var2" : "var";
--
-- pss.setLiteral(first, " ?" + second + " ");
-- pss.setLiteral(second, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_non_injection_01() {
-- // This test checks that a legitimate injection of a literal to a
-- // variable that occurs between two other literals is permitted
-- // Btw this is not a valid query but it serves to illustrate the case
-- String str = "SELECT * { \"subject\" ?var \"object\" . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("var", "predicate");
--
-- pss.toString();
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_positional_injection_01() {
-- // This injection is prevented by forbidding the > character in URIs
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ?v . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setIri(0, "hello> } ; DROP ALL ; INSERT DATA { <s> <p> <goodbye>");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_positional_injection_02() {
-- // This injection is prevented by forbidding the > character in URIs
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ? . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setIri(0, "hello> } ; DROP ALL ; INSERT DATA { <s> <p> <goodbye");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_positional_injection_03() {
-- // This injection attempt results in a valid update but a failed
-- // injection
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ? . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "hello\" } ; DROP ALL ; INSERT DATA { <s> <p> <goodbye>");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_positional_injection_04() {
-- // This injection is prevented by forbidding the > character in URIs
-- String str = "PREFIX : <http://example/>\nSELECT * WHERE { <s> <p> ? . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setIri(0, "hello> . ?s ?p ?o");
--
-- Query q = pss.asQuery();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_positional_injection_05() {
-- // This injection attempt results in a valid query but a failed
-- // injection
-- String str = "PREFIX : <http://example/>\nSELECT * WHERE { <s> <p> ? . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "hello\" . ?s ?p ?o");
--
-- Query q = pss.asQuery();
-- Element el = q.getQueryPattern();
-- if (el instanceof ElementTriplesBlock) {
-- Assert.assertEquals(1, ((ElementTriplesBlock) q.getQueryPattern()).getPattern().size());
-- } else if (el instanceof ElementGroup) {
-- Assert.assertEquals(1, ((ElementGroup) el).getElements().size());
-- el = ((ElementGroup) el).getElements().get(0);
-- if (el instanceof ElementTriplesBlock) {
-- Assert.assertEquals(1, ((ElementTriplesBlock) el).getPattern().size());
-- }
-- }
-- }
--
-- @Test
-- public void test_param_string_positional_injection_06() {
-- // This injection attempt is prevented by forbidding injection to a
-- // variable parameter immediately surrounded by quotes
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> '?' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "hello' . } ; DROP ALL ; INSERT DATA { <s> <p> \"goodbye");
--
-- // In the positional case this does not work because the '?' is not
-- // considered an eligible positional parameter due to the lack of
-- // subsequent white space or punctuation
-- Assert.assertFalse(pss.getEligiblePositionalParameters().hasNext());
-- }
--
-- @Test
-- public void test_param_string_positional_injection_07() {
-- // This injection attempt is prevented by forbidding injection of
-- // variable parameters immediately surrounded by quotes
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> \"?\" }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- // In the positional case this does not work because the "?" is not
-- // considered an eligible positional parameter due to the lack of
-- // subsequent white space or punctuation
-- Assert.assertFalse(pss.getEligiblePositionalParameters().hasNext());
-- }
--
-- @Test
-- public void test_param_string_positional_injection_08() {
-- // This injection attempt results in an invalid SPARQL update because
-- // you end up with a double quoted literal inside a single quoted
-- // literal
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> '?' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "' . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- // In the positional case this does not work because the '?' is not
-- // considered an eligible positional parameter due to the lack of
-- // subsequent white space or punctuation
-- Assert.assertFalse(pss.getEligiblePositionalParameters().hasNext());
-- }
--
-- @Test
-- public void test_param_string_positional_injection_09() {
-- // This injection attempt using comments results in a valid SPARQL
-- // update but a failed injection because the attempt to use comments
-- // ends up being a valid string literal within quotes
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ? }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "\" . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test
-- public void test_param_string_positional_injection_10() {
-- // This injection attempt tries to chain together injections to achieve
-- // an attack, the first
-- // injection appears innocuous and is an attempt to set up an actual
-- // injection vector
-- // The injection is prevented because a ?var directly surrounded by
-- // quotes is always flagged as
-- // subject to injection because pre-injection validation happens before
-- // each variable is injected
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ? }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "?");
-- pss.setLiteral(1, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- // In the positional parameter case this should fail because there
-- // is only one eligible positional parameter in the string and we cannot
-- // introduce additional ones via chained injection
-- Iterator<Integer> params = pss.getEligiblePositionalParameters();
-- Assert.assertTrue(params.hasNext());
-- params.next();
-- Assert.assertFalse(params.hasNext());
--
-- UpdateRequest u = pss.asUpdate();
-- Assert.assertEquals(1, u.getOperations().size());
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_positional_injection_11() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we are now able to detect and
-- // prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> \" ? \" }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test(expected = ARQException.class)
-- public void test_param_string_positional_injection_12() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we are now able to detect and
-- // prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> \"some text ? other text\" }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.fail("Attempt to do SPARQL injection should result in an exception");
-- }
--
-- @Test
-- public void test_param_string_positional_injection_13() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we now escape ' so prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ' ? ' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "' . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test
-- public void test_param_string_positional_injection_14() {
-- // This is a variant on placing a variable bound to a literal inside a
-- // literal resulting in an injection, we now escape ' so prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> 'some text ? other text' }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "' . } ; DROP ALL ; INSERT DATA { <s> <p> <o> }#");
--
-- UpdateRequest updates = pss.asUpdate();
-- Assert.assertEquals(1, updates.getOperations().size());
-- }
--
-- @Test
-- public void test_param_string_positional_injection_15() {
-- // This injection attempt tries to chain together injections to achieve
-- // an attack, the first injection appears innocuous and is an attempt to
-- // set up an actual injection vector
-- // Since we not check out delimiters we are not able to detect and
-- // prevent this
-- String str = "PREFIX : <http://example/>\nINSERT DATA { <s> <p> ? }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, " ? ");
-- pss.setLiteral(1, " . } ; DROP ALL ; INSERT DATA { <s> <p> ");
--
-- // In the positional parameter case this should fail because there
-- // is only one eligible positional parameter in the string and we cannot
-- // introduce additional ones via chained injection
-- Iterator<Integer> params = pss.getEligiblePositionalParameters();
-- Assert.assertTrue(params.hasNext());
-- params.next();
-- Assert.assertFalse(params.hasNext());
--
-- UpdateRequest u = pss.asUpdate();
-- Assert.assertEquals(1, u.getOperations().size());
-- }
--
-- @Test
-- public void test_param_string_positional_non_injection_01() {
-- // This test checks that a legitimate injection of a literal to a
-- // variable that occurs between two other literals is permitted
-- // Btw this is not a valid query but it serves to illustrate the case
-- String str = "SELECT * { \"subject\" ? \"object\" . }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral(0, "predicate");
--
-- pss.toString();
-- }
--
-- @Test
-- public void test_param_string_bug_01() {
-- // Tests a bug reported with setting literals
-- String str = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("o", "has$sign");
--
-- pss.toString();
-- }
--
-- @Test
-- public void test_param_string_bug_02() {
-- // Tests a bug reported with setting literals
-- String str = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("o", "has$1sign");
--
-- pss.toString();
-- }
--
-- @Test
-- public void test_param_string_bug_03() {
-- // Tests a bug reported with setting literals
-- String str = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("o", "has$5sign");
--
-- pss.toString();
-- }
--
-- @Test
-- public void test_param_string_bug_04() {
-- // Tests a bug reported with setting literals
-- String str = "SELECT * WHERE { ?s ?p ?o }";
-- ParameterizedSparqlString pss = new ParameterizedSparqlString(str);
-- pss.setLiteral("o", "has $9 sign");
--
-- pss.toString();
-- }
--}
++/**
++ * 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.query;
++
++import java.util.Calendar ;
++import java.util.Iterator ;
++import java.util.TimeZone ;
++
++import org.apache.jena.datatypes.TypeMapper ;
++import org.apache.jena.graph.Node ;
++import org.apache.jena.graph.NodeFactory ;
++import org.apache.jena.iri.IRIFactory ;
++import org.apache.jena.rdf.model.* ;
++import org.apache.jena.shared.impl.PrefixMappingImpl ;
++import org.apache.jena.sparql.ARQException ;
++import org.apache.jena.sparql.syntax.Element ;
++import org.apache.jena.sparql.syntax.ElementGroup ;
++import org.apache.jena.sparql.syntax.ElementTriplesBlock ;
++import org.apache.jena.update.UpdateExecutionFactory ;
++import org.apache.jena.update.UpdateProcessor ;
++import org.apache.jena.update.UpdateRequest ;
++import org.apache.jena.vocabulary.OWL ;
++import org.apache.jena.vocabulary.RDF ;
++import org.apache.jena.vocabulary.XSD ;
++import org.junit.Assert ;
++import org.junit.Test ;
++
++/**
++ * Tests for the {@link ParameterizedSparqlString}
++ *
++ */
++public class TestParameterizedSparqlString {
++
++ private void test(ParameterizedSparqlString query, String[] expected, String[] notExpected) {
++ // System.out.println("Raw Command:");
++ // System.out.println(query.getCommandText());
++ String command = query.toString();
++ // System.out.println("Injected Command:");
++ // System.out.println(command);
++ for (String x : expected) {
++ Assert.assertTrue(command.contains(x));
++ }
++ for (String x : notExpected) {
++ Assert.assertFalse(command.contains(x));
++ }
++ }
++
++ private Query testAsQuery(ParameterizedSparqlString query) {
++ return query.asQuery();
++ }
++
++ private UpdateRequest testAsUpdate(ParameterizedSparqlString update) {
++ return update.asUpdate();
++ }
++
++ @Test
++ public void test_param_string_constructor_1() {
++ // Test empty constructor
++ ParameterizedSparqlString query = new ParameterizedSparqlString();
++ Assert.assertEquals("", query.getCommandText());
++ }
++
++ @Test
++ public void test_param_string_constructor_2() {
++ // Test constructor with null command - null command should map to empty
++ // command automagically
++ ParameterizedSparqlString query = new ParameterizedSparqlString((String) null);
++ Assert.assertEquals("", query.getCommandText());
++ }
++
++ @Test
++ public void test_param_string_constructor_3() {
++ // Test constructor with base URI
++ ParameterizedSparqlString query = new ParameterizedSparqlString("", "http://example.org");
++ Assert.assertEquals("http://example.org", query.getBaseUri());
++ }
++
++ @Test
++ public void test_param_string_constructor_4() {
++ // Test constructor with predefined parameters
++ QuerySolutionMap map = new QuerySolutionMap();
++ Resource r = ResourceFactory.createResource("http://example.org");
++ map.add("s", r);
++ ParameterizedSparqlString query = new ParameterizedSparqlString("", map);
++
++ Assert.assertEquals(r.asNode(), query.getParam("s"));
++ }
++
++ @Test
++ public void test_param_string_constructor_5() {
++ // Test constructor with predefined parameters - variant of constructor
++ // that does not require command text
++ QuerySolutionMap map = new QuerySolutionMap();
++ Resource r = ResourceFactory.createResource("http://example.org");
++ map.add("s", r);
++ ParameterizedSparqlString query = new ParameterizedSparqlString(map);
+
<TRUNCATED>