/* * 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 javax.el; import java.util.List; import javax.el.TesterEvaluationListener.Pair; import org.junit.Assert; import org.junit.Test; public class TestELContext { /** * Tests that a null key results in an NPE as per EL Javadoc. */ @Test(expected = NullPointerException.class) public void testGetContext() { ELContext elContext = new TesterELContext(); elContext.getContext(null); } /** * Tests that a null key results in an NPE as per EL Javadoc. */ @Test(expected = NullPointerException.class) public void testPutContext01() { ELContext elContext = new TesterELContext(); elContext.putContext(null, new Object()); } /** * Tests that a null context results in an NPE as per EL Javadoc. */ @Test(expected = NullPointerException.class) public void testPutContext02() { ELContext elContext = new TesterELContext(); elContext.putContext(Object.class, null); } /** * Tests that the context object will be added to the map with context * objects. The key is used as unique identifier of the context object in * the map. */ @Test public void testPutContext03() { ELContext elContext = new TesterELContext(); Assert.assertNull(elContext.getContext(String.class)); elContext.putContext(String.class, "test"); Assert.assertEquals("test", elContext.getContext(String.class)); elContext.putContext(String.class, "test1"); Assert.assertEquals("test1", elContext.getContext(String.class)); } /** * Tests that propertyResolved will be set to true and the corresponding * listeners will be notified. */ @Test public void testSetPropertyResolved() { ELContext elContext = new TesterELContext(); TesterEvaluationListener listener = new TesterEvaluationListener(); elContext.addEvaluationListener(listener); TesterBean bean = new TesterBean("test"); elContext.setPropertyResolved(bean, "name"); Assert.assertTrue(elContext.isPropertyResolved()); List<Pair> events = listener.getResolvedProperties(); Assert.assertEquals(1, events.size()); Pair p = events.get(0); Assert.assertEquals(bean, p.getBase()); Assert.assertEquals("name", p.getProperty()); } /** * Tests that the corresponding listeners will be notified. */ @Test public void testNotifyBeforeEvaluation() { ELContext elContext = new TesterELContext(); TesterEvaluationListener listener = new TesterEvaluationListener(); elContext.addEvaluationListener(listener); elContext.notifyBeforeEvaluation("before"); List<String> events = listener.getBeforeEvaluationExpressions(); Assert.assertEquals(1, events.size()); Assert.assertEquals("before", events.get(0)); } /** * Tests that the corresponding listeners will be notified. */ @Test public void testNotifyAfterEvaluation() { ELContext elContext = new TesterELContext(); TesterEvaluationListener listener = new TesterEvaluationListener(); elContext.addEvaluationListener(listener); elContext.notifyAfterEvaluation("after"); List<String> events = listener.getAfterEvaluationExpressions(); Assert.assertEquals(1, events.size()); Assert.assertEquals("after", events.get(0)); } /** * Tests not compatible object and type. */ @Test(expected = ELException.class) public void testConvertToType01() { ELContext elContext = new TesterELContext(); elContext.convertToType("test", Integer.class); } /** * Tests that if there is no ELResolver the standard coercions will be * invoked. */ @Test public void testConvertToType02() { ELContext elContext = new TesterELContext(); boolean originalPropertyResolved = false; elContext.setPropertyResolved(originalPropertyResolved); Object result = elContext.convertToType("test", String.class); Assert.assertEquals("test", result); Assert.assertTrue(originalPropertyResolved == elContext .isPropertyResolved()); } /** * Tests that if there is ELResolver it will handle the conversion. If this * resolver cannot return a result the standard coercions will be invoked. */ @Test public void testConvertToType03() { ELContext elContext = new TesterELContext(new TesterELResolverOne()); boolean originalPropertyResolved = false; elContext.setPropertyResolved(originalPropertyResolved); Object result = elContext.convertToType("1", String.class); Assert.assertEquals("ONE", result); Assert.assertTrue(originalPropertyResolved == elContext .isPropertyResolved()); result = elContext.convertToType("test", String.class); Assert.assertEquals("test", result); Assert.assertTrue(originalPropertyResolved == elContext .isPropertyResolved()); } }