⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expressionevaluationutilstests.java

📁 struts+spring 源码 希望能给大家带来帮助
💻 JAVA
字号:
/*
 * Copyright 2002-2006 the original author or authors.
 *
 * 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 org.springframework.web.util;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.el.ELException;
import javax.servlet.jsp.el.Expression;
import javax.servlet.jsp.el.ExpressionEvaluator;
import javax.servlet.jsp.el.FunctionMapper;
import javax.servlet.jsp.el.VariableResolver;

import junit.framework.TestCase;

import org.springframework.mock.web.MockExpressionEvaluator;
import org.springframework.mock.web.MockPageContext;
import org.springframework.mock.web.MockServletContext;

/**
 * @author Aled Arendsen
 * @author Juergen Hoeller
 * @since 16.09.2003
 */
public class ExpressionEvaluationUtilsTests extends TestCase {

	public void testIsExpressionLanguage() {
		assertTrue(ExpressionEvaluationUtils.isExpressionLanguage("${bla}"));
		assertTrue(ExpressionEvaluationUtils.isExpressionLanguage("bla${bla}"));
		assertFalse(ExpressionEvaluationUtils.isExpressionLanguage("bla{bla"));
		assertFalse(ExpressionEvaluationUtils.isExpressionLanguage("bla$b{"));
	}

	public void testEvaluate() throws Exception {
		PageContext ctx = new MockPageContext();
		ctx.setAttribute("bla", "blie");

		assertEquals("blie", ExpressionEvaluationUtils.evaluate("test", "${bla}", String.class, ctx));
		assertEquals("test", ExpressionEvaluationUtils.evaluate("test", "test", String.class, ctx));

		try {
			ExpressionEvaluationUtils.evaluate("test", "test", Float.class, ctx);
			fail("Should have thrown JspException");
		}
		catch (JspException ex) {
			// expected
		}
	}

	public void testEvaluateWithConcatenation() throws Exception {
		PageContext ctx = new MockPageContext();
		ctx.setAttribute("bla", "blie");

		String expr = "text${bla}text${bla}text";
		Object o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("textblietextblietext", o);

		expr = "${bla}text${bla}text";
		o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("blietextblietext", o);

		expr = "${bla}text${bla}";
		o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("blietextblie", o);

		expr = "${bla}text${bla}";
		o = ExpressionEvaluationUtils.evaluate("test", expr, Object.class, ctx);
		assertEquals("blietextblie", o);

		try {
			expr = "${bla}text${bla";
			ExpressionEvaluationUtils.evaluate("test", expr, Object.class, ctx);
			fail("Should have thrown JspException");
		}
		catch (JspException ex) {
			// expected
		}

		try {
			expr = "${bla}text${bla}";
			ExpressionEvaluationUtils.evaluate("test", expr, Float.class, ctx);
			fail("Should have thrown JspException");
		}
		catch (JspException ex) {
			// expected
		}
	}

	public void testEvaluateString() throws Exception {
		PageContext ctx = new MockPageContext();
		ctx.setAttribute("bla", "blie");

		assertEquals("blie", ExpressionEvaluationUtils.evaluateString("test", "${bla}", ctx));
		assertEquals("blie", ExpressionEvaluationUtils.evaluateString("test", "blie", ctx));
	}

	public void testEvaluateStringWithConcatenation() throws Exception {
		PageContext ctx = new MockPageContext();
		ctx.setAttribute("bla", "blie");

		String expr = "text${bla}text${bla}text";
		String s = ExpressionEvaluationUtils.evaluateString("test", expr, ctx);
		assertEquals("textblietextblietext", s);

		expr = "${bla}text${bla}text";
		s = ExpressionEvaluationUtils.evaluateString("test", expr, ctx);
		assertEquals("blietextblietext", s);

		expr = "${bla}text${bla}";
		s = ExpressionEvaluationUtils.evaluateString("test", expr, ctx);
		assertEquals("blietextblie", s);

		expr = "${bla}text${bla}";
		s = ExpressionEvaluationUtils.evaluateString("test", expr, ctx);
		assertEquals("blietextblie", s);

		try {
			expr = "${bla}text${bla";
			ExpressionEvaluationUtils.evaluateString("test", expr, ctx);
			fail("Should have thrown JspException");
		}
		catch (JspException ex) {
			// expected
		}

	}

	public void testEvaluateInteger() throws Exception {
		PageContext ctx = new MockPageContext();
		ctx.setAttribute("bla", new Integer(1));

		assertEquals(1, ExpressionEvaluationUtils.evaluateInteger("test", "${bla}", ctx));
		assertEquals(21, ExpressionEvaluationUtils.evaluateInteger("test", "21", ctx));
	}

	public void testEvaluateBoolean() throws Exception {
		PageContext ctx = new MockPageContext();
		ctx.setAttribute("bla", new Boolean(true));

		assertTrue(ExpressionEvaluationUtils.evaluateBoolean("test", "${bla}", ctx));
		assertTrue(ExpressionEvaluationUtils.evaluateBoolean("test", "true", ctx));
	}

