finally forced myself to refactor tests.. fieldRef tests are ok now.. methodRef to come..
--- a/src/AbstractJavaTestCase.st Mon May 23 12:42:27 2011 +0000
+++ b/src/AbstractJavaTestCase.st Mon May 23 14:53:35 2011 +0000
@@ -16,6 +16,89 @@
"Created: / 26-04-2011 / 13:03:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
+!AbstractJavaTestCase methodsFor:'cp creation helpers'!
+
+getClassRefNamed: name
+ "creates classRef with correctly prepared constant pool"
+
+ | cp |
+
+ cp := JavaConstantPool new:2.
+ cp at: 1 put: (self getClassRefIn: cp withNameAt: 2).
+ cp at: 2 put: name.
+
+ ^ cp at: 1.
+
+ "Created: / 23-05-2011 / 16:17:28 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getFieldRefNamed: name typed: type inClass: classString
+ "creates fieldRef with correctly prepared constant pool"
+ | cp |
+
+ cp := JavaConstantPool new: 6.
+ cp at: 1 put: (self getClassRefIn: cp withNameAt: 2).
+ cp at: 2 put: classString.
+ cp at: 3 put: name.
+ cp at: 4 put: type.
+ cp at: 5
+ put: (self
+ getFieldRefIn: cp
+ withNameAndTypeAt: 6 andClassAt: 1).
+ cp at: 6 put: (self getNameAndTypeIn: cp withNameAt: 3 andTypeAt: 4).
+ ^ cp at: 5.
+
+ "Created: / 23-05-2011 / 15:56:12 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getInterfaceMethodRefNamed: name typed: type inClass: classString
+ "creates interfaceMethodRef with correctly prepared constant pool"
+ | cp |
+
+ cp := JavaConstantPool new: 6.
+ cp at: 1 put: (self getClassRefIn: cp withNameAt: 2).
+ cp at: 2 put: classString.
+ cp at: 3 put: name.
+ cp at: 4 put: type.
+ cp at: 5
+ put: (self
+ getInterfaceMethodRefIn: cp
+ withNameAndTypeAt: 6
+ andClassAt: 1).
+ cp at: 6
+ put: (self
+ getNameAndTypeIn: cp
+ withNameAt: 3
+ andTypeAt: 4).
+ ^ cp at: 5.
+
+ "Created: / 23-05-2011 / 16:15:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getMethodRefNamed: name typed: type inClass: classString
+ "creates methodRef with correctly prepared constant pool"
+ | cp |
+
+ cp := JavaConstantPool new: 6.
+ cp at: 1 put: (self getClassRefIn: cp withNameAt: 2).
+ cp at: 2 put: classString.
+ cp at: 3 put: name.
+ cp at: 4 put: type.
+ cp at: 5
+ put: (self
+ getMethodRefIn: cp
+ withNameAndTypeAt: 6
+ andClassAt: 1).
+ cp at: 6
+ put: (self
+ getNameAndTypeIn: cp
+ withNameAt: 3
+ andTypeAt: 4).
+ ^ cp at: 5.
+
+ "Created: / 23-05-2011 / 16:00:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
!AbstractJavaTestCase methodsFor:'helpers'!
disableMockedExceptionThrowing
@@ -31,19 +114,6 @@
"Created: / 13-04-2011 / 14:11:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
-getClassRefFor: classString
-^ JavaClassRef2 in: (JavaConstantPool with: classString)
- withNameAt: 1.
-
- "Created: / 10-05-2011 / 15:03:38 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
-getClassRefIn: aJavaConstantPool withNameAt: nameCPIndex
-^ JavaClassRef2 in: aJavaConstantPool withNameAt: nameCPIndex.
-
- "Created: / 12-05-2011 / 19:14:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
getCrateClassReadStream
^ ((Filename named: UserPreferences current javaTestsDirectory)
/ 'libjava' / 'bin'
@@ -55,21 +125,6 @@
"Modified: / 12-05-2011 / 16:26:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
-getName: name descriptor: type
- ^ JavaNameAndType2
- in: (JavaConstantPool with: name with: type)
- withNameAt: 1
- andDescriptorAt: 2.
-
- "Created: / 10-05-2011 / 16:01:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
-getNameAndTypeIn: aJavaConstantPool nameAt: nameCPIndex typeAt: typeCPIndex
- ^ JavaNameAndType2 in: aJavaConstantPool withNameAt: nameCPIndex andDescriptorAt: typeCPIndex.
-
- "Created: / 12-05-2011 / 19:15:17 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
getPrettyBigConstantPool
| cp |
@@ -114,7 +169,7 @@
andNameAndTypeAt: 18.
^ cp
- "Modified: / 13-05-2011 / 09:53:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 15:16:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
javaLangObject
@@ -123,6 +178,71 @@
"Created: / 12-05-2011 / 19:09:15 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
+!AbstractJavaTestCase methodsFor:'refs creation'!
+
+getClassRefIn: aJavaConstantPool withNameAt: nameCPIndex
+ | result |
+
+ result := JavaClassRef2 in: aJavaConstantPool withNameAt: nameCPIndex.
+ result owner: self javaLangObject.
+ ^ result.
+
+ "Created: / 12-05-2011 / 19:14:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:24:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getFieldRefIn: cp withNameAndTypeAt: nmIndex andClassAt: classIndex
+ |result|
+
+ result := JavaFieldRef2
+ in: cp
+ withNameAndTypeAt: nmIndex
+ andClassAt: classIndex.
+result owner: self javaLangObject.
+ ^ result.
+
+ "Created: / 23-05-2011 / 16:01:36 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getInterfaceMethodRefIn: cp withNameAndTypeAt: nmIndex andClassAt: classIndex
+ |result|
+
+ result:= JavaInterfaceMethodRef2
+ in: cp
+ withNameAndTypeAt: nmIndex
+ andClassAt: classIndex.
+ result owner: self javaLangObject.
+ ^ result.
+
+ "Created: / 23-05-2011 / 15:58:34 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getMethodRefIn: cp withNameAndTypeAt: nmIndex andClassAt: classIndex
+ |result|
+
+ result := JavaMethodRef2
+ in: cp
+ withNameAndTypeAt: nmIndex
+ andClassAt: classIndex.
+ result owner: self javaLangObject.
+ ^ result.
+
+ "Created: / 23-05-2011 / 15:58:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+!
+
+getNameAndTypeIn: cp withNameAt: nameIndex andTypeAt: typeIndex
+ |result|
+
+ result := JavaNameAndType2
+ in: cp
+ withNameAt: nameIndex
+ andDescriptorAt: typeIndex.
+ result owner: self javaLangObject.
+ ^ result.
+
+ "Created: / 23-05-2011 / 16:00:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+! !
+
!AbstractJavaTestCase methodsFor:'running'!
setUp
--- a/src/JavaClassRef2.st Mon May 23 12:42:27 2011 +0000
+++ b/src/JavaClassRef2.st Mon May 23 14:53:35 2011 +0000
@@ -41,15 +41,15 @@
| tmp |
- tmp := self name.
- [tmp startsWith: '['] whileTrue: [tmp := tmp copyFrom: 2].
+ tmp := self name copy.
+ [ tmp startsWith: '[' ] whileTrue: [ tmp := tmp copyFrom: 2 ].
tmp := tmp replaceAll: $/ with: $..
(tmp startsWith: 'L') ifTrue: [ tmp := tmp copyFrom: 2 to: tmp size ].
(tmp endsWith: ';') ifTrue: [ tmp := tmp copyFrom: 1 to: tmp size - 1 ].
^ tmp.
"Created: / 08-04-2011 / 18:30:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 13-05-2011 / 18:14:22 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 15:30:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
name
@@ -148,14 +148,16 @@
invalidateForClass: internalJavaClassName
"Invalidate (means call invalidate) reference if it has something to do with given class (e.g Class named internalJavaClassName was unloaded).
- Return true, if reference was invalidated."
+ Return true, if reference was invalidated."
+
self name = internalJavaClassName
ifTrue:
- [ self invalidate.
+ [
+ self invalidate.
^ true ].
^ false.
- "Modified: / 13-05-2011 / 09:59:37 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 15:21:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaClassRef2 class methodsFor:'documentation'!
--- a/src/JavaFieldRefTests.st Mon May 23 12:42:27 2011 +0000
+++ b/src/JavaFieldRefTests.st Mon May 23 14:53:35 2011 +0000
@@ -11,307 +11,274 @@
!JavaFieldRefTests methodsFor:'permission tests'!
testAccessingPPFromOutside
- | javaClassRef javaFieldRef initString throwedException |
-
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'packagePrivateField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException messageText = 'IllegalAccessError').
- self disableMockedExceptionThrowing.
+ | javaFieldRef initString |
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ should:
+ [
+ javaFieldRef := self
+ getFieldRefNamed: 'packagePrivateField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef resolve. ]
+ raise: Error
+ suchThat: [:e | e messageText = 'IllegalAccessError' ].
"Created: / 14-04-2011 / 15:05:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:40:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPPFromPackage
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+
- self enableMockedExceptionThrowing.
- self shouldnt:
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'stx.libjava.tests.mocks.Crate').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'packagePrivateField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+self
+ shouldnt:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'packagePrivateField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef owner: (Java classForName: 'stx.libjava.tests.mocks.Crate').
javaFieldRef resolve. ]
- raise: Error.
- self disableMockedExceptionThrowing.
+ raise: Error
+ .
"Created: / 14-04-2011 / 15:08:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:17 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:41:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPPFromSubclass
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
+
- self enableMockedExceptionThrowing.
+
+
+initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
self shouldnt:
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef
- owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'packagePrivateField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ [ javaFieldRef := self
+ getFieldRefNamed: 'packagePrivateField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
javaFieldRef resolve. ]
raise: Error.
- self disableMockedExceptionThrowing.
"Created: / 14-04-2011 / 15:08:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:21 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:42:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPrivateFromOutside
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
+
+
+
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil namedAndTyped: (self getName: 'privateField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException notNil
- and: [ throwedException messageText = 'IllegalAccessError' ]).
- self disableMockedExceptionThrowing.
+initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ should:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'privateField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef resolve. ]
+ raise: Error
+ suchThat: [:e | e messageText = 'IllegalAccessError' ].
"Created: / 13-04-2011 / 14:44:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:42:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPrivateFromOutsideInNonPublic
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
+
+
+
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil namedAndTyped: (self getName: 'privateField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException notNil
- and: [ throwedException messageText = 'IllegalAccessError' ]).
- self disableMockedExceptionThrowing.
+initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
+ self
+ should:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'privateField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef resolve. ]
+ raise: Error
+ suchThat: [:e | e messageText = 'IllegalAccessError' ].
"Created: / 13-04-2011 / 14:47:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:43:35 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPrivateFromSubclass
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.SubclassOfPublicClass').
- javaFieldRef := JavaFieldRef2 in: nil namedAndTyped: (self getName: 'privateField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException notNil
- and: [ throwedException messageText = 'IllegalAccessError' ]).
- self disableMockedExceptionThrowing.
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ should:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'privateField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
+ javaFieldRef resolve. ]
+ raise: Error
+ suchThat: [:e | e messageText = 'IllegalAccessError' ].
"Created: / 13-04-2011 / 14:49:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:45:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingProtectedFromOutside
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
+
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'protectedField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException notNil
- and: [ throwedException messageText = 'IllegalAccessError' ]).
- self disableMockedExceptionThrowing.
+initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ should:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'protectedField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+
+ javaFieldRef resolve. ]
+ raise: Error
+ suchThat: [:e | e messageText = 'IllegalAccessError' ].
"Created: / 13-04-2011 / 14:44:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:44 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:46:30 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingProtectedFromOutsideInNonPublic
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
+
+
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'protectedMethod'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException notNil
- and: [ throwedException messageText = 'IllegalAccessError' ]).
- self disableMockedExceptionThrowing.
+initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
+ self
+ should:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'protectedField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+
+ javaFieldRef resolve. ]
+ raise: Error
+ suchThat: [:e | e messageText = 'IllegalAccessError' ].
"Created: / 13-04-2011 / 14:47:54 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:47 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:46:59 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingProtectedFromPackage
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
- self enableMockedExceptionThrowing.
- self shouldnt:
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'stx.libjava.tests.mocks.Crate').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'protectedField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ shouldnt:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'protectedField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef owner: (Java classForName: 'stx.libjava.tests.mocks.Crate').
javaFieldRef resolve. ]
- raise: Error.
- self disableMockedExceptionThrowing.
+ raise: Error
+ .
"Created: / 14-04-2011 / 15:09:02 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:48:32 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingProtectedFromSubclass
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef
- owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'protectedField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException isNil).
- self disableMockedExceptionThrowing.
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ shouldnt:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'protectedField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef
+ owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
+ javaFieldRef resolve. ]
+ raise: Error
+ .
"Created: / 13-04-2011 / 14:49:23 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-!
-
-testAccessingPublic
- | javaClassRef javaFieldRef initString |
-
- self enableMockedExceptionThrowing.
- self shouldnt:
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ]
- raise: Error.
- self disableMockedExceptionThrowing.
-
- "Created: / 13-04-2011 / 14:44:13 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:55 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:49:17 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPublicFromOutside
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
- self enableMockedExceptionThrowing.
- self shouldnt:
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ shouldnt:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef
+ owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
javaFieldRef resolve. ]
- raise: Error.
- self disableMockedExceptionThrowing.
+ raise: Error
+ .
"Created: / 13-04-2011 / 14:44:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:51:08 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPublicFromOutsideInNonPublic
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException notNil
- and: [ throwedException messageText = 'IllegalAccessError' ]).
- self disableMockedExceptionThrowing.
+ initString := 'Lstx/libjava/tests/mocks/NonPublicClass;'.
+ self
+ shouldnt:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef
+ owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
+ javaFieldRef resolve. ]
+ raise: Error
+ .
"Created: / 13-04-2011 / 14:48:05 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:22:00 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:52:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testAccessingPublicFromSubclass
- | javaClassRef javaFieldRef initString throwedException |
+ | javaFieldRef initString |
- self enableMockedExceptionThrowing.
-
- [ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.SubclassOfPublicClass').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
- javaFieldRef resolve. ] on: Error
- do: [:e | throwedException := e ].
- self assertTrue: (throwedException isNil).
- self disableMockedExceptionThrowing.
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ self
+ shouldnt:
+ [ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ javaFieldRef
+ owner: (Java classForName: 'stx.libjava.tests.mocks.SubclassOfPublicClass').
+ javaFieldRef resolve. ]
+ raise: Error
+ .
"Created: / 13-04-2011 / 14:49:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:22:03 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:52:27 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaFieldRefTests methodsFor:'resolving static tests'!
testResolvingStatic
- | javaClassRef javaFieldRef initString result expectedResult |
+ | javaFieldRef initString result expectedResult |
initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicStaticField'
- descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ javaFieldRef := self
+ getFieldRefNamed: 'publicStaticField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
result := javaFieldRef resolveStatic.
expectedResult := (Java
classForName: 'stx.libjava.tests.mocks.PublicClass') staticFields
@@ -319,57 +286,60 @@
self assertTrue: (result = expectedResult).
"Created: / 28-04-2011 / 22:00:52 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:10 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:32:14 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaFieldRefTests methodsFor:'resolving tests'!
testCorrectInstanceCreation
- | javaClassRef initString javaFieldRef |
+ | initString javaFieldRef |
initString := 'Ljava/lang/String;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := self getFieldRefwithNameAndType: (self getName: 'value' descriptor: '[C')
- andWithClassRef: javaClassRef.
+ javaFieldRef := self
+ getFieldRefNamed: 'value'
+ typed: '[C'
+ inClass: initString.
self assertTrue: (javaFieldRef isResolved not).
self assertTrue: (javaFieldRef valueCache isNil).
self assertTrue: (javaFieldRef name = 'value').
self assertTrue: (javaFieldRef descriptor = '[C').
- self assertTrue: (javaFieldRef classRef name = 'Ljava/lang/String;').
+ self assertTrue: (javaFieldRef classRef name = initString).
"Created: / 08-04-2011 / 14:01:41 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 12-05-2011 / 19:02:50 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:28:11 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testCorrectResolving
- | javaClassRef initString javaFieldRef expectedResult result |
+ | initString javaFieldRef expectedResult result |
initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
+ self assertTrue: (javaFieldRef isResolved not).
+ javaFieldRef resolve.
+ self assertTrue: (javaFieldRef isResolved).
result := javaFieldRef resolve.
expectedResult := (Java
classForName: 'stx.libjava.tests.mocks.PublicClass') fields
at: 3.
self assertTrue: (result = expectedResult).
+ self assertTrue: (javaFieldRef offset = 3).
+ self assertTrue: (javaFieldRef type = 'java.lang.String').
"Created: / 08-04-2011 / 14:07:57 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:20:53 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:29:53 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testInvalidation
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
- initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
self assertTrue: (javaFieldRef isResolved not).
javaFieldRef resolve.
self assertTrue: (javaFieldRef isResolved).
@@ -379,18 +349,17 @@
self assertTrue: (javaFieldRef classRef isResolved not).
"Created: / 08-04-2011 / 14:09:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:20:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:30:56 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testInvalidationForClassNegative
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
self assertTrue: (javaFieldRef isResolved not).
javaFieldRef resolve.
self assertTrue: (javaFieldRef isResolved).
@@ -398,18 +367,17 @@
self assertTrue: (javaFieldRef isResolved).
"Created: / 08-04-2011 / 16:23:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:20:58 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:31:18 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testInvalidationForClassPositive
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
+ javaFieldRef := self
+ getFieldRefNamed: 'publicField'
+ typed: 'Ljava/lang/String;'
+ inClass: initString.
self assertTrue: (javaFieldRef isResolved not).
javaFieldRef resolve.
self assertTrue: (javaFieldRef isResolved).
@@ -417,25 +385,20 @@
self assertTrue: (javaFieldRef isResolved not).
"Created: / 08-04-2011 / 16:23:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 16:31:48 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
!
testResolving
- | javaClassRef javaFieldRef initString |
+ | javaFieldRef initString |
+ initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
+ javaFieldRef := self getFieldRefNamed: 'publicField' typed:'Ljava/lang/String;' inClass:initString.
- initString := 'Lstx/libjava/tests/mocks/PublicClass;'.
- javaClassRef := self getClassRefFor: initString.
- javaClassRef owner: (Java classForName: 'java.lang.Object').
- javaFieldRef := JavaFieldRef2 in: nil
- namedAndTyped: (self getName: 'publicField' descriptor: 'Ljava/lang/String;')
- inClassIdentifiedByRef: javaClassRef.
self assertTrue: (javaFieldRef isResolved not).
javaFieldRef resolve.
- self assertTrue: (javaClassRef isResolved).
self assertTrue: (javaFieldRef isResolved).
"Created: / 08-04-2011 / 14:04:01 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 10-05-2011 / 16:21:04 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 15:53:39 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaFieldRefTests class methodsFor:'documentation'!
--- a/src/JavaRef2.st Mon May 23 12:42:27 2011 +0000
+++ b/src/JavaRef2.st Mon May 23 14:53:35 2011 +0000
@@ -86,14 +86,6 @@
"Created: / 08-04-2011 / 11:37:31 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
-!JavaRef2 methodsFor:'backward compatibility'!
-
-preResolve
-"does nothing and will be deleted as soon as transition to new resolving is finished"
-
- "Created: / 13-05-2011 / 17:26:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
-! !
-
!JavaRef2 methodsFor:'comparing'!
= anotherJavaRef
--- a/src/JavaResolver.st Mon May 23 12:42:27 2011 +0000
+++ b/src/JavaResolver.st Mon May 23 14:53:35 2011 +0000
@@ -50,6 +50,7 @@
result ifNotNil:
[ "/wrap result with array(s) if needed and return it
self checkIfArrayRef: aJavaClassRef andWrap: result ].
+
"
To resolve an unresolved symbolic reference from D to a class or interface C denoted by N,
the following steps are performed:
@@ -60,23 +61,18 @@
"
classLoader := aJavaClassRef classLoader.
classLoader isNil
- ifTrue:
- [
- result := self loadUnresolvedClass: aJavaClassRef ]
+ ifTrue: [ result := self loadUnresolvedClass: aJavaClassRef ]
ifFalse:
[ result := self loadUnresolvedClass: aJavaClassRef
withJavaClassLoader: classLoader. ].
+
result ifNil:
[ self halt.
- "tell mh, he will throw exception instead, for now, he wants to halt."
- ].
-
- "JV@2011-05-22: Take primitive types into an account"
- result isJavaPrimitiveType ifTrue:
- [^self checkIfArrayRef: aJavaClassRef andWrap: result].
-
+ "tell mh, he will throw exception instead, for now, he wants to halt." ].
+ "JV@2011-05-22: Take primitive types into an account"
+ result isJavaPrimitiveType
+ ifTrue: [ ^ self checkIfArrayRef: aJavaClassRef andWrap: result ].
result classInit.
-
"
If C is an array class and its element type is a reference type, then the symbolic reference
to the class or interface representing the element type is resolved by invoking the algorithm
@@ -94,8 +90,8 @@
ifFalse: [ self throwIllegalAccessError ].
"Created: / 11-04-2011 / 19:07:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 13-05-2011 / 17:51:20 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
"Modified: / 22-05-2011 / 17:59:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-05-2011 / 15:30:06 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaResolver methodsFor:'class resolving helpers'!
--- a/src/JavaRuntimeConstantPoolTests.st Mon May 23 12:42:27 2011 +0000
+++ b/src/JavaRuntimeConstantPoolTests.st Mon May 23 14:53:35 2011 +0000
@@ -67,6 +67,7 @@
self cleanUpCPCache.
cp := self getPrettyBigConstantPool.
+
cp do: [:each | each isJavaRef ifTrue: [ each resolve ] ].
cp
do: [:each | each isJavaRef ifTrue: [ self assertTrue: (each isResolved) ] ].
@@ -83,7 +84,7 @@
ifTrue: [ self assertTrue: (cp at: index) isResolved not ] ].
"Created: / 08-04-2011 / 17:10:42 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
- "Modified: / 13-05-2011 / 09:55:07 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 23-05-2011 / 15:29:53 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
! !
!JavaRuntimeConstantPoolTests class methodsFor:'documentation'!
--- a/src/stx_libjava.st Mon May 23 12:42:27 2011 +0000
+++ b/src/stx_libjava.st Mon May 23 14:53:35 2011 +0000
@@ -366,7 +366,7 @@
"Return a SVN revision number of myself.
This number is updated after a commit"
- ^ "$SVN-Revision:"'1152M'"$"
+ ^ "$SVN-Revision:"'1157'"$"
! !
!stx_libjava class methodsFor:'file generation'!