Added tests for ClassInitializationChange
authorJan Vrany <jan.vrany@fit.cvut.cz>
Fri, 21 Mar 2014 19:30:25 +0100
changeset 1107 8d4a3e77f905
parent 1106 eafa5b6e4421
child 1108 f00efe9de213
Added tests for ClassInitializationChange
RegressionTests__ChangeSetTests.st
--- a/RegressionTests__ChangeSetTests.st	Fri Mar 21 18:20:43 2014 +0100
+++ b/RegressionTests__ChangeSetTests.st	Fri Mar 21 19:30:25 2014 +0100
@@ -62,7 +62,12 @@
     Smalltalk removeDependent: self.
     classes do:[:each|
         (each fullName startsWith: 'Mock') ifTrue:[
-            Smalltalk removeClass: each
+            | clsVarSym |
+            Smalltalk removeClass: each.
+            clsVarSym := (each fullName , ':MockVar') asSymbolIfInterned.
+            (clsVarSym notNil and:[ Smalltalk includesKey: clsVarSym]) ifTrue:[ 
+                Smalltalk at: clsVarSym put: nil.
+            ].
         ].
     ].
 
@@ -73,7 +78,7 @@
     ].
 
     "Created: / 20-11-2012 / 14:46:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-    "Modified: / 06-03-2014 / 10:57:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 21-03-2014 / 18:29:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !ChangeSetTests methodsFor:'tests - ChangeSet'!
@@ -1122,6 +1127,241 @@
     "Created: / 13-11-2013 / 17:44:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
