001 /* 002 * Copyright (C) Christian Schulte, 2005-206 003 * All rights reserved. 004 * 005 * Redistribution and use in source and binary forms, with or without 006 * modification, are permitted provided that the following conditions 007 * are met: 008 * 009 * o Redistributions of source code must retain the above copyright 010 * notice, this list of conditions and the following disclaimer. 011 * 012 * o Redistributions in binary form must reproduce the above copyright 013 * notice, this list of conditions and the following disclaimer in 014 * the documentation and/or other materials provided with the 015 * distribution. 016 * 017 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 018 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 019 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 020 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 021 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 022 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 023 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 024 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 025 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 026 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 027 * 028 * $JOMC: PropertyTest.java 3851 2011-10-10 16:25:09Z schulte2005 $ 029 * 030 */ 031 package org.jomc.model.test; 032 033 import java.lang.reflect.InvocationTargetException; 034 import org.jomc.model.Property; 035 import org.jomc.model.PropertyException; 036 import org.junit.Test; 037 import static org.junit.Assert.assertNotNull; 038 import static org.junit.Assert.assertNull; 039 import static org.junit.Assert.assertTrue; 040 import static org.junit.Assert.fail; 041 042 /** 043 * Test cases for class {@code org.jomc.model.Property}. 044 * 045 * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 1.0 046 * @version $JOMC: PropertyTest.java 3851 2011-10-10 16:25:09Z schulte2005 $ 047 */ 048 public class PropertyTest 049 { 050 051 public abstract static class AbstractJavaValue 052 { 053 054 public AbstractJavaValue( final String value ) 055 { 056 super(); 057 } 058 059 } 060 061 public static class UnsupportedJavaValue 062 { 063 064 public UnsupportedJavaValue() 065 { 066 super(); 067 } 068 069 public UnsupportedJavaValue( final String value ) 070 { 071 super(); 072 throw new UnsupportedOperationException(); 073 } 074 075 public Object getJavaValue( final ClassLoader classLoader ) 076 { 077 throw new UnsupportedOperationException(); 078 } 079 080 } 081 082 public static class ObjectJavaValue 083 { 084 085 public Object getJavaValue( final ClassLoader classLoader ) 086 { 087 return new Object(); 088 } 089 090 } 091 092 private static class InaccessibleJavaValue 093 { 094 095 private InaccessibleJavaValue( final String value ) 096 { 097 super(); 098 } 099 100 private Object getJavaValue( final ClassLoader classLoader ) 101 { 102 return null; 103 } 104 105 } 106 107 /** Creates a new {@code PropertyTest} instance. */ 108 public PropertyTest() 109 { 110 super(); 111 } 112 113 @Test 114 public final void testGetJavaValue() throws Exception 115 { 116 final Property p = new Property(); 117 assertNull( p.getJavaValue( this.getClass().getClassLoader() ) ); 118 119 p.setAny( new Object() ); 120 121 try 122 { 123 p.getJavaValue( this.getClass().getClassLoader() ); 124 fail( "Expected ModelException not thrown for missing mandatory type." ); 125 } 126 catch ( final PropertyException e ) 127 { 128 assertNotNull( e.getMessage() ); 129 System.out.println( e ); 130 } 131 132 p.setType( UnsupportedJavaValue.class.getName() ); 133 p.setAny( new UnsupportedJavaValue() ); 134 135 try 136 { 137 p.getJavaValue( this.getClass().getClassLoader() ); 138 fail( "Expected ModelException not thrown for unsupported getJavaValue operation." ); 139 } 140 catch ( final PropertyException e ) 141 { 142 assertNotNull( e.getMessage() ); 143 assertTrue( e.getCause() instanceof InvocationTargetException ); 144 System.out.println( e ); 145 System.out.println( e.getCause() ); 146 } 147 148 p.setType( Object.class.getName() ); 149 p.setAny( new Object() 150 { 151 152 public Object getJavaValue( final ClassLoader classLoader ) 153 { 154 return new Object(); 155 } 156 157 } ); 158 159 try 160 { 161 p.getJavaValue( this.getClass().getClassLoader() ); 162 fail( "Expected ModelException not thrown for inaccessible getJavaValue method." ); 163 } 164 catch ( final PropertyException e ) 165 { 166 assertNotNull( e.getMessage() ); 167 System.out.println( e ); 168 System.out.println( e.getCause() ); 169 } 170 171 p.setType( "java.lang.String" ); 172 p.setAny( new ObjectJavaValue() ); 173 174 try 175 { 176 p.getJavaValue( this.getClass().getClassLoader() ); 177 fail( "Expected ModelException not thrown for incompatible getJavaValue method." ); 178 } 179 catch ( final PropertyException e ) 180 { 181 assertNotNull( e.getMessage() ); 182 System.out.println( e ); 183 } 184 185 p.setType( "int" ); 186 p.setAny( null ); 187 p.setValue( null ); 188 189 try 190 { 191 p.getJavaValue( this.getClass().getClassLoader() ); 192 fail( "Expected ModelException not thrown for mandatory primitive value." ); 193 } 194 catch ( final PropertyException e ) 195 { 196 assertNotNull( e.getMessage() ); 197 System.out.println( e ); 198 } 199 200 p.setType( "DOES_NOT_EXIST" ); 201 p.setAny( null ); 202 p.setValue( "STRING VALUE" ); 203 204 try 205 { 206 p.getJavaValue( this.getClass().getClassLoader() ); 207 fail( "Expected ModelException not thrown for missing class." ); 208 } 209 catch ( final PropertyException e ) 210 { 211 assertNotNull( e.getMessage() ); 212 System.out.println( e ); 213 } 214 215 p.setType( "char" ); 216 p.setValue( "NO CHAR VALUE" ); 217 218 try 219 { 220 p.getJavaValue( this.getClass().getClassLoader() ); 221 fail( "Expected ModelException not thrown for illegal char value." ); 222 } 223 catch ( final PropertyException e ) 224 { 225 assertNotNull( e.getMessage() ); 226 System.out.println( e ); 227 } 228 229 p.setType( AbstractJavaValue.class.getName() ); 230 p.setAny( null ); 231 p.setValue( "STRING VALUE" ); 232 233 try 234 { 235 p.getJavaValue( this.getClass().getClassLoader() ); 236 fail( "Expected ModelException not thrown for non-instantiable class." ); 237 } 238 catch ( final PropertyException e ) 239 { 240 assertNotNull( e.getMessage() ); 241 System.out.println( e ); 242 } 243 244 p.setType( ObjectJavaValue.class.getName() ); 245 p.setAny( null ); 246 p.setValue( "STRING VALUE" ); 247 248 try 249 { 250 p.getJavaValue( this.getClass().getClassLoader() ); 251 fail( "Expected ModelException not thrown for missing constructor." ); 252 } 253 catch ( final PropertyException e ) 254 { 255 assertNotNull( e.getMessage() ); 256 System.out.println( e ); 257 } 258 259 p.setType( UnsupportedJavaValue.class.getName() ); 260 p.setAny( null ); 261 p.setValue( "STRING VALUE" ); 262 263 try 264 { 265 p.getJavaValue( this.getClass().getClassLoader() ); 266 fail( "Expected ModelException not thrown for unsupported constructor." ); 267 } 268 catch ( final PropertyException e ) 269 { 270 assertNotNull( e.getMessage() ); 271 System.out.println( e ); 272 } 273 274 p.setType( InaccessibleJavaValue.class.getName() ); 275 p.setAny( null ); 276 p.setValue( "STRING VALUE" ); 277 278 try 279 { 280 p.getJavaValue( this.getClass().getClassLoader() ); 281 fail( "Expected ModelException not thrown for inaccessible constructor." ); 282 } 283 catch ( final PropertyException e ) 284 { 285 assertNotNull( e.getMessage() ); 286 System.out.println( e ); 287 } 288 } 289 290 }