blob: 92d5365c51e76827901a665b264841d4a6e95f37 [file] [log] [blame]
/*
* 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.shale.test.el;
import javax.el.ELContext;
import javax.el.PropertyNotWritableException;
import javax.el.ValueExpression;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.shale.test.base.AbstractJsfTestCase;
import org.apache.shale.test.mock.MockApplication12;
/**
* <p>Test case for <code>MockExpressionFactory.</p>
*/
public class MockExpressionFactoryTestCase extends AbstractJsfTestCase {
// ------------------------------------------------------------ Constructors
// Construct a new instance of this test case.
public MockExpressionFactoryTestCase(String name) {
super(name);
}
// ---------------------------------------------------- Overall Test Methods
// Set up instance variables required by this test case.
protected void setUp() throws Exception {
super.setUp();
factory = (MockExpressionFactory)
((MockApplication12) application).getExpressionFactory();
}
// Return the tests included in this test case.
public static Test suite() {
return (new TestSuite(MockExpressionFactoryTestCase.class));
}
// Tear down instance variables required by this test case.
protected void tearDown() throws Exception {
factory = null;
super.tearDown();
}
// -------------------------------------------------------- Static Variables
/**
* <p>Input values to be converted, of all the interesting types.</p>
*/
private static final Object[] INPUT_VALUES = {
(String) null,
"",
"1234",
Boolean.TRUE,
Boolean.FALSE,
new Byte((byte) 123),
new Double(234),
new Float(345),
new Integer(456),
new Long(567),
new Short((short) 678),
};
/**
* <p>Output values when converted to Boolean.</p>
*/
private static final Boolean[] OUTPUT_BOOLEAN = {
Boolean.FALSE,
Boolean.FALSE,
Boolean.FALSE,
Boolean.TRUE,
Boolean.FALSE,
null,
null,
null,
null,
null,
null
};
/**
* <p>Output values when converted to Integer.</p>
*/
private static final Integer[] OUTPUT_INTEGER = {
new Integer(0),
new Integer(0),
new Integer(1234),
new Integer(1),
new Integer(0),
new Integer(123),
new Integer(234),
new Integer(345),
new Integer(456),
new Integer(567),
new Integer(678)
};
/**
* <p>Output values when converted to String.</p>
*/
private static final String[] OUTPUT_STRING = {
"",
"",
"1234",
"true",
"false",
"123",
"234.0",
"345.0",
"456",
"567",
"678"
};
// ------------------------------------------------------ Instance Variables
/**
* <p>The expression factory to be tested.</p>
*/
private MockExpressionFactory factory = null;
// ------------------------------------------------- Individual Test Methods
// Test coercion when expectedType is passed as Boolean.
public void testCoerceToBoolean() {
Object result = null;
for (int i = 0; i < INPUT_VALUES.length; i++) {
try {
result = factory.coerceToType(INPUT_VALUES[i], Boolean.class);
if ((INPUT_VALUES[i] == null)
|| (INPUT_VALUES[i] instanceof String)
|| (INPUT_VALUES[i] instanceof Boolean)) {
assertEquals("[" + i + "]", OUTPUT_BOOLEAN[i], result);
} else {
fail("[" + i + "] should have thrown IllegalArgumentException");
}
} catch (IllegalArgumentException e) {
if ((INPUT_VALUES[i] == null)
|| (INPUT_VALUES[i] instanceof String)
|| (INPUT_VALUES[i] instanceof Boolean)) {
fail("[" + i + "] threw IllegalArgumentException");
} else {
; // Expected result
}
}
}
}
// Test coercion when expectedType is passed as null. We should
// get the original object back
public void testCoerceToNull() {
Object result = null;
for (int i = 0; i < INPUT_VALUES.length; i++) {
result = factory.coerceToType(INPUT_VALUES[i], null);
if (INPUT_VALUES[i] == null) {
assertNull(result);
} else {
assertTrue("[" + i + "]", result == INPUT_VALUES[i]);
}
}
}
// Test coercion when expectedType is Object. We should
// get the original object back.
public void testCoerceToObject() {
Object result = null;
for (int i = 0; i < INPUT_VALUES.length; i++) {
result = factory.coerceToType(INPUT_VALUES[i], Object.class);
if (INPUT_VALUES[i] == null) {
assertNull(result);
} else {
assertTrue("[" + i + "]", result == INPUT_VALUES[i]);
}
}
}
// Test coercion when expectedType is Integer
public void testCoerceToInteger() {
Object result = null;
for (int i = 0; i < INPUT_VALUES.length; i++) {
try {
result = factory.coerceToType(INPUT_VALUES[i], Integer.class);
if ((INPUT_VALUES[i] != null)
&& (INPUT_VALUES[i] instanceof Boolean)) {
fail("[" + i + "] should have thrown IllegalArgumentException");
} else {
assertEquals("[" + i + "]", OUTPUT_INTEGER[i], result);
}
} catch (IllegalArgumentException e) {
if ((INPUT_VALUES[i] != null)
&& (INPUT_VALUES[i] instanceof Boolean)) {
; // Expected result
} else {
fail("[" + i + "] should have thrown IllegalArgumentException");
}
}
}
}
// Test coercion when expectedType is String.
public void testCoerceToString() {
Object result = null;
for (int i = 0; i < INPUT_VALUES.length; i++) {
result = factory.coerceToType(INPUT_VALUES[i], String.class);
assertEquals("[" + i + "]", OUTPUT_STRING[i], result);
}
}
// Test ValueExpression that wraps a literal String object and conversion to Integer
public void testLiteralValueExpressionInteger() {
ELContext context = facesContext.getELContext();
ValueExpression expr = factory.createValueExpression("123", Integer.class);
assertEquals(Integer.class, expr.getExpectedType());
assertEquals(String.class, expr.getType(context));
assertEquals(new Integer(123), expr.getValue(context));
assertTrue(expr.isLiteralText());
assertTrue(expr.isReadOnly(context));
try {
expr.setValue(context, "234");
fail("Should have thrown PropertyNotWritableException");
} catch (PropertyNotWritableException e) {
; // Expected result
}
}
// Test ValueExpression that wraps a literal String object and no conversion
public void testLiteralValueExpressionNone() {
ELContext context = facesContext.getELContext();
ValueExpression expr = factory.createValueExpression("abc", String.class);
assertEquals(String.class, expr.getExpectedType());
assertEquals(String.class, expr.getType(context));
assertEquals("abc", expr.getValue(context));
assertTrue(expr.isLiteralText());
assertTrue(expr.isReadOnly(context));
try {
expr.setValue(context, "def");
fail("Should have thrown PropertyNotWritableException");
} catch (PropertyNotWritableException e) {
; // Expected result
}
}
// Test ValueExpression that wraps a literal Integer object and conversion to String
public void testLiteralValueExpressionString() {
ELContext context = facesContext.getELContext();
ValueExpression expr = factory.createValueExpression(new Integer(123), String.class);
assertEquals(String.class, expr.getExpectedType());
assertEquals(Integer.class, expr.getType(context));
assertEquals("123", expr.getValue(context));
assertTrue(expr.isLiteralText());
assertTrue(expr.isReadOnly(context));
try {
expr.setValue(context, new Integer(234));
fail("Should have thrown PropertyNotWritableException");
} catch (PropertyNotWritableException e) {
; // Expected result
}
}
// Test ValueExpression
public void testValueExpressionString() {
request.setAttribute("org.apache.shale.test", new Integer(123));
ELContext context = facesContext.getELContext();
ValueExpression expr = factory.createValueExpression(context, "#{requestScope['org.apache.shale.test']}", String.class);
Object ref = expr.getValue(context);
assertNotNull(ref);
assertTrue(ref instanceof String);
assertEquals("123", ref);
}
public void testPristine() {
assertNotNull(factory);
}
}