/** * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> * Licensed under the Apache License, Version 2.0 (the "License"); <br> * you may not use this file except in compliance with the License.<br> * You may obtain a copy of the License at the * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> * <p> * Unless required by applicable law or agreed to in writing,<br> * software distributed under the License is distributed on an "AS IS" BASIS, <br> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> * See the License for the specific language governing permissions and <br> * limitations under the License. * <p> * Initial code contributed and copyrighted by<br> * frentix GmbH, http://www.frentix.com * <p> */ package org.olat.course.condition; import java.util.Collection; import java.util.UUID; import org.junit.Assert; import org.junit.Test; import org.olat.core.id.Identity; import org.olat.core.id.IdentityEnvironment; import org.olat.core.id.Roles; import org.olat.course.CourseFactory; import org.olat.course.ICourse; import org.olat.course.condition.interpreter.ConditionInterpreter; import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.course.run.userview.UserCourseEnvironmentImpl; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; /** * * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class ConditionTest extends OlatTestCase { @Test public void simpleExpresion() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "now >= date(\"03.07.2012 08:26\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertTrue(result); Collection<Object> tokens = interpreter.getParsedTokens(condition); Assert.assertNotNull(tokens); Assert.assertFalse(tokens.isEmpty()); } @Test public void complexExpression() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "(((inLearningGroup(\"Rule1Group1\") | inLearningGroup(\"Rule1Group2\"))|inLearningArea(\"Rule1Area1\")))"; boolean result = interpreter.evaluateCondition(condition); Assert.assertFalse(result); } @Test public void testTrueFalse(){ UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "true"; boolean result = interpreter.evaluateCondition(condition); Assert.assertTrue(result); condition = "TRUE"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(result); condition = "false"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(result); condition = "FALSE"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(result); } @Test public void testHasPropertyFunction() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "hasUserProperty(\"firstName\", \"firstcondition\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "hasUserProperty(\"firstName\", \"\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\", \"firstcondition \")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\", \" firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\", \"firstcondition\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\", \"someThing\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\", \"firstconditiongugus\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"firstName\", \"gugusfirstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasUserProperty(\"lastName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); } @Test public void testHasNotPropertyFunction() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "hasNotUserProperty(\"firstName\", \"firstcondition\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasNotUserProperty(\"firstName\", \"\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasNotUserProperty(\"firstName\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasNotUserProperty(\"firstName\", \"firstcondition\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "hasNotUserProperty(\"firstName\", \"someThing\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "hasNotUserProperty(\"firstName\", \"firstconditiongugus\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "hasNotUserProperty(\"firstName\", \"gugusfirstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "hasNotUserProperty(\"lastName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); } @Test public void testUserPropertyStartswithFunction() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "userPropertyStartswith(\"firstName\", \"firs\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "userPropertyStartswith(\"firstName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "userPropertyStartswith(\"firstName\", \"\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyStartswith(\"firstName\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyStartswith(\"firstName\", \"firstcondition\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyStartswith(\"firstName\", \"someThing\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyStartswith(\"firstName\", \"firstconditiongugus\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyStartswith(\"firstName\", \"gugusfirstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyStartswith(\"lastName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); } @Test public void testUserPropertyEndswithFunction() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "userPropertyEndswith(\"firstName\", \"ondition\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "userPropertyEndswith(\"firstName\", \"\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyEndswith(\"firstName\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyEndswith(\"firstName\", \"firstcondition\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyEndswith(\"firstName\", \"someThing\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyEndswith(\"firstName\", \"firstconditiongugus\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyEndswith(\"firstName\", \"gugusfirstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "userPropertyEndswith(\"lastName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); } @Test public void testIsInUserPropertyFunction() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "isInUserProperty(\"firstName\", \"firstcondition\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "isInUserProperty(\"firstName\", \"stcondit\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "isInUserProperty(\"firstName\", \"\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isInUserProperty(\"firstName\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isInUserProperty(\"firstName\", \"firstcondition\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isInUserProperty(\"firstName\", \"someThing\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isInUserProperty(\"firstName\", \"firstconditiongugus\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isInUserProperty(\"firstName\", \"gugusfirstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isInUserProperty(\"lastName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); } @Test public void testIsNotInUserPropertyFunction() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "isNotInUserProperty(\"firstName\", \"stcondit\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isNotInUserProperty(\"firstName\", \"\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isNotInUserProperty(\"firstName\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isNotInUserProperty(\"firstName\", \"firstcondition\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertFalse(condition, result); condition = "isNotInUserProperty(\"firstName\", \"someThing\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "isNotInUserProperty(\"firstName\", \"firstconditiongugus\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "isNotInUserProperty(\"firstName\", \"gugusfirstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); condition = "isNotInUserProperty(\"lastName\", \"firstcondition\")"; result = interpreter.evaluateCondition(condition); Assert.assertTrue(condition, result); } @Test public void syntaxProposal() throws Exception { UserCourseEnvironment uce = getUserDemoCourseEnvironment(); ConditionInterpreter interpreter = new ConditionInterpreter(uce); String condition = "inLearningGroup(\"16872486<Rule1Group1>\")"; boolean result = interpreter.evaluateCondition(condition); Assert.assertFalse(result); Collection<Object> tokens = interpreter.getParsedTokens(condition); Assert.assertNotNull(tokens); Assert.assertFalse(tokens.isEmpty()); for(Object token:tokens) { System.out.println(token.getClass().getName()); } } private UserCourseEnvironment getUserDemoCourseEnvironment() { Identity author = JunitTestHelper.createAndPersistIdentityAsUser("junit_auth-" + UUID.randomUUID().toString()); Identity id = JunitTestHelper.createAndPersistIdentityAsUser("condition"); Roles roles = new Roles(false, false, false, false, false, false, false); RepositoryEntry re = JunitTestHelper.deployDemoCourse(author); ICourse course = CourseFactory.loadCourse(re); IdentityEnvironment identityEnv = new IdentityEnvironment(id, roles); UserCourseEnvironment uce = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment()); return uce; } }