/* $Id$ */ /** * 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.manifoldcf.scriptengine.tests; import org.apache.manifoldcf.scriptengine.*; import org.junit.*; import static org.junit.Assert.*; public class ExpressionTest extends ScriptEngineBase { @Test public void basicIntOperations() throws Exception { VariableReference vr; // Binary + vr = evaluateExpression("1+2"); assertNotNull(vr); assertEquals(3,vr.resolve().getIntValue()); // Binary - vr = evaluateExpression("1-2"); assertNotNull(vr); assertEquals(-1,vr.resolve().getIntValue()); // Binary * vr = evaluateExpression("2*3"); assertNotNull(vr); assertEquals(6,vr.resolve().getIntValue()); // Binary / vr = evaluateExpression("3/2"); assertNotNull(vr); assertEquals(1,vr.resolve().getIntValue()); // Unary - vr = evaluateExpression("-2"); assertNotNull(vr); assertEquals(-2,vr.resolve().getIntValue()); // Binary & vr = evaluateExpression("1&5"); assertNotNull(vr); assertEquals(1,vr.resolve().getIntValue()); // Binary | vr = evaluateExpression("1|2"); assertNotNull(vr); assertEquals(3,vr.resolve().getIntValue()); // Unary ! vr = evaluateExpression("!2"); assertNotNull(vr); assertEquals(2^2,vr.resolve().getIntValue()); // > vr = evaluateExpression("1>1"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("2>1"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // >= vr = evaluateExpression("0>=1"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1>=1"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // < vr = evaluateExpression("2<2"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1<2"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // <= vr = evaluateExpression("2<=1"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1<=1"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // == vr = evaluateExpression("1==2"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1==1"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // != vr = evaluateExpression("1!=1"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1!=2"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Attributes vr = evaluateExpression("2 .__int__"); assertNotNull(vr); assertEquals(2,vr.resolve().getIntValue()); vr = evaluateExpression("2 .__string__"); assertNotNull(vr); assertEquals("2",vr.resolve().getStringValue()); vr = evaluateExpression("2 .__float__"); assertNotNull(vr); assertEquals(2.0,vr.resolve().getDoubleValue(),0.0); vr = evaluateExpression("2 .__script__"); assertNotNull(vr); assertEquals("2",vr.resolve().getStringValue()); // Various values assertEquals(2,new VariableInt(2).getIntValue()); assertEquals("2",new VariableInt(2).getStringValue()); assertEquals(2.0,new VariableInt(2).getDoubleValue(),0.0); } @Test public void basicFloatOperations() throws Exception { VariableReference vr; // Binary + vr = evaluateExpression("1.0+2.0"); assertNotNull(vr); assertEquals(3.0,vr.resolve().getDoubleValue(),0.0); // Binary - vr = evaluateExpression("1.0-2.0"); assertNotNull(vr); assertEquals(-1.0,vr.resolve().getDoubleValue(),0.0); // Binary * vr = evaluateExpression("2.0*3.0"); assertNotNull(vr); assertEquals(6.0,vr.resolve().getDoubleValue(),0.0); // Binary / vr = evaluateExpression("3.0/2.0"); assertNotNull(vr); assertEquals(1.5,vr.resolve().getDoubleValue(),0.0); // Unary - vr = evaluateExpression("-2.0"); assertNotNull(vr); assertEquals(-2.0,vr.resolve().getDoubleValue(),0.0); // > vr = evaluateExpression("1.0>1.0"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("2.0>1.0"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // >= vr = evaluateExpression("0.0>=1.0"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1.0>=1.0"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // < vr = evaluateExpression("2.0<2.0"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1.0<2.0"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // <= vr = evaluateExpression("2.0<=1.0"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1.0<=1.0"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // == vr = evaluateExpression("1.0==2.0"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1.0==1.0"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // != vr = evaluateExpression("1.0!=1.0"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("1.0!=2.0"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Attributes vr = evaluateExpression("2.0 .__int__"); assertNotNull(vr); assertEquals(2,vr.resolve().getIntValue()); vr = evaluateExpression("2.0 .__string__"); assertNotNull(vr); assertEquals("2.0",vr.resolve().getStringValue()); vr = evaluateExpression("2.0 .__float__"); assertNotNull(vr); assertEquals(2.0,vr.resolve().getDoubleValue(),0.0); vr = evaluateExpression("2.0 .__script__"); assertNotNull(vr); assertEquals("2.0",vr.resolve().getStringValue()); // Various values assertEquals(2,new VariableFloat(2.0).getIntValue()); assertEquals("2.0",new VariableFloat(2.0).getStringValue()); assertEquals(2.0,new VariableFloat(2.0).getDoubleValue(),0.0); } @Test public void basicBooleanOperations() throws Exception { VariableReference vr; // Binary & vr = evaluateExpression("true&false"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); // Binary | vr = evaluateExpression("true|false"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Binary && vr = evaluateExpression("true&&false"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); // Binary || vr = evaluateExpression("true||false"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Unary ! vr = evaluateExpression("!true"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); // == vr = evaluateExpression("true==false"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("true==true"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // != vr = evaluateExpression("true!=true"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("true!=false"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Attributes vr = evaluateExpression("true .__script__"); assertNotNull(vr); assertEquals("true",vr.resolve().getStringValue()); } @Test public void basicStringOperations() throws Exception { VariableReference vr; // Binary + vr = evaluateExpression("'1'+'2'"); assertNotNull(vr); assertEquals("12",vr.resolve().getStringValue()); // == vr = evaluateExpression("'1'=='2'"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("'1'=='1'"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // != vr = evaluateExpression("'1'!='1'"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("'1'!='2'"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Attributes vr = evaluateExpression("'2'.__int__"); assertNotNull(vr); assertEquals(2,vr.resolve().getIntValue()); vr = evaluateExpression("'2'.__string__"); assertNotNull(vr); assertEquals("2",vr.resolve().getStringValue()); vr = evaluateExpression("'2'.__float__"); assertNotNull(vr); assertEquals(2.0,vr.resolve().getDoubleValue(),0.0); vr = evaluateExpression("'2'.__script__"); assertNotNull(vr); assertEquals("\"2\"",vr.resolve().getStringValue()); // Various values assertEquals(2,new VariableString("2").getIntValue()); assertEquals("2",new VariableString("2").getStringValue()); assertEquals(2.0,new VariableString("2").getDoubleValue(),0.0); } @Test public void basicURLOperations() throws Exception { VariableReference vr; // Binary + vr = evaluateExpression("(new url 'http://localhost:8345/mcf-api-service/json') + 'jobs' + '123'"); assertNotNull(vr); assertEquals("http://localhost:8345/mcf-api-service/json/jobs/123",vr.resolve().getStringValue()); // == vr = evaluateExpression("(new url 'hello')==(new url 'there')"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("(new url 'hello')==(new url 'hello')"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // != vr = evaluateExpression("(new url 'hello')!=(new url 'hello')"); assertNotNull(vr); assertEquals(false,vr.resolve().getBooleanValue()); vr = evaluateExpression("(new url 'hello')!=(new url 'there')"); assertNotNull(vr); assertEquals(true,vr.resolve().getBooleanValue()); // Attributes vr = evaluateExpression("((new url 'abc') + 'def ghi').__string__"); assertNotNull(vr); assertEquals("abc/def%20ghi",vr.resolve().getStringValue()); vr = evaluateExpression("(new url 'abc').__script__"); assertNotNull(vr); assertEquals("\"abc\"",vr.resolve().getStringValue()); // Various values assertEquals("abc",new VariableURL("abc").getStringValue()); // Connectionname objecfs vr = evaluateExpression("((new url 'hello') + (new connectionname 'there/guys.')).__string__"); assertNotNull(vr); assertEquals("hello/there.%2Bguys..",vr.resolve().getStringValue()); } @Test public void basicArrayOperations() throws Exception { VariableReference vr; // initializer and subscript assertEquals(false,executeStatements("set x = [1,'2',3];")); vr = evaluateExpression("x[2]"); assertNotNull(vr); assertEquals(3,vr.resolve().getIntValue()); // Attributes vr = evaluateExpression("x.__script__"); assertNotNull(vr); assertEquals("[ 1, \"2\", 3 ]",vr.resolve().getStringValue()); vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(3,vr.resolve().getIntValue()); // Do inserts assertEquals(false,executeStatements("insert 'tail' into x;")); vr = evaluateExpression("x[3]"); assertNotNull(vr); assertEquals("tail",vr.resolve().getStringValue()); assertEquals(false,executeStatements("insert 'head' into x at 0;")); vr = evaluateExpression("x[1]"); assertNotNull(vr); assertEquals(1,vr.resolve().getIntValue()); vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(5,vr.resolve().getIntValue()); // Do deletes assertEquals(false,executeStatements("remove 1 from x;")); vr = evaluateExpression("x[1]"); assertNotNull(vr); assertEquals("2",vr.resolve().getStringValue()); vr = evaluateExpression("x[0]"); assertNotNull(vr); assertEquals("head",vr.resolve().getStringValue()); } @Test public void basicDictOperations() throws Exception { VariableReference vr; // Set up assertEquals(false,executeStatements("set x = new dictionary; set x['a'] = 1; set x['b'] = 2;")); vr = evaluateExpression("x['a']"); assertNotNull(vr); assertEquals(1,vr.resolve().getIntValue()); // Attributes vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(2,vr.resolve().getIntValue()); } @Test public void basicConfigurationnodeOperations() throws Exception { VariableReference vr; // Set up assertEquals(false,executeStatements("set x = << 'type' : 'value' : 'attr1' = 'av1', 'attr2' = 'av2' : << 'child1' : 'cv1' : : >>, << 'child2' : 'cv2' : : >> >>;")); // Subscripts vr = evaluateExpression("x[0].__type__"); assertNotNull(vr); assertEquals("child1",vr.resolve().getStringValue()); vr = evaluateExpression("x[0].__value__"); assertNotNull(vr); assertEquals("cv1",vr.resolve().getStringValue()); // Size vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(2,vr.resolve().getIntValue()); // Dict vr = evaluateExpression("x.__dict__['child1'].__value__"); assertNotNull(vr); assertEquals("cv1",vr.resolve().getStringValue()); // User attributes vr = evaluateExpression("x.attr1"); assertNotNull(vr); assertEquals("av1",vr.resolve().getStringValue()); vr = evaluateExpression("x.attr2"); assertNotNull(vr); assertEquals("av2",vr.resolve().getStringValue()); // Do inserts assertEquals(false,executeStatements("insert << 'child3' : 'cv3' : : >> into x;")); vr = evaluateExpression("x[2].__type__"); assertNotNull(vr); assertEquals("child3",vr.resolve().getStringValue()); assertEquals(false,executeStatements("insert << 'childn1' : 'cvn1' : : >> into x at 0;")); vr = evaluateExpression("x[1].__type__"); assertNotNull(vr); assertEquals("child1",vr.resolve().getStringValue()); vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(4,vr.resolve().getIntValue()); // Do deletes assertEquals(false,executeStatements("remove 1 from x;")); vr = evaluateExpression("x[1].__type__"); assertNotNull(vr); assertEquals("child2",vr.resolve().getStringValue()); vr = evaluateExpression("x[0].__type__"); assertNotNull(vr); assertEquals("childn1",vr.resolve().getStringValue()); // Script value vr = evaluateExpression("x.__script__"); assertNotNull(vr); assertEquals("<< \"type\" : \"value\" : \"attr1\"=\"av1\", \"attr2\"=\"av2\" : << \"childn1\" : \"cvn1\" : : >>, << \"child2\" : \"cv2\" : : >>, << \"child3\" : \"cv3\" : : >> >>",vr.resolve().getStringValue()); } @Test public void basicConfigurationOperations() throws Exception { VariableReference vr; // Set up assertEquals(false,executeStatements("set x = {<< 'child1' : 'cv1' : : >>, << 'child2' : 'cv2' : : >>};")); // Subscripts vr = evaluateExpression("x[0].__type__"); assertNotNull(vr); assertEquals("child1",vr.resolve().getStringValue()); vr = evaluateExpression("x[0].__value__"); assertNotNull(vr); assertEquals("cv1",vr.resolve().getStringValue()); // Size vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(2,vr.resolve().getIntValue()); // Dict vr = evaluateExpression("x.__dict__['child1'].__value__"); assertNotNull(vr); assertEquals("cv1",vr.resolve().getStringValue()); // Do inserts assertEquals(false,executeStatements("insert << 'child3' : 'cv3' : : >> into x;")); vr = evaluateExpression("x[2].__type__"); assertNotNull(vr); assertEquals("child3",vr.resolve().getStringValue()); assertEquals(false,executeStatements("insert << 'childn1' : 'cvn1' : : >> into x at 0;")); vr = evaluateExpression("x[1].__type__"); assertNotNull(vr); assertEquals("child1",vr.resolve().getStringValue()); vr = evaluateExpression("x.__size__"); assertNotNull(vr); assertEquals(4,vr.resolve().getIntValue()); // Do deletes assertEquals(false,executeStatements("remove 1 from x;")); vr = evaluateExpression("x[1].__type__"); assertNotNull(vr); assertEquals("child2",vr.resolve().getStringValue()); vr = evaluateExpression("x[0].__type__"); assertNotNull(vr); assertEquals("childn1",vr.resolve().getStringValue()); // Script value vr = evaluateExpression("x.__script__"); assertNotNull(vr); assertEquals("{ << \"childn1\" : \"cvn1\" : : >>, << \"child2\" : \"cv2\" : : >>, << \"child3\" : \"cv3\" : : >> }",vr.resolve().getStringValue()); } }