package org.mvel2.tests.core.osgi; import junit.framework.TestCase; import org.mvel2.MVEL; import org.mvel2.ParserConfiguration; import org.mvel2.ParserContext; import org.mvel2.optimizers.dynamic.DynamicOptimizer; import java.io.Serializable; public class AsmOptimizerOsgiTest extends TestCase { private static ClassLoader NO_MVEL_CL = new NoMvelClassLoader(); private static class NoMvelClassLoader extends ClassLoader { public NoMvelClassLoader() { super(null); } }; public void testCollectionAccessWithInvalidThreadClassLoader() { String expression = "['A', 'B', 'C'] contains 'B'"; ParserConfiguration parserConfiguration = new ParserConfiguration(); parserConfiguration.setClassLoader(MVEL.class.getClassLoader()); Serializable compiledExpression = MVEL.compileExpression(expression, new ParserContext(parserConfiguration)); ClassLoader currentCl = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(NO_MVEL_CL); for (int i = 0; i <= DynamicOptimizer.tenuringThreshold; i++) { Object result = MVEL.executeExpression(compiledExpression); assertEquals(Boolean.TRUE, result); } } finally { Thread.currentThread().setContextClassLoader(currentCl); } } }