/* * 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.syntaxtransform; import java.util.HashMap ; import java.util.Map ; import org.apache.jena.atlas.junit.BaseTest ; import org.junit.Test ; import org.apache.jena.graph.Node ; import org.apache.jena.query.Query ; import org.apache.jena.query.QueryFactory ; import org.apache.jena.sparql.core.Var ; import org.apache.jena.sparql.sse.SSE ; import org.apache.jena.sparql.syntax.syntaxtransform.QueryTransformOps ; import org.apache.jena.sparql.syntax.syntaxtransform.UpdateTransformOps ; import org.apache.jena.update.UpdateFactory ; import org.apache.jena.update.UpdateRequest ; /** Test of variable replaced by value */ public class TestSyntaxTransform extends BaseTest { @Test public void subst_query_01() { testQuery("SELECT * { }", "SELECT * {}", "o", "1"); } @Test public void subst_query_02() { testQuery("SELECT ?x { }", "SELECT ?x {}", "o", "1") ; } @Test public void subst_query_03() { testQuery("SELECT ?o { }", "SELECT (1 as ?o) {}", "o", "1") ; } @Test public void subst_query_04() { testQuery("SELECT (?o AS ?z) { }", "SELECT (1 AS ?z) {}", "o", "1") ; } @Test public void subst_query_05() { testQuery("SELECT (?o+2 AS ?z) { }", "SELECT (1+2 AS ?z) {}", "o", "1"); } @Test public void subst_query_09() { testQuery("SELECT * {?s ?p ?o}", "SELECT * {?s ?p 1}", "o", "1"); } @Test public void subst_query_10() { testQuery("SELECT * { SELECT ?o {} }", "SELECT * {{SELECT (1 as ?o) {}}}", "o", "1"); } @Test public void subst_query_11() { testQuery("SELECT * { ?s ?p ?o { SELECT ?x { ?x ?p ?o } } }", "SELECT * { ?s ?p 1 { SELECT ?x { ?x ?p 1 } } }", "o", "1") ; } @Test public void subst_query_20() { testQuery("SELECT * { ?s ?p ?g GRAPH ?g { ?s ?p ?g } }", "SELECT * { ?s ?p <urn:graph> GRAPH <urn:graph> { ?s ?p <urn:graph> } }", "g", "<urn:graph>") ; } @Test public void subst_query_21() { testQuery("SELECT * { ?s ?p ?srv SERVICE ?srv { ?s ?p ?srv}}", "SELECT * { ?s ?p <urn:service> SERVICE <urn:service> { ?s ?p <urn:service>}}", "srv", "<urn:service>") ; } @Test public void subst_query_30() { testQuery("SELECT * { ?s ?p ?o } ORDER BY ?s", "SELECT * { <urn:x> ?p ?o } ORDER BY (<urn:x>)", "s", "<urn:x>"); } @Test public void subst_update_01() { testUpdate("DELETE { ?s <urn:p> ?x } WHERE {}", "DELETE { ?s <urn:p> <urn:x> } WHERE {}", "x", "<urn:x>") ; } @Test public void subst_update_02() { testUpdate("DELETE { ?s <urn:p> ?x } WHERE { ?s <urn:p> ?x }", "DELETE { ?s <urn:p> <urn:x> } WHERE { ?s <urn:p> <urn:x> }", "x", "<urn:x>") ; } @Test public void subst_update_03() { testUpdate("DELETE { ?s <urn:p> ?x } INSERT { ?s <urn:p> ?x } WHERE { ?s <urn:p> ?x }", "DELETE { ?s <urn:p> <urn:x> } INSERT { ?s <urn:p> <urn:x> } WHERE { ?s <urn:p> <urn:x> }", "x", "<urn:x>") ; } @Test public void subst_update_09() { testUpdate("DELETE WHERE { ?s <urn:p> ?x }", "DELETE WHERE { ?s <urn:p> <urn:x> }", "x", "<urn:x>") ; } //static final String PREFIX = "PREFIX : <http://example/>\n" ; static final String PREFIX = "" ; private void testQuery(String input, String output, String varStr, String valStr) { Query q1 = QueryFactory.create(PREFIX+input) ; Query qExpected = QueryFactory.create(PREFIX+output) ; Map<Var, Node> map = new HashMap<Var, Node>() ; map.put(Var.alloc(varStr), SSE.parseNode(valStr)) ; Query qTrans = QueryTransformOps.transform(q1, map) ; assertEquals(qExpected, qTrans) ; } private void testUpdate(String input, String output, String varStr, String valStr) { UpdateRequest req1 = UpdateFactory.create(PREFIX+input) ; UpdateRequest reqExpected = UpdateFactory.create(PREFIX+output) ; Map<Var, Node> map = new HashMap<Var, Node>() ; map.put(Var.alloc(varStr), SSE.parseNode(valStr)) ; UpdateRequest reqTrans = UpdateTransformOps.transform(req1, map) ; // Crude. String x1 = reqExpected.toString().replaceAll("[ \n\t]", "") ; String x2 = reqTrans.toString().replaceAll("[ \n\t]", "") ; //assertEquals(reqExpected, reqTrans) ; assertEquals(x1, x2) ; } }