--- a/experiments/JavaSingleClassReloaderTests.st Thu Sep 19 23:24:00 2013 +0200
+++ b/experiments/JavaSingleClassReloaderTests.st Fri Sep 20 00:10:48 2013 +0200
@@ -78,25 +78,24 @@
!JavaSingleClassReloaderTests methodsFor:'tests - fields'!
-test_fields_00
- "
- 1) compile simple class with one field
- 2) change type of the field from int to Object
-
+test_fields_00a
"
-
- | jclass1 jinst1 jclass2 jinst2 callerClass |
-
- jclass1 := self compileAndRegister:'
+ 1) compile simple class with one field
+ 2) change type of the field from int to Object
+"
+
+ | jclass1 jinst1 jclass2 jinst2 callerClass |
+ jclass1 := self
+ compileAndRegister: '
public class test_01 {
- public String foo = 1;
+ public int foo = 1;
public int bar() {
return 1;
}
}'.
jinst1 := jclass1 new.
-
- jclass2 := self compileAndRegister:'
+ jclass2 := self
+ compileAndRegister: '
public class test_01 {
public Object foo = new Object();
public int bar() {
@@ -104,35 +103,79 @@
}
}'.
jinst2 := jclass2 new.
-
- callerClass := self compileAndRegister:'
+ callerClass := self
+ compileAndRegister: '
public class CallerClass {
public static Object getFoo(test_01 inst) {
return inst.foo;
}
}'.
-
self assert: jclass1 ~~ jclass2.
-
self assert: jclass1 fields size == 1.
- self assert: jclass1 fields anElement descriptor = 'Ljava/lang/String;'.
+ self assert: jclass1 fields anElement descriptor = 'I'.
self assert: jinst1 bar == 1.
-
self assert: jclass2 fields size == 1.
self assert: jclass2 fields anElement descriptor = 'Ljava/lang/Object;'.
self assert: jinst2 bar == 2.
-
- self should: [ callerClass getFoo: jinst1 ] raise: Error.
+ self should: [ callerClass getFoo: jinst1 ] raise: Error.
self shouldnt: [ callerClass getFoo: jinst2 ] raise: Error.
"Created: / 09-04-2013 / 15:00:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 09-04-2013 / 16:17:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 19-09-2013 / 23:53:22 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
+!
+
+test_fields_00b
+ "
+ 1) compile simple class with one field
+ 2) change type of the field from Object to int
+"
+
+ | jclass1 jinst1 jclass2 jinst2 callerClass |
+ jclass1 := self
+ compileAndRegister: '
+public class test_01 {
+ public Object foo = new Object();
+ public int bar() {
+ return 1;
+ }
+}'.
+ jinst1 := jclass1 new.
+ jclass2 := self
+ compileAndRegister: '
+public class test_01 {
+ public int foo = 42;
+ public int bar() {
+ return 2;
+ }
+}'.
+ jinst2 := jclass2 new.
+ callerClass := self
+ compileAndRegister: '
+public class CallerClass {
+ public static int getFoo(test_01 inst) {
+ return inst.foo;
+ }
+}'.
+ self assert: jclass1 ~~ jclass2.
+ self assert: jclass1 fields size == 1.
+ self assert: jclass1 fields anElement descriptor = 'I'.
+ self assert: jinst1 bar == 1.
+ self assert: jclass2 fields size == 1.
+ self assert: jclass2 fields anElement descriptor = 'Ljava/lang/Object;'.
+ self assert: jinst2 bar == 2.
+ self should: [ callerClass getFoo: jinst1 ] raise: Error.
+ self shouldnt: [ callerClass getFoo: jinst2 ] raise: Error.
+
+ "Created: / 20-09-2013 / 00:05:59 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
!
test_fields_01a
"
1) compile simple class with one field
2) change type of the field from String to Object
+ 3) as this is type generalization, no new class version
+ should be introduced
"
@@ -163,7 +206,7 @@
}
}'.
- self assert: jclass1 ~~ jclass2.
+ self assert: jclass1 == jclass2.
self assert: jclass1 fields size == 1.
self assert: jclass1 fields anElement descriptor = 'Ljava/lang/String;'.
@@ -177,12 +220,14 @@
self shouldnt: [ callerClass getFoo: jinst2 ] raise: Error.
"Created: / 09-04-2013 / 15:24:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-09-2013 / 00:00:50 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
!
test_fields_01b
"
1) compile simple class with one field
- 2) change type of the field from String to Object
+ 2) change type of the field from Object to String
+ 3) new class version should be created
"
@@ -190,7 +235,7 @@
jclass1 := self compileAndRegister:'
public class test_01 {
- public String foo = "XXX";
+ public Object foo = new Object();
public int bar() {
return 1;
}
@@ -206,7 +251,7 @@
jclass2 := self compileAndRegister:'
public class test_01 {
- public Object foo = new Object();
+ public String foo = "XXX";
public int bar() {
return 2;
}
@@ -218,17 +263,18 @@
self assert: jclass1 ~~ jclass2.
self assert: jclass1 fields size == 1.
- self assert: jclass1 fields anElement descriptor = 'Ljava/lang/String;'.
+ self assert: jclass1 fields anElement descriptor = 'Ljava/lang/Object;'.
self assert: jinst1 bar == 1.
self assert: jclass2 fields size == 1.
- self assert: jclass2 fields anElement descriptor = 'Ljava/lang/Object;'.
+ self assert: jclass2 fields anElement descriptor = 'Ljava/lang/String;'.
self assert: jinst2 bar == 2.
self shouldnt: [ callerClass getFoo: jinst1 ] raise: Error.
self should: [ callerClass getFoo: jinst2 ] raise: Error.
"Created: / 09-04-2013 / 15:25:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 20-09-2013 / 00:04:35 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
!
test_fields_02a
@@ -1631,3 +1677,10 @@
"Created: / 14-09-2013 / 18:37:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!JavaSingleClassReloaderTests class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
+! !
+