--- 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