package com.codiform.moo; import org.junit.Assert; import org.junit.Test; import org.mvel2.MVEL; public class MvelNullSafetyTest { @Test public void testMvelExpression() { Person person = new Person( "Moonunit", "Zappa", new Person( "Frank", "Zappa", null ) ); Assert.assertEquals( "Frank", MVEL.eval( "parent.firstName", person ) ); } @Test public void testMvelNullSafeInitialExpressionWithNull() { Person person = new Person( "Moonunit", "Zappa", null ); Assert.assertNull( MVEL.eval( "?parent.firstName", person ) ); } @Test public void testMvelNullSafeInitialExpressionWithoutNull() { Person person = new Person( "Moonunit", "Zappa", new Person( "Frank", "Zappa", null ) ); Assert.assertEquals( "Frank", MVEL.eval( "?parent.firstName", person ) ); } @Test public void testMvelNullSafeSubExpressionWithNull() { Person person = new Person( "Moonunit", "Zappa", new Person( "Frank", "Zappa", null ) ); Assert.assertEquals( null, MVEL.eval( "parent.?parent.firstName", person ) ); } @Test public void testMvelNullSafeSubExpressionWithoutNull() { Person person = new Person( "Moonunit", "Zappa", new Person( "Frank", "Zappa", new Person( "Francis", "Zappa", null ) ) ); Assert.assertEquals( "Francis", MVEL.eval( "parent.?parent.firstName", person ) ); } @Test public void testMvelNullSafeSubExpressionAndMethodWithNull() { Person person = new Person( "Moonunit", "Zappa", new Person( "Frank", null, null ) ); Assert.assertEquals( null, MVEL.eval( "parent.?lastName.length()", person ) ); } @Test public void testMvelNullSafeSubExpressionAndMethodWithNull2() { Person person = new Person( "Moonunit", "Zappa", null ); Assert.assertEquals( null, MVEL.eval( "?parent.?lastName.length()", person ) ); } @Test public void testMvelNullSafeSubExpressionAndMethodWithoutNull() { Person person = new Person( "Moonunit", "Zappa", new Person( "Frank", "Zappa", null ) ); Assert.assertEquals( 5, MVEL.eval( "parent.?lastName.length()", person ) ); } public static class Person { private String firstName, lastName; private Person parent; public Person( String firstName, String lastName, Person parent ) { this.firstName = firstName; this.lastName = lastName; this.parent = parent; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } public Person getParent() { return parent; } } }