001 package org.apache.tapestry.enhance; 002 003 import ognl.Node; 004 import ognl.Ognl; 005 import ognl.OgnlContext; 006 import org.apache.tapestry.TestBase; 007 import org.apache.tapestry.services.impl.HiveMindExpressionCompiler; 008 import org.testng.annotations.Test; 009 010 /** 011 * Tests functionality of {@link org.apache.tapestry.services.impl.HiveMindExpressionCompiler}. 012 */ 013 @Test 014 public class TestHiveMindExpressionCompiler extends TestBase { 015 016 ClassFactoryImpl _classFactory = new ClassFactoryImpl(); 017 HiveMindExpressionCompiler _compiler = new HiveMindExpressionCompiler(_classFactory); 018 019 public void test_Duplicate_Class_Compiler() 020 throws Exception 021 { 022 OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null); 023 BasicObject root = new BasicObject(); 024 String expr = "name"; 025 Node expression = (Node) Ognl.parseExpression(expr); 026 027 _compiler.compileExpression(context, expression, root); 028 assert expression.getAccessor() != null; 029 assertEquals(expression.getAccessor().get(context, root), root.getName()); 030 031 Node expression2 = (Node) Ognl.parseExpression(expr); 032 033 _compiler.compileExpression(context, expression2, root); 034 assert expression2.getAccessor() != null; 035 assertEquals(expression2.getAccessor().get(context, root), root.getName()); 036 037 assertNotSame(expression2.getAccessor().getClass().getName(), expression.getAccessor().getClass().getName()); 038 } 039 040 public void test_Divide_By_Zero() 041 throws Exception 042 { 043 OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null); 044 String expr = "true ? 1 : 1/0"; 045 046 Node expression = (Node) Ognl.parseExpression(expr); 047 _compiler.compileExpression(context, expression, expr); 048 049 assertEquals(expression.getAccessor().get(context, null), Integer.valueOf(1)); 050 } 051 052 public void test_ClassFab_Generation_Count_With_Uncompilable_Expression() 053 throws Exception 054 { 055 OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null); 056 BasicObject root = new BasicObject(); 057 058 String exprStr = "user != null && user.name != null ? user.name : name"; 059 Node expression = (Node) Ognl.parseExpression(exprStr); 060 061 int prevCount = _classFactory._classCounter; 062 063 _compiler.compileExpression(context, expression, root); 064 assert expression.getAccessor() == null; 065 066 assertEquals(_classFactory._classCounter, prevCount); 067 068 root.setUser(new User()); 069 070 _compiler.compileExpression(context, expression, root); 071 assert expression.getAccessor() != null; 072 073 assertEquals(_classFactory._classCounter, prevCount + 1); 074 } 075 076 public void test_ClassFab_Generation_Count_With_Uncompilable_Expression2() 077 throws Exception 078 { 079 OgnlContext context = (OgnlContext) Ognl.createDefaultContext(null); 080 BasicObject root = new BasicObject(); 081 082 String exprStr = "user ? user.name : name"; 083 Node expression = (Node) Ognl.parseExpression(exprStr); 084 085 int prevCount = _classFactory._classCounter; 086 087 _compiler.compileExpression(context, expression, root); 088 assert expression.getAccessor() == null; 089 090 assertEquals(_classFactory._classCounter, prevCount); 091 092 root.setUser(new User()); 093 094 _compiler.compileExpression(context, expression, root); 095 assert expression.getAccessor() != null; 096 097 assertEquals(_classFactory._classCounter, prevCount + 1); 098 } 099 }