001 /* 002 * $Id: PropertyNotFoundTest.java 1104080 2011-05-17 09:22:09Z mcucchiara $ 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 */ 020 package org.apache.commons.ognl.test; 021 022 import java.util.ArrayList; 023 import java.util.Collection; 024 import java.util.Map; 025 026 import org.apache.commons.ognl.OgnlContext; 027 import org.apache.commons.ognl.OgnlException; 028 import org.apache.commons.ognl.OgnlRuntime; 029 import org.apache.commons.ognl.PropertyAccessor; 030 import org.junit.Before; 031 import org.junit.runner.RunWith; 032 import org.junit.runners.Parameterized; 033 import org.junit.runners.Parameterized.Parameters; 034 035 @RunWith(value = Parameterized.class) 036 public class PropertyNotFoundTest 037 extends OgnlTestCase 038 { 039 private static final Blah BLAH = new Blah(); 040 041 private static Object[][] TESTS = { { BLAH, "webwork.token.name", OgnlException.class, "W value", 042 OgnlException.class }, }; 043 044 /* 045 * =================================================================== Public static classes 046 * =================================================================== 047 */ 048 public static class Blah 049 { 050 String x; 051 052 String y; 053 054 public String getX() 055 { 056 return x; 057 } 058 059 public void setX( String x ) 060 { 061 this.x = x; 062 } 063 064 public String getY() 065 { 066 return y; 067 } 068 069 public void setY( String y ) 070 { 071 this.y = y; 072 } 073 } 074 075 public static class BlahPropertyAccessor 076 implements PropertyAccessor 077 { 078 public void setProperty( Map context, Object target, Object name, Object value ) 079 throws OgnlException 080 { 081 } 082 083 public Object getProperty( Map context, Object target, Object name ) 084 throws OgnlException 085 { 086 if ( "x".equals( name ) || "y".equals( name ) ) 087 { 088 return OgnlRuntime.getProperty( (OgnlContext) context, target, name ); 089 } 090 return null; 091 } 092 093 public String getSourceAccessor( OgnlContext context, Object target, Object index ) 094 { 095 return index.toString(); 096 } 097 098 public String getSourceSetter( OgnlContext context, Object target, Object index ) 099 { 100 return index.toString(); 101 } 102 } 103 104 /* 105 * =================================================================== Public static methods 106 * =================================================================== 107 */ 108 @Parameters 109 public static Collection<Object[]> data() 110 { 111 Collection<Object[]> data = new ArrayList<Object[]>(TESTS.length); 112 for ( int i = 0; i < TESTS.length; i++ ) 113 { 114 Object[] tmp = new Object[6]; 115 tmp[0] = TESTS[i][1]; 116 tmp[1] = TESTS[i][0]; 117 tmp[2] = TESTS[i][1]; 118 119 switch ( TESTS[i].length ) 120 { 121 case 3: 122 tmp[3] = TESTS[i][2]; 123 break; 124 125 case 4: 126 tmp[3] = TESTS[i][2]; 127 tmp[4] = TESTS[i][3]; 128 break; 129 130 case 5: 131 tmp[3] = TESTS[i][2]; 132 tmp[4] = TESTS[i][3]; 133 tmp[5] = TESTS[i][4]; 134 break; 135 136 default: 137 throw new RuntimeException( "don't understand TEST format with length " + TESTS[i].length ); 138 } 139 140 data.add( tmp ); 141 } 142 return data; 143 } 144 145 /* 146 * =================================================================== Constructors 147 * =================================================================== 148 */ 149 public PropertyNotFoundTest( String name, Object root, String expressionString, Object expectedResult, 150 Object setValue, Object expectedAfterSetResult ) 151 { 152 super( name, root, expressionString, expectedResult, setValue, expectedAfterSetResult ); 153 } 154 155 @Before 156 @Override 157 public void setUp() 158 { 159 super.setUp(); 160 OgnlRuntime.setPropertyAccessor( Blah.class, new BlahPropertyAccessor() ); 161 } 162 }