JavaClassRefTests.st
branchdirectory_structure_refactoring
changeset 1818 2e5ed72e7dfd
parent 1532 ae63ecbd509e
child 1828 26ffca447086
equal deleted inserted replaced
1817:b86c40afbf1f 1818:2e5ed72e7dfd
       
     1 "
       
     2  COPYRIGHT (c) 1996-2011 by Claus Gittinger
       
     3 
       
     4  New code and modifications done at SWING Research Group [1]:
       
     5 
       
     6  COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
       
     7                             SWING Research Group, Czech Technical University in Prague
       
     8 
       
     9  This software is furnished under a license and may be used
       
    10  only in accordance with the terms of that license and with the
       
    11  inclusion of the above copyright notice.   This software may not
       
    12  be provided or otherwise made available to, or used by, any
       
    13  other person.  No title to or ownership of the software is
       
    14  hereby transferred.
       
    15 
       
    16  [1] Code written at SWING Research Group contains a signature
       
    17      of one of the above copright owners. For exact set of such code,
       
    18      see the differences between this version and version stx:libjava
       
    19      as of 1.9.2010
       
    20 "
       
    21 "{ Package: 'stx:libjava' }"
       
    22 
       
    23 JavaRefsAndConstantPoolTestCase subclass:#JavaClassRefTests
       
    24 	instanceVariableNames:''
       
    25 	classVariableNames:''
       
    26 	poolDictionaries:''
       
    27 	category:'Languages-Java-Tests-RuntimeConstantPool'
       
    28 !
       
    29 
       
    30 !JavaClassRefTests class methodsFor:'documentation'!
       
    31 
       
    32 copyright
       
    33 "
       
    34  COPYRIGHT (c) 1996-2011 by Claus Gittinger
       
    35 
       
    36  New code and modifications done at SWING Research Group [1]:
       
    37 
       
    38  COPYRIGHT (c) 2010-2011 by Jan Vrany, Jan Kurs and Marcel Hlopko
       
    39                             SWING Research Group, Czech Technical University in Prague
       
    40 
       
    41  This software is furnished under a license and may be used
       
    42  only in accordance with the terms of that license and with the
       
    43  inclusion of the above copyright notice.   This software may not
       
    44  be provided or otherwise made available to, or used by, any
       
    45  other person.  No title to or ownership of the software is
       
    46  hereby transferred.
       
    47 
       
    48  [1] Code written at SWING Research Group contains a signature
       
    49      of one of the above copright owners. For exact set of such code,
       
    50      see the differences between this version and version stx:libjava
       
    51      as of 1.9.2010
       
    52 
       
    53 "
       
    54 ! !
       
    55 
       
    56 !JavaClassRefTests methodsFor:'arrays'!
       
    57 
       
    58 testCorrectArrayCreation
       
    59     | classRef  result  expectedResult |
       
    60     classRef := self getClassRefNamed: '[Ljava/lang/Object;'.
       
    61     result := classRef resolve.
       
    62     expectedResult := JavaArray 
       
    63             javaArrayClassFor: (Java classForName: 'java.lang.Object').
       
    64     self assertTrue: (result = expectedResult).
       
    65 
       
    66     "Created: / 23-05-2011 / 21:15:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
    67 !
       
    68 
       
    69 testCorrectMultiArrayCreation
       
    70     | classRef  result  expectedResult |
       
    71     classRef := self getClassRefNamed: '[[Ljava/lang/Object;'.
       
    72     result := classRef resolve.
       
    73     expectedResult := JavaArray javaArrayClassFor: (JavaArray 
       
    74                     javaArrayClassFor: (Java classForName: 'java.lang.Object')).
       
    75     self assertTrue: (result name = expectedResult name).
       
    76 
       
    77     "Created: / 23-05-2011 / 21:15:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
    78 ! !
       
    79 
       
    80 !JavaClassRefTests methodsFor:'permission tests'!
       
    81 
       
    82 testAccessingNonPublicFromInside
       
    83     | javaClassRef  initString  throwedException |
       
    84 
       
    85     self enableMockedExceptionThrowing.
       
    86     
       
    87     [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
       
    88     javaClassRef := self getClassRefNamed: initString.
       
    89     javaClassRef owner: (Java classForName: 'stx.libjava.tests.mocks.Crate').
       
    90     javaClassRef resolve. ] on: Error
       
    91             do: [:e | throwedException := e ].
       
    92     self assertTrue: (throwedException isNil).
       
    93     self disableMockedExceptionThrowing.
       
    94 
       
    95     "Created: / 13-04-2011 / 13:42:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
    96     "Modified: / 23-05-2011 / 17:58:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
    97 !
       
    98 
       
    99 testAccessingNonPublicFromOutside
       
   100     | javaClassRef  initString  throwedException |
       
   101 
       
   102     self enableMockedExceptionThrowing.
       
   103     
       
   104     [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
       
   105     javaClassRef := self getClassRefNamed: initString.
       
   106     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   107     javaClassRef resolve. ] on: Error
       
   108             do: [:e | throwedException := e ].
       
   109     self assertTrue: (throwedException notNil 
       
   110                 and: [ throwedException messageText = 'IllegalAccessError' ]).
       
   111     self disableMockedExceptionThrowing.
       
   112 
       
   113     "Created: / 13-04-2011 / 13:37:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   114     "Modified: / 23-05-2011 / 17:58:22 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   115 !
       
   116 
       
   117 testAccessingPublic
       
   118     | javaClassRef  initString |
       
   119 
       
   120     self enableMockedExceptionThrowing.
       
   121     self shouldnt: 
       
   122             [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
       
   123             javaClassRef := self getClassRefNamed: initString.
       
   124             javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   125             javaClassRef resolve. ]
       
   126         raise: Error.
       
   127     self disableMockedExceptionThrowing.
       
   128 
       
   129     "Created: / 13-04-2011 / 13:36:33 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   130     "Modified: / 23-05-2011 / 17:58:24 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   131 !
       
   132 
       
   133 testNonPublicClassPresent
       
   134     | javaClassRef  initString |
       
   135 
       
   136     self enableMockedExceptionThrowing.
       
   137     initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
       
   138     javaClassRef := self getClassRefNamed: initString.
       
   139     javaClassRef owner: (Java 
       
   140                 classForName: 'stx.libjava.tests.mocks.SubclassOfNonPublicClass').
       
   141     javaClassRef resolve.
       
   142     self assertTrue: (javaClassRef valueCache notNil).
       
   143     self disableMockedExceptionThrowing.
       
   144 
       
   145     "Created: / 13-04-2011 / 13:38:49 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   146     "Modified: / 23-05-2011 / 17:58:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   147 !
       
   148 
       
   149 testPublicClassPresent
       
   150     | javaClassRef  initString |
       
   151 
       
   152     self enableMockedExceptionThrowing.
       
   153     initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
       
   154     javaClassRef := self getClassRefNamed: initString.
       
   155     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   156     javaClassRef resolve.
       
   157     self assertTrue: (javaClassRef valueCache notNil).
       
   158     self disableMockedExceptionThrowing.
       
   159 
       
   160     "Created: / 13-04-2011 / 13:39:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   161     "Modified: / 23-05-2011 / 17:58:29 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   162 ! !
       
   163 
       
   164 !JavaClassRefTests methodsFor:'primitives'!
       
   165 
       
   166 testAllPrimitiveArrayClasses
       
   167     | classRef  descriptor |
       
   168 
       
   169     #( $B $D $F $I $J $S $Z ) do: 
       
   170             [:each | 
       
   171             descriptor := '[' , each.
       
   172             classRef := self getClassRefNamed: descriptor.
       
   173             self assertTrue: ((JavaDescriptor readFromString: descriptor) javaClass 
       
   174                         = classRef resolve) ].
       
   175 
       
   176     "Created: / 23-05-2011 / 20:49:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   177 !
       
   178 
       
   179 testAllPrimitiveClasses
       
   180     | classRef |
       
   181 
       
   182     #( $B $C $D $F $I $J $S $Z )
       
   183         do: 
       
   184             [:each | 
       
   185 
       
   186             classRef := self getClassRefNamed: each asString.
       
   187             self assertTrue: ((JavaDescriptor baseTypes at: each) = classRef resolve) ].
       
   188 
       
   189     "Created: / 23-05-2011 / 20:48:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   190 !
       
   191 
       
   192 testAllPrimitiveMultiArrayClasses
       
   193     | classRef  descriptor |
       
   194     #( $B $D $F $I $J $S $Z ) do: [
       
   195         :each | 
       
   196         descriptor := '[[[[' , each.
       
   197         classRef := self getClassRefNamed: descriptor.
       
   198         self assertTrue: ((JavaDescriptor readFromString: descriptor) javaClass name
       
   199                     = classRef resolve name)
       
   200     ].
       
   201 
       
   202     "Created: / 23-05-2011 / 20:50:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   203 ! !
       
   204 
       
   205 !JavaClassRefTests methodsFor:'resolving static tests'!
       
   206 
       
   207 testCorrectStaticResolving
       
   208     | javaClassRef  initString  result  expectedResult |
       
   209     initString := 'Lstx/libjava/tests/mocks/ClassWithInnerClasses$InnerStatic;'.
       
   210     javaClassRef := self getClassRefNamed: initString.
       
   211     javaClassRef 
       
   212         owner: (Java classForName: 'stx.libjava.tests.mocks.ClassWithInnerClasses').
       
   213     expectedResult := Java 
       
   214                 classForName: 'stx.libjava.tests.mocks.ClassWithInnerClasses$InnerStatic'.
       
   215     result := javaClassRef resolve.
       
   216     self assertTrue: (result = expectedResult).
       
   217 
       
   218     "Created: / 28-04-2011 / 21:51:26 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   219     "Modified: / 08-12-2011 / 19:24:46 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   220 ! !
       
   221 
       
   222 !JavaClassRefTests methodsFor:'resolving tests'!
       
   223 
       
   224 testCorrectInstanceCreation
       
   225     | javaClassRef  initString |
       
   226 
       
   227     initString := 'Ljava/lang/String;'.
       
   228     javaClassRef := self getClassRefNamed: initString.
       
   229     self assertFalse: (javaClassRef isResolved).
       
   230     self assertTrue: (javaClassRef valueCache isNil).
       
   231     self assertTrue: (javaClassRef name = initString).
       
   232 
       
   233     "Created: / 08-04-2011 / 14:01:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   234     "Modified: / 23-05-2011 / 17:58:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   235 !
       
   236 
       
   237 testCorrectResolving
       
   238     | javaClassRef  initString  result  expectedResult |
       
   239 
       
   240     initString := 'Ljava/lang/String;'.
       
   241     javaClassRef := self getClassRefNamed: initString.
       
   242     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   243     expectedResult := Java classForName: 'java.lang.String'.
       
   244     result := javaClassRef resolve.
       
   245     self assertTrue: (result = expectedResult).
       
   246 
       
   247     "Created: / 08-04-2011 / 14:07:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   248     "Modified: / 23-05-2011 / 17:58:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   249 !
       
   250 
       
   251 testInvalidation
       
   252     | javaClassRef  initString |
       
   253 
       
   254     initString := 'Ljava/lang/String;'.
       
   255     javaClassRef := self getClassRefNamed: initString.
       
   256     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   257     self assertTrue: (javaClassRef isResolved not).
       
   258     javaClassRef resolve.
       
   259     self assertTrue: (javaClassRef isResolved).
       
   260     javaClassRef invalidate.
       
   261     self assertTrue: (javaClassRef isResolved not).
       
   262 
       
   263     "Created: / 08-04-2011 / 14:09:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   264     "Modified: / 23-05-2011 / 17:58:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   265 !
       
   266 
       
   267 testInvalidationForClassNegative
       
   268     | javaClassRef  initString |
       
   269 
       
   270     initString := 'Ljava/lang/String;'.
       
   271     javaClassRef := self getClassRefNamed: initString.
       
   272     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   273     self assertTrue: (javaClassRef isResolved not).
       
   274     javaClassRef resolve.
       
   275     self assertTrue: (javaClassRef isResolved).
       
   276     javaClassRef invalidateForClass: 'Ljava/lang/Object;'.
       
   277     self assertTrue: (javaClassRef isResolved).
       
   278 
       
   279     "Created: / 08-04-2011 / 16:21:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   280     "Modified: / 23-05-2011 / 17:58:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   281 !
       
   282 
       
   283 testInvalidationForClassPositive
       
   284     | javaClassRef  initString |
       
   285 
       
   286     initString := 'Ljava/lang/String;'.
       
   287     javaClassRef := self getClassRefNamed: initString.
       
   288     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   289     self assertTrue: (javaClassRef isResolved not).
       
   290     javaClassRef resolve.
       
   291     self assertTrue: (javaClassRef isResolved).
       
   292     javaClassRef invalidateForClass: initString.
       
   293     self assertTrue: (javaClassRef isResolved not).
       
   294 
       
   295     "Created: / 08-04-2011 / 16:21:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   296     "Modified: / 23-05-2011 / 17:57:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   297 !
       
   298 
       
   299 testResolving
       
   300     | javaClassRef  initString |
       
   301 
       
   302     initString := 'Ljava/lang/String;'.
       
   303     javaClassRef := self getClassRefNamed: initString.
       
   304     javaClassRef owner: (Java classForName: 'java.lang.Object').
       
   305     self assertTrue: (javaClassRef isResolved not).
       
   306     javaClassRef resolve.
       
   307     self assertTrue: (javaClassRef isResolved).
       
   308 
       
   309     "Created: / 08-04-2011 / 14:04:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   310     "Modified: / 23-05-2011 / 17:57:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
       
   311 ! !
       
   312 
       
   313 !JavaClassRefTests class methodsFor:'documentation'!
       
   314 
       
   315 version_SVN
       
   316     ^ '$Id$'
       
   317 ! !