	public void testEvaluateWithoutCaching() throws Exception {
		PageContext ctx = new CountingMockPageContext();
		CountingMockExpressionEvaluator eval = (CountingMockExpressionEvaluator) ctx.getExpressionEvaluator();
		ctx.setAttribute("bla", "blie");
		ctx.setAttribute("blo", "blue");

		assertEquals("blie", ExpressionEvaluationUtils.evaluate("test", "${bla}", String.class, ctx));
		assertEquals(1, eval.evaluateCount);

		assertEquals("blue", ExpressionEvaluationUtils.evaluate("test", "${blo}", String.class, ctx));
		assertEquals(2, eval.evaluateCount);

		assertEquals("blie", ExpressionEvaluationUtils.evaluate("test", "${bla}", String.class, ctx));
		assertEquals(3, eval.evaluateCount);

		assertEquals("blue", ExpressionEvaluationUtils.evaluate("test", "${blo}", String.class, ctx));
		assertEquals(4, eval.evaluateCount);
	}

	public void testEvaluateWithCaching() throws Exception {
		PageContext ctx = new CountingMockPageContext();
		CountingMockExpressionEvaluator eval = (CountingMockExpressionEvaluator) ctx.getExpressionEvaluator();
		ctx.setAttribute("bla", "blie");
		ctx.setAttribute("blo", "blue");

		MockServletContext sc = (MockServletContext) ctx.getServletContext();
		sc.addInitParameter(ExpressionEvaluationUtils.EXPRESSION_CACHE_CONTEXT_PARAM, "true");

		assertEquals("blie", ExpressionEvaluationUtils.evaluate("test", "${bla}", String.class, ctx));
		assertEquals(1, eval.parseExpressionCount);

		assertEquals("blue", ExpressionEvaluationUtils.evaluate("test", "${blo}", String.class, ctx));
		assertEquals(2, eval.parseExpressionCount);

		assertEquals("blie", ExpressionEvaluationUtils.evaluate("test", "${bla}", String.class, ctx));
		assertEquals(2, eval.parseExpressionCount);

		assertEquals("blue", ExpressionEvaluationUtils.evaluate("test", "${blo}", String.class, ctx));
		assertEquals(2, eval.parseExpressionCount);
	}

	public void testEvaluateWithConcatenationWithoutCaching() throws Exception {
		PageContext ctx = new CountingMockPageContext();
		CountingMockExpressionEvaluator eval = (CountingMockExpressionEvaluator) ctx.getExpressionEvaluator();
		ctx.setAttribute("bla", "blie");
		ctx.setAttribute("blo", "blue");

		String expr = "text${bla}text${blo}text";
		Object o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("textblietextbluetext", o);
		assertEquals(2, eval.evaluateCount);

		expr = "${bla}text${blo}text";
		o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("blietextbluetext", o);
		assertEquals(4, eval.evaluateCount);

		expr = "${bla}text${blo}";
		o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("blietextblue", o);
		assertEquals(6, eval.evaluateCount);

		expr = "${bla}text${blo}";
		o = ExpressionEvaluationUtils.evaluate("test", expr, Object.class, ctx);
		assertEquals("blietextblue", o);
		assertEquals(8, eval.evaluateCount);
	}

	public void testEvaluateWithConcatenationWithCaching() throws Exception {
		PageContext ctx = new CountingMockPageContext();
		CountingMockExpressionEvaluator eval = (CountingMockExpressionEvaluator) ctx.getExpressionEvaluator();
		ctx.setAttribute("bla", "blie");
		ctx.setAttribute("blo", "blue");

		MockServletContext sc = (MockServletContext) ctx.getServletContext();
		sc.addInitParameter(ExpressionEvaluationUtils.EXPRESSION_CACHE_CONTEXT_PARAM, "true");

		String expr = "text${bla}text${blo}text";
		Object o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("textblietextbluetext", o);
		assertEquals(2, eval.parseExpressionCount);

		expr = "${bla}text${blo}text";
		o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("blietextbluetext", o);
		assertEquals(2, eval.parseExpressionCount);

		expr = "${bla}text${blo}";
		o = ExpressionEvaluationUtils.evaluate("test", expr, String.class, ctx);
		assertEquals("blietextblue", o);
		assertEquals(2, eval.parseExpressionCount);

		expr = "${bla}text${blo}";
		o = ExpressionEvaluationUtils.evaluate("test", expr, Object.class, ctx);
		assertEquals("blietextblue", o);
		assertEquals(2, eval.parseExpressionCount);
	}


	private static class CountingMockPageContext extends MockPageContext {

		private ExpressionEvaluator eval = new CountingMockExpressionEvaluator(this);

		public ExpressionEvaluator getExpressionEvaluator() {
			return eval;
		}
	}


	private static class CountingMockExpressionEvaluator extends MockExpressionEvaluator {

		public int parseExpressionCount = 0;

		public int evaluateCount = 0;

		public CountingMockExpressionEvaluator(PageContext pageContext) {
			super(pageContext);
		}

		public Expression parseExpression(String expression, Class expectedType, FunctionMapper functionMapper) throws ELException {
			this.parseExpressionCount++;
			return super.parseExpression(expression, expectedType, functionMapper);
		}

		public Object evaluate(String expression, Class expectedType, VariableResolver variableResolver, FunctionMapper functionMapper) throws ELException {
			this.evaluateCount++;
			return super.evaluate(expression, expectedType, variableResolver, functionMapper);
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -