/* * 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.sdb.test.misc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.apache.jena.sdb.exprmatch.* ; import org.apache.jena.sparql.core.Var ; import org.apache.jena.sparql.util.ExprUtils ; import org.junit.Test; public class TestExprMatch { // ---- Basic tests @Test public void match_0() { MapAction mapAction = new MapAction() ; match("?x", "?a", mapAction, null) ; } @Test public void match_1() { MapAction mapAction = new MapAction() ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a"), "?x") ; match("?x", "?a", mapAction, null) ; } @Test public void match_2() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a"), new ActionMatchVar()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a"), ExprUtils.parse("?x")) ; match("?x", "?a", mapAction, mapResult) ; } @Test public void match_3() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a"), new ActionMatchNoBind()) ; MapResult mapResult = new MapResult() ; match("?x", "?a", mapAction, mapResult) ; } @Test public void match_4() { MapAction mapAction = new MapAction() ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a"), "1") ; // Value one match("1", "?a", mapAction, mapResult) ; } @Test public void match_5() { MapAction mapAction = new MapAction() ; noMatch("?a", "1", mapAction) ; } @Test public void struct_1() { MapAction mapAction = new MapAction() ; MapResult mapResult = new MapResult() ; match("1+2=3", "(1+2)=3", mapAction, null) ; } @Test public void struct_2() { MapAction mapAction = new MapAction() ; MapResult mapResult = new MapResult() ; match("1+2+3", "(1+2)+3", mapAction, null) ; } @Test public void struct_3() { MapAction mapAction = new MapAction() ; // Different structures. noMatch("1+2+3", "1+(2+3)", mapAction) ; } // ---- Comparison tests @Test public void cond_1() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchBind()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; mapResult.put(Var.alloc("a2"), "3") ; match("?x < 3", "?a1 < ?a2", mapAction, mapResult) ; } @Test public void cond_2() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchBind()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; mapResult.put(Var.alloc("a2"), "3") ; noMatch("?x < 3", "?a1 > ?a2", mapAction) ; } // ---- Regex tests @Test public void regex_1() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; mapResult.put(Var.alloc("a2"), "'smith'") ; match("regex(?x , 'smith')", "regex(?a1 , ?a2)", mapAction, mapResult) ; } @Test public void regex_2() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; mapAction.put(Var.alloc("a3"), new ActionMatchString()) ; noMatch("regex(?x , 'smith')", "regex(?a1 , ?a2, ?a3)", mapAction) ; } @Test public void regex_3() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; mapAction.put(Var.alloc("a3"), new ActionMatchString()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; mapResult.put(Var.alloc("a2"), "'smith'") ; mapResult.put(Var.alloc("a3"), "'i'") ; match("regex(?x , 'smith', 'i')", "regex(?a1, ?a2, ?a3)", mapAction, mapResult) ; } @Test public void regex_4() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; mapAction.put(Var.alloc("a3"), new ActionMatchExact("'i'")) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; mapResult.put(Var.alloc("a2"), "'smith'") ; mapResult.put(Var.alloc("a3"), "'i'") ; match("regex(?x , 'smith', 'i')", "regex(?a1, ?a2, ?a3)", mapAction, mapResult) ; } @Test public void regex_5() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; noMatch("regex(?x , 'smith', 'i')", "regex(?a1, ?a2)", mapAction) ; } @Test public void regex_6() { MapAction mapAction = new MapAction() ; //mapAction.put(Var.alloc("a1"), new ActionMatch mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; mapAction.put(Var.alloc("a3"), new ActionMatchExact("'i'")) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "str(?x)") ; mapResult.put(Var.alloc("a2"), "'smith'") ; mapResult.put(Var.alloc("a3"), "'i'") ; match("regex(str(?x) , 'smith', 'i')", "regex(?a1, ?a2, ?a3)", mapAction, mapResult) ; } @Test public void regex_7() { MapAction mapAction = new MapAction() ; //mapAction.put(Var.alloc("a1"), new ActionMatch mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; mapAction.put(Var.alloc("a3"), new ActionMatchExact("'i'")) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; mapResult.put(Var.alloc("a2"), "'smith'") ; mapResult.put(Var.alloc("a3"), "'i'") ; match("regex(str(?x) , 'smith', 'i')", "regex(str(?a1), ?a2, ?a3)", mapAction, mapResult) ; } @Test public void regex_8() { MapAction mapAction = new MapAction() ; //mapAction.put(Var.alloc("a1"), new ActionMatch mapAction.put(Var.alloc("a2"), new ActionMatchString()) ; mapAction.put(Var.alloc("a3"), new ActionMatchExact("'i'")) ; noMatch("regex(?x , 'smith', 'i')", "regex(str(?a1), ?a2, ?a3)", mapAction) ; } @Test public void function_1() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; match("fn:not(?x)", "fn:not(?a1)", mapAction, mapResult) ; } @Test public void function_2() { MapAction mapAction = new MapAction() ; mapAction.put(Var.alloc("a1"), new ActionMatchVar()) ; MapResult mapResult = new MapResult() ; mapResult.put(Var.alloc("a1"), "?x") ; noMatch("fn:not(?x)", "fn:notNot(?a1)", mapAction) ; } // //Run JUnit4 tests in a JUnit3 environment // public static junit.framework.Test suite() // { // return new JUnit4TestAdapter(TestExprMatch.class); // } private MapResult match(String expr, String pattern, MapAction aMap, MapResult expected) { MapResult rMap = ExprMatcher.match(expr, pattern, aMap) ; assertNotNull(rMap) ; if ( expected != null ) assertEquals(expected, rMap) ; return rMap ; } private void noMatch(String expr, String pattern, MapAction aMap) { MapResult rMap = ExprMatcher.match(expr, pattern, aMap) ; assertNull(rMap) ; } }