/**
* The contents of this file are subject to the Open Software License
* Version 3.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.opensource.org/licenses/osl-3.0.txt
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*/
package org.mulgara.query.filter;
import java.net.URI;
import org.jrdf.graph.Literal;
import org.jrdf.graph.Node;
import org.mulgara.query.QueryException;
import org.mulgara.query.filter.TestContext;
import org.mulgara.query.filter.TestContextOwner;
import org.mulgara.query.rdf.LiteralImpl;
import org.mulgara.query.filter.arithmetic.AddOperation;
import org.mulgara.query.filter.value.Bool;
import org.mulgara.query.filter.value.NumericLiteral;
import org.mulgara.query.filter.value.Var;
import static org.mulgara.query.rdf.XSD.*;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Tests the addition and comparisons functions cascaded together.
*
* @created Apr 15, 2008
* @author Paula Gearon
* @copyright © 2008 <a href="http://www.topazproject.org/">The Topaz Project</a>
* @licence <a href="{@docRoot}/../../LICENCE.txt">Open Software License v3.0</a>
*/
public class CompoundStatementUnitTest extends TestCase {
protected URI xsdInt = INT_URI;
protected URI xsdFloat = FLOAT_URI;
Bool t = Bool.TRUE;
Bool f = Bool.FALSE;
/**
* Build the unit test.
* @param name The name of the test
*/
public CompoundStatementUnitTest(String name) {
super(name);
}
/**
* Hook for test runner to obtain a test suite from.
* @return The test suite
*/
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new CompoundStatementUnitTest("testValues"));
suite.addTest(new CompoundStatementUnitTest("testVar"));
return suite;
}
public void testValues() throws Exception {
NumericLiteral four = new NumericLiteral(4);
NumericLiteral five = new NumericLiteral(5);
NumericLiteral seven = new NumericLiteral(7);
NumericLiteral ten = new NumericLiteral(10);
TestContext c = new TestContext(new String[] {}, new Node[][] {});
c.beforeFirst();
AddOperation addition = new AddOperation(five, four);
Filter stmt = new LessThan(addition, ten);
stmt.setContextOwner(new TestContextOwner(c));
stmt.setCurrentContext(c);
assertTrue(stmt.test(c));
addition = new AddOperation(five, seven);
stmt = new LessThan(addition, ten);
stmt.setContextOwner(new TestContextOwner(c));
stmt.setCurrentContext(c);
assertTrue(!stmt.test(c));
}
public void testVar() throws Exception {
Var x = new Var("x");
Var y = new Var("y");
NumericLiteral ten = new NumericLiteral(10);
AddOperation addition = new AddOperation(x, y);
Filter stmt = new LessThan(addition, ten);
Literal four = new LiteralImpl("4", xsdInt);
Literal five = new LiteralImpl("5", xsdInt);
Literal seven = new LiteralImpl("7.0", xsdFloat);
Node[][] rows = {
new Node[] {four, five},
new Node[] {five, seven},
new Node[] {null, five},
};
TestContext c = new TestContext(new String[] {"x", "y"}, rows);
c.beforeFirst();
stmt.setContextOwner(new TestContextOwner(c));
// check the context setting
stmt.setCurrentContext(c);
c.next();
assertTrue(stmt.test(c)); // 4 + 5 < 10
c.next();
assertTrue(!stmt.test(c)); // 5 + 7 < 10
c.next();
try {
assertTrue(stmt.test(c)); // null + 5 < 10
fail("No exception when testing an unbound value for equality");
} catch (QueryException qe) {
String msg = qe.getMessage();
assertTrue("Unexpected message: \"" + msg + "\"", msg.startsWith("Unbound column"));
}
}
}