001 /* 002 * $Id: ObjectIndexedTest.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 junit.framework.TestCase; 023 import junit.framework.TestSuite; 024 import org.apache.commons.ognl.Ognl; 025 import org.apache.commons.ognl.OgnlContext; 026 import org.apache.commons.ognl.OgnlException; 027 import org.apache.commons.ognl.OgnlRuntime; 028 import org.apache.commons.ognl.SimpleNode; 029 import org.junit.Before; 030 031 public class ObjectIndexedTest 032 extends TestCase 033 { 034 protected OgnlContext context; 035 036 /* 037 * =================================================================== Public static classes 038 * =================================================================== 039 */ 040 public static interface TestInterface 041 { 042 String getSunk( String index ); 043 044 void setSunk( String index, String sunk ); 045 } 046 047 public static class Test1 048 extends Object 049 implements TestInterface 050 { 051 public String getSunk( String index ) 052 { 053 return "foo"; 054 } 055 056 public void setSunk( String index, String sunk ) 057 { 058 /* do nothing */ 059 } 060 } 061 062 public static class Test2 063 extends Test1 064 { 065 public String getSunk( String index ) 066 { 067 return "foo"; 068 } 069 070 public void setSunk( String index, String sunk ) 071 { 072 /* do nothing */ 073 } 074 } 075 076 public static class Test3 077 extends Test1 078 { 079 public String getSunk( String index ) 080 { 081 return "foo"; 082 } 083 084 public void setSunk( String index, String sunk ) 085 { 086 /* do nothing */ 087 } 088 089 public String getSunk( Object index ) 090 { 091 return null; 092 } 093 } 094 095 public static class Test4 096 extends Test1 097 { 098 public String getSunk( String index ) 099 { 100 return "foo"; 101 } 102 103 public void setSunk( String index, String sunk ) 104 { 105 /* do nothing */ 106 } 107 108 public void setSunk( Object index, String sunk ) 109 { 110 /* do nothing */ 111 } 112 } 113 114 public static class Test5 115 extends Test1 116 { 117 public String getSunk( String index ) 118 { 119 return "foo"; 120 } 121 122 public void setSunk( String index, String sunk ) 123 { 124 /* do nothing */ 125 } 126 127 public String getSunk( Object index ) 128 { 129 return null; 130 } 131 132 public void setSunk( Object index, String sunk ) 133 { 134 /* do nothing */ 135 } 136 } 137 138 /* 139 * =================================================================== Public static methods 140 * =================================================================== 141 */ 142 public static TestSuite suite() 143 { 144 return new TestSuite( ObjectIndexedTest.class ); 145 } 146 147 /* 148 * =================================================================== Constructors 149 * =================================================================== 150 */ 151 public ObjectIndexedTest() 152 { 153 super(); 154 } 155 156 public ObjectIndexedTest( String name ) 157 { 158 super( name ); 159 } 160 161 /* 162 * =================================================================== Public methods 163 * =================================================================== 164 */ 165 public void testPropertyDescriptorReflection() 166 throws Exception 167 { 168 OgnlRuntime.getPropertyDescriptor( java.util.AbstractList.class, "" ); 169 OgnlRuntime.getPropertyDescriptor( java.util.AbstractSequentialList.class, "" ); 170 OgnlRuntime.getPropertyDescriptor( java.lang.reflect.Array.class, "" ); 171 OgnlRuntime.getPropertyDescriptor( java.util.ArrayList.class, "" ); 172 OgnlRuntime.getPropertyDescriptor( java.util.BitSet.class, "" ); 173 OgnlRuntime.getPropertyDescriptor( java.util.Calendar.class, "" ); 174 OgnlRuntime.getPropertyDescriptor( java.lang.reflect.Field.class, "" ); 175 OgnlRuntime.getPropertyDescriptor( java.util.LinkedList.class, "" ); 176 OgnlRuntime.getPropertyDescriptor( java.util.List.class, "" ); 177 OgnlRuntime.getPropertyDescriptor( java.util.Iterator.class, "" ); 178 OgnlRuntime.getPropertyDescriptor( java.lang.ThreadLocal.class, "" ); 179 OgnlRuntime.getPropertyDescriptor( java.net.URL.class, "" ); 180 OgnlRuntime.getPropertyDescriptor( java.util.Vector.class, "" ); 181 } 182 183 public void testObjectIndexAccess() 184 throws OgnlException 185 { 186 SimpleNode expression = (SimpleNode) Ognl.parseExpression( "#ka.sunk[#root]" ); 187 188 context.put( "ka", new Test1() ); 189 Ognl.getValue( expression, context, "aksdj" ); 190 } 191 192 public void testObjectIndexInSubclass() 193 throws OgnlException 194 { 195 SimpleNode expression = (SimpleNode) Ognl.parseExpression( "#ka.sunk[#root]" ); 196 197 context.put( "ka", new Test2() ); 198 Ognl.getValue( expression, context, "aksdj" ); 199 } 200 201 public void testMultipleObjectIndexGetters() 202 throws OgnlException 203 { 204 SimpleNode expression = (SimpleNode) Ognl.parseExpression( "#ka.sunk[#root]" ); 205 206 context.put( "ka", new Test3() ); 207 try 208 { 209 Ognl.getValue( expression, context, new Test3() ); 210 fail(); 211 } 212 catch ( OgnlException ex ) 213 { 214 /* Should throw */ 215 } 216 } 217 218 public void testMultipleObjectIndexSetters() 219 throws OgnlException 220 { 221 SimpleNode expression = (SimpleNode) Ognl.parseExpression( "#ka.sunk[#root]" ); 222 223 context.put( "ka", new Test4() ); 224 try 225 { 226 Ognl.getValue( expression, context, "aksdj" ); 227 fail(); 228 } 229 catch ( OgnlException ex ) 230 { 231 /* Should throw */ 232 } 233 } 234 235 public void testMultipleObjectIndexMethodPairs() 236 throws OgnlException 237 { 238 SimpleNode expression = (SimpleNode) Ognl.parseExpression( "#ka.sunk[#root]" ); 239 240 context.put( "ka", new Test5() ); 241 try 242 { 243 Ognl.getValue( expression, context, "aksdj" ); 244 fail(); 245 } 246 catch ( OgnlException ex ) 247 { 248 /* Should throw */ 249 } 250 } 251 252 /* 253 * =================================================================== Overridden methods 254 * =================================================================== 255 */ 256 @Override 257 @Before 258 protected void setUp() 259 { 260 context = (OgnlContext) Ognl.createDefaultContext( null ); 261 } 262 }