private void checkException(Exception ex, SpelMessage expectedMessage) { if (ex instanceof SpelEvaluationException) { SpelMessage sm = ((SpelEvaluationException) ex).getMessageCode(); assertEquals("Expected exception type did not occur", expectedMessage, sm); } else { fail("Should be a SpelException " + ex); } }
private void expectFail(ExpressionParser parser, EvaluationContext eContext, String expressionString, SpelMessage messageCode) { try { Expression e = parser.parseExpression(expressionString); SpelUtilities.printAbstractSyntaxTree(System.out, e); e.getValue(eContext); fail(); } catch (SpelEvaluationException see) { assertEquals(messageCode, see.getMessageCode()); } }
@Test // SPR-16731 public void testMatchesWithPatternAccessThreshold() { String pattern = "^(?=[a-z0-9-]{1,47})([a-z0-9]+[-]{0,1}){1,47}[a-z0-9]{1}$"; String expression = "'abcde-fghijklmn-o42pasdfasdfasdf.qrstuvwxyz10x.xx.yyy.zasdfasfd' matches \'" + pattern + "\'"; Expression expr = parser.parseExpression(expression); try { expr.getValue(); fail("Should have exceeded threshold"); } catch (EvaluationException ee) { SpelEvaluationException see = (SpelEvaluationException) ee; assertEquals(SpelMessage.FLAWED_PATTERN, see.getMessageCode()); assertTrue(see.getCause() instanceof IllegalStateException); } }
@Test public void increment04() { Integer i = 42; StandardEvaluationContext ctx = new StandardEvaluationContext(i); ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); try { Expression e = parser.parseExpression("++1"); e.getValue(ctx, Integer.class); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.NOT_ASSIGNABLE, see.getMessageCode()); } try { Expression e = parser.parseExpression("1++"); e.getValue(ctx, Integer.class); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.NOT_ASSIGNABLE, see.getMessageCode()); } }
@Test public void decrement04() { Integer i = 42; StandardEvaluationContext ctx = new StandardEvaluationContext(i); ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); try { Expression e = parser.parseExpression("--1"); e.getValue(ctx, Integer.class); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.NOT_ASSIGNABLE, see.getMessageCode()); } try { Expression e = parser.parseExpression("1--"); e.getValue(ctx, Integer.class); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.NOT_ASSIGNABLE, see.getMessageCode()); } }
@Test public void increment03() { Spr9751 helper = new Spr9751(); StandardEvaluationContext ctx = new StandardEvaluationContext(helper); ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); Expression e; e = parser.parseExpression("m()++"); try { e.getValue(ctx, Double.TYPE); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.OPERAND_NOT_INCREMENTABLE, see.getMessageCode()); } e = parser.parseExpression("++m()"); try { e.getValue(ctx, Double.TYPE); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.OPERAND_NOT_INCREMENTABLE, see.getMessageCode()); } }
@Test public void increment01root() { Integer i = 42; StandardEvaluationContext ctx = new StandardEvaluationContext(i); ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); Expression e = parser.parseExpression("#this++"); assertEquals(42,i.intValue()); try { e.getValue(ctx, Integer.class); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.NOT_ASSIGNABLE, see.getMessageCode()); } }
@Test public void testCallingIllegalFunctions() throws Exception { SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.setVariable("notStatic", this.getClass().getMethod("nonStatic")); try { @SuppressWarnings("unused") Object v = parser.parseRaw("#notStatic()").getValue(ctx); fail("Should have failed with exception - cannot call non static method that way"); } catch (SpelEvaluationException se) { if (se.getMessageCode() != SpelMessage.FUNCTION_MUST_BE_STATIC) { se.printStackTrace(); fail("Should have failed a message about the function needing to be static, not: " + se.getMessageCode()); } } }
@Test public void decrement03() { Spr9751 helper = new Spr9751(); StandardEvaluationContext ctx = new StandardEvaluationContext(helper); ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); Expression e; e = parser.parseExpression("m()--"); try { e.getValue(ctx, Double.TYPE); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.OPERAND_NOT_DECREMENTABLE, see.getMessageCode()); } e = parser.parseExpression("--m()"); try { e.getValue(ctx, Double.TYPE); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.OPERAND_NOT_DECREMENTABLE, see.getMessageCode()); } }
@Test public void decrement01root() { Integer i = 42; StandardEvaluationContext ctx = new StandardEvaluationContext(i); ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); Expression e = parser.parseExpression("#this--"); assertEquals(42, i.intValue()); try { e.getValue(ctx, Integer.class); fail(); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.NOT_ASSIGNABLE, see.getMessageCode()); } }
@Test public void testOperators() { ExpressionState state = getState(); try { state.operate(Operation.ADD,1,2); fail("should have failed"); } catch (EvaluationException ee) { SpelEvaluationException sEx = (SpelEvaluationException)ee; assertEquals(SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES, sEx.getMessageCode()); } try { state.operate(Operation.ADD,null,null); fail("should have failed"); } catch (EvaluationException ee) { SpelEvaluationException sEx = (SpelEvaluationException)ee; assertEquals(SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES, sEx.getMessageCode()); } }
if (ex.getMessageCode() != expectedMessage) { assertEquals("Failed to get expected message", expectedMessage, ex.getMessageCode());
assertEquals(SpelMessage.COLLECTION_INDEX_OUT_OF_BOUNDS, see.getMessageCode());
@Test public void limitCollectionGrowing() { TestClass instance = new TestClass(); StandardEvaluationContext ctx = new StandardEvaluationContext(instance); SpelExpressionParser parser = new SpelExpressionParser( new SpelParserConfiguration(true, true, 3)); Expression e = parser.parseExpression("foo[2]"); e.setValue(ctx, "2"); assertThat(instance.getFoo().size(), equalTo(3)); e = parser.parseExpression("foo[3]"); try { e.setValue(ctx, "3"); } catch (SpelEvaluationException see) { assertEquals(SpelMessage.UNABLE_TO_GROW_COLLECTION, see.getMessageCode()); assertThat(instance.getFoo().size(), equalTo(3)); } }
assertEquals(SpelMessage.TYPE_CONVERSION_ERROR, see.getMessageCode()); assertEquals(SpelMessage.SETVALUE_NOT_SUPPORTED, see.getMessageCode());
@Test public void testScenario_AddingYourOwnPropertyResolvers_2() throws Exception { // Create a parser SpelExpressionParser parser = new SpelExpressionParser(); // Use the standard evaluation context StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.addPropertyAccessor(new VegetableColourAccessor()); Expression expr = parser.parseRaw("pea"); Object value = expr.getValue(ctx); assertEquals(Color.green, value); try { expr.setValue(ctx, Color.blue); fail("Should not be allowed to set peas to be blue !"); } catch (SpelEvaluationException ee) { assertEquals(SpelMessage.PROPERTY_OR_FIELD_NOT_WRITABLE_ON_NULL, ee.getMessageCode()); } }
/** * Scenario: add a property resolver that will get called in the resolver chain, this one only supports reading. */ @Test public void testScenario_AddingYourOwnPropertyResolvers_1() throws Exception { // Create a parser SpelExpressionParser parser = new SpelExpressionParser(); // Use the standard evaluation context StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.addPropertyAccessor(new FruitColourAccessor()); Expression expr = parser.parseRaw("orange"); Object value = expr.getValue(ctx); assertEquals(Color.orange, value); try { expr.setValue(ctx, Color.blue); fail("Should not be allowed to set oranges to be blue !"); } catch (SpelEvaluationException ee) { assertEquals(SpelMessage.PROPERTY_OR_FIELD_NOT_WRITABLE_ON_NULL, ee.getMessageCode()); } }
@Test public void testImports() throws EvaluationException { StandardTypeLocator locator = new StandardTypeLocator(); assertEquals(Integer.class,locator.findType("java.lang.Integer")); assertEquals(String.class,locator.findType("java.lang.String")); List<String> prefixes = locator.getImportPrefixes(); assertEquals(1,prefixes.size()); assertTrue(prefixes.contains("java.lang")); assertFalse(prefixes.contains("java.util")); assertEquals(Boolean.class,locator.findType("Boolean")); // currently does not know about java.util by default // assertEquals(java.util.List.class,locator.findType("List")); try { locator.findType("URL"); fail("Should have failed"); } catch (EvaluationException ee) { SpelEvaluationException sEx = (SpelEvaluationException)ee; assertEquals(SpelMessage.TYPE_NOT_FOUND,sEx.getMessageCode()); } locator.registerImport("java.net"); assertEquals(java.net.URL.class,locator.findType("URL")); }
@Test public void testTypeLocator() throws EvaluationException { ExpressionState state = getState(); assertNotNull(state.getEvaluationContext().getTypeLocator()); assertEquals(Integer.class, state.findType("java.lang.Integer")); try { state.findType("someMadeUpName"); fail("Should have failed to find it"); } catch (EvaluationException ee) { SpelEvaluationException sEx = (SpelEvaluationException)ee; assertEquals(SpelMessage.TYPE_NOT_FOUND, sEx.getMessageCode()); } }
assertEquals(SpelMessage.NO_BEAN_RESOLVER_REGISTERED, see.getMessageCode()); assertEquals("foo", see.getInserts()[0]); assertEquals(SpelMessage.EXCEPTION_DURING_BEAN_RESOLUTION, see.getMessageCode()); assertEquals("goo", see.getInserts()[0]); assertTrue(see.getCause() instanceof AccessException);