+!ChangeSetTests methodsFor:'tests - ClassInitializeChange'!
+
+test_ClassInitializeChange_01
+
+    | cs |
+
+    Object subclass:#MockClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        category:'tests-Regression-Mocks'.
+    (Smalltalk at: #MockClass) class
+        compile: 'initialize MockVar := 1234';
+        compile: 'mockVar ^MockVar'.
+
+    cs := ChangeSet fromStream:'
+MockClass initialize!!
+
+' readStream.
+
+    self assert: cs size == 1.
+    self assert: cs first class == ClassInitializeChange.
+    self assert: cs first className = 'MockClass'.
+
+    self assert: (Smalltalk at: #MockClass) mockVar isNil.
+    cs apply.
+    self assert: (Smalltalk at: #MockClass) mockVar == 1234.
+
+    "Created: / 21-03-2014 / 17:48:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_ClassInitializeChange_02
+
+    | cs |
+
+    Object subclass:#MockClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        category:'tests-Regression-Mocks'.
+
+    Object subclass:#PrivateClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        privateIn:(Smalltalk at: #'MockClass').
+
+    (Smalltalk at: #'MockClass::PrivateClass') class
+        compile: 'initialize MockVar := 1234';
+        compile: 'mockVar ^MockVar'.
+
+    cs := ChangeSet fromStream:'
+MockClass::PrivateClass initialize!!
+
+' readStream.
+
+    self assert: cs size == 1.
+    self assert: cs first class == ClassInitializeChange.
+    self assert: cs first className = 'MockClass::PrivateClass'.
+
+    self assert: (Smalltalk at: #'MockClass::PrivateClass') mockVar isNil.
+    cs apply.
+    self assert: (Smalltalk at: #'MockClass::PrivateClass') mockVar == 1234.
+
+    "Created: / 21-03-2014 / 18:04:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_ClassInitializeChange_03a
+
+    | cs |
+
+    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
+    Object subclass:#MockClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        category:'tests-Regression-Mocks'.
+    ].
+    (Smalltalk at: #'Mocks::MockClass') class
+        compile: 'initialize MockVar := 1234';
+        compile: 'mockVar ^MockVar'.
+
+
+    cs := ChangeSet fromStream:'
+"{ NameSpace: Mocks }"
+
+MockClass initialize!!
+
+' readStream.
+
+    self assert: cs size == 1.
+    self assert: cs first class == ClassInitializeChange.
+    self assert: cs first className = 'MockClass'.
+    self assert: cs first fullClassName = 'Mocks::MockClass'.
+
+    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar isNil.
+    cs apply.
+    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar == 1234.
+
+    "Created: / 21-03-2014 / 18:02:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_ClassInitializeChange_03b
+
+    | cs |
+
+    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
+    Object subclass:#MockClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        category:'tests-Regression-Mocks'.
+    ].
+    (Smalltalk at: #'Mocks::MockClass') class
+        compile: 'initialize MockVar := 1234';
+        compile: 'mockVar ^MockVar'.
+
+
+    cs := ChangeSet fromStream:'
+"{ NameSpace: Mocks }"
+
+!!
+!!MockClass methodsFor:''methods''!!
+
+foo     
+
+!! !!
+
+MockClass initialize!!
+
+' readStream.
+
+    self assert: cs size == 2.
+    self assert: cs second class == ClassInitializeChange.
+    self assert: cs second className = 'MockClass'.
+    self assert: cs second fullClassName = 'Mocks::MockClass'.
+
+    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar isNil.
+    cs apply.
+    self assert: (Smalltalk at: #'Mocks::MockClass') mockVar == 1234.
+
+    "Created: / 21-03-2014 / 18:04:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_ClassInitializeChange_04a
+
+    | cs |
+
+    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
+    Object subclass:#MockClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        category:'tests-Regression-Mocks'.
+
+    Object subclass:#PrivateClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        privateIn:(Smalltalk at: #'Mocks::MockClass').  
+
+    ].
+    (Smalltalk at: #'Mocks::MockClass::PrivateClass') class
+        compile: 'initialize MockVar := 1234';
+        compile: 'mockVar ^MockVar'.
+
+
+    cs := ChangeSet fromStream:'
+"{ NameSpace: Mocks }"
+
+MockClass::PrivateClass initialize!!
+
+' readStream.
+
+    self assert: cs size == 1.
+    self assert: cs first class == ClassInitializeChange.
+    self assert: cs first className = 'MockClass::PrivateClass'.
+    self assert: cs first fullClassName = 'Mocks::MockClass::PrivateClass'.
+
+    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar isNil.
+    cs apply.
+    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar == 1234.
+
+    "Created: / 21-03-2014 / 18:09:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+test_ClassInitializeChange_04b
+
+    | cs |
+
+    Class nameSpaceQuerySignal answer: (NameSpace name: #Mocks) do:[
+    Object subclass:#MockClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        category:'tests-Regression-Mocks'.
+
+    Object subclass:#PrivateClass
+        instanceVariableNames:''
+        classVariableNames:'MockVar'
+        poolDictionaries:''
+        privateIn:(Smalltalk at: #'Mocks::MockClass').  
+
+    ].
+    (Smalltalk at: #'Mocks::MockClass::PrivateClass') class
+        compile: 'initialize MockVar := 1234';
+        compile: 'mockVar ^MockVar'.
+
+
+    cs := ChangeSet fromStream:'
+"{ NameSpace: Mocks }"
+
+!!
+!!MockClass methodsFor:''methods''!!
+
+foo   
+
+!! !!
+
+MockClass::PrivateClass initialize!!
+
+' readStream.
+
+    self assert: cs size == 2.
+    self assert: cs second class == ClassInitializeChange.
+    self assert: cs second className = 'MockClass::PrivateClass'.
+    self assert: cs second fullClassName = 'Mocks::MockClass::PrivateClass'.
+
+    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar isNil.
+    cs apply.
+    self assert: (Smalltalk at: #'Mocks::MockClass::PrivateClass') mockVar == 1234.
+
+    "Created: / 21-03-2014 / 18:09:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ChangeSetTests methodsFor:'tests - MethodDefinitionChange'!
 
 test_MethodDefinitionChange_01