/* * Copyright (c) 2002-2012 Alibaba Group Holding Limited. * All rights reserved. * * Licensed 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 com.alibaba.citrus.service.pipeline.condition; import static com.alibaba.citrus.test.TestUtil.*; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; import com.alibaba.citrus.expr.ExpressionParseException; import com.alibaba.citrus.service.pipeline.PipelineException; import com.alibaba.citrus.service.pipeline.impl.condition.JexlCondition; import org.junit.Test; public class JexlConditionTests extends AbstractConditionTests<JexlCondition> { @Test public void create() { try { new JexlCondition(null); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("missing condition expression")); } condition = new JexlCondition("1==2"); assertEquals("1==2", condition.getExpression()); } @Test public void init_() throws Exception { try { condition.afterPropertiesSet(); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("no expression")); } condition.setExpression("hello"); condition.afterPropertiesSet(); } @Test public void setExpression() { assertNull(condition.getExpression()); // set empty try { condition.setExpression(null); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("missing condition expression")); } try { condition.setExpression(" "); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("missing condition expression")); } assertNull(condition.getExpression()); // set value condition.setExpression(" hello "); assertEquals("hello", condition.getExpression()); // set illegal try { condition.setExpression(" a= "); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception(ExpressionParseException.class, "Invalid expression: \"a=\"")); } assertEquals("hello", condition.getExpression()); // 保持不变 } @Test public void evaluate() { reset(pipelineContext); expect(pipelineContext.getAttribute("count")).andReturn("1").anyTimes(); expect(pipelineContext.getAttribute("nullValue")).andReturn(null).anyTimes(); expect(pipelineContext.getAttribute("strValue")).andReturn("true").anyTimes(); expect(pipelineContext.getAttribute("strValue2")).andReturn("hello").anyTimes(); expect(pipelineContext.getAttribute("hello")).andReturn(null).anyTimes(); pipelineContext.setAttribute("hello", "true"); replay(pipelineContext); // not inited try { condition.isSatisfied(pipelineContext); fail(); } catch (IllegalArgumentException e) { assertThat(e, exception("no expression")); } // boolean expression condition = newInstance(); condition.setExpression("count > 10"); assertFalse(condition.isSatisfied(pipelineContext)); condition.setExpression("count < 10"); assertTrue(condition.isSatisfied(pipelineContext)); // null value condition.setExpression("nullValue"); assertFalse(condition.isSatisfied(pipelineContext)); // string value - convert to boolean - success condition.setExpression("strValue"); assertTrue(condition.isSatisfied(pipelineContext)); // string value - convert to boolean - failure condition.setExpression("strValue2"); try { condition.isSatisfied(pipelineContext); fail(); } catch (PipelineException e) { assertThat( e, exception(IllegalArgumentException.class, "Failed to evaluating expression for JexlCondition into a boolean value: \"strValue2\"", "Invalid boolean value [hello]")); } // set attribute condition.setExpression(" hello='true' "); assertTrue(condition.isSatisfied(pipelineContext)); verify(pipelineContext); } @Test public void toString_() { // no expression assertEquals("JexlCondition[null]", condition.toString()); // expression condition.setExpression(" \"hello\" "); assertEquals("JexlCondition[\\\"hello\\\"]", condition.toString()); } @Test public void config() { condition = (JexlCondition) factory.getBean("jexl-true"); assertTrue(condition.isSatisfied(pipelineContext)); condition = (JexlCondition) factory.getBean("jexl-false"); assertFalse(condition.isSatisfied(pipelineContext)); } }