experiments/JavaSingleClassReloaderTests.st
branchdevelopment
changeset 2753 7cdd959123dd
parent 2730 272689c14005
child 2756 6659925a80a4
--- 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> $'
+! !
+