initial checkin
authorClaus Gittinger <cg@exept.de>
Sat, 20 Aug 2011 14:03:37 +0200
changeset 276 f65551a3cc92
parent 275 5ad1fc22ea2e
child 277 8a5d4e015717
initial checkin
MCClassDefinitionTest.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MCClassDefinitionTest.st	Sat Aug 20 14:03:37 2011 +0200
@@ -0,0 +1,169 @@
+"{ Package: 'stx:goodies/monticello' }"
+
+MCTestCase subclass:#MCClassDefinitionTest
+	instanceVariableNames:'previousChangeSet'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Monticello-Tests'
+!
+
+
+!MCClassDefinitionTest class methodsFor:'as yet unclassified'!
+
+classAComment
+	^ 'This is a mock class. The Monticello tests manipulated it to simulate a developer modifying code in the image.'
+!
+
+classACommentStamp
+	^  'cwp 8/10/2003 16:43'
+!
+
+restoreClassAComment
+	Smalltalk 
+		at: #MCMockClassA 
+		ifPresent: [:a | a classComment: self classAComment stamp: self classACommentStamp]
+! !
+
+!MCClassDefinitionTest methodsFor:'as yet unclassified'!
+
+classAComment
+	^ self class classAComment
+!
+
+creationMessage
+	^ MessageSend
+		receiver: MCClassDefinition
+		selector: #name:superclassName:category:instVarNames:classVarNames:poolDictionaryNames:classInstVarNames:type:comment:commentStamp:
+!
+
+tearDown
+        Smalltalk at: #'MCMockClassC' ifPresent: [:c | c removeFromSystem]
+
+    "Modified: / 09-09-2010 / 15:23:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+testCannotLoad
+	| d |
+	d :=  self mockClass: 'MCMockClassC' super: 'NotAnObject'.
+	self should: [d load] raise: Error.
+	self deny: (Smalltalk hasClassNamed: 'MCMockClassC').
+!
+
+testComparison
+	| d1 d2 d3 d4 |
+	d1 := self mockClass: 'A' super: 'X'.
+	d2 := self mockClass: 'A' super: 'Y'.
+	d3 := self mockClass: 'B' super: 'X'.
+	d4 := self mockClass: 'B' super: 'X'.
+	
+	self assert: (d1 isRevisionOf: d2).
+	self deny: (d1 isSameRevisionAs: d2).
+
+	self assert: (d3 isRevisionOf: d4).
+	self assert: (d3 isSameRevisionAs: d4).
+	
+	self deny: (d1 isRevisionOf: d3).
+	self deny: (d4 isRevisionOf: d2).
+!
+
+testCreation
+        | d |
+        d :=  self mockClassA asClassDefinition.
+        self assert: d className = #MCMockClassA.
+        self assert: d superclassName = #MCMock.
+        self assert: d type = #normal.
+        self assert: d category = self mockCategoryName.
+        self assert: d instVarNames asArray = #('ivar').
+        self assert: d classVarNames asArray = #('CVar').
+        self assert: d classInstVarNames asArray = #().
+        self assert: d comment isString.
+        self assert: d comment = self classAComment.
+        "/TODO: Fix it later
+        "/self assert: d commentStamp = self mockClassA organization commentStamp
+
+    "Modified: / 11-09-2010 / 18:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+testDefinitionString
+        | d |
+        d := self mockClassA asClassDefinition.
+        self assert: d definitionString = self mockClassA mcDefinition.
+
+    "Modified: / 11-09-2010 / 18:04:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+testEquals
+	| a b |
+	a := self mockClass: 'ClassA' super: 'SuperA'.
+	b := self mockClass: 'ClassA' super: 'SuperA'.
+	self assert: a = b
+!
+
+testEqualsSensitivity
+	| message a b defA args defB |
+	message := self creationMessage.
+	a := #(ClassA SuperA CategoryA #(iVarA) #(CVarA) #(PoolA) #(ciVarA)
+			typeA 'A comment' 'A').
+	b := #(ClassB SuperB CategoryB #(iVarB) #(CVarB) #(PoolB) #(ciVarB)
+			typeB 'B comment' 'B').
+	
+	defA := message valueWithArguments: a.
+	1 to: 8 do: [:index |
+				args := a copy.
+				args at: index put: (b at: index).
+				defB := message valueWithArguments: args.
+				self deny: defA = defB.]
+!
+
+testKindOfSubclass
+        | classes d |
+        classes := Array 
+                    with: self mockClassA
+                    with: String 
+                    with: Context
+                    with: WeakArray
+                    with: Float.
+        classes do: [:c |
+                d :=  c asClassDefinition.
+                self assert: d kindOfSubclass = c kindOfSubclass.
+        ].
+
+    "Modified: / 28-08-2010 / 23:03:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+testLoadAndUnload
+
+
+        | d c |
+        d :=  self mockClass: 'MCMockClassC' super: 'Object'.
+        d load.
+        self assert: (Smalltalk hasClassNamed: 'MCMockClassC').
+        c := (Smalltalk classNamed: 'MCMockClassC').
+        self assert: (c isKindOf: Class).
+        self assert: c superclass = Object.
+        self assert: c instVarNames isEmpty.
+        self assert: c classVarNames isEmpty.
+        self assert: c sharedPools isEmpty.
+        self assert: c category = self mockCategoryName.
+        self assert: c organization classComment = (self commentForClass: 'MCMockClassC').
+        "/Fix it later
+        "/self assert: c organization commentStamp = (self commentStampForClass: 'MCMockClassC').
+        d unload.
+        self deny: (Smalltalk hasClassNamed: 'MCMockClassC').
+
+    "Modified: / 11-09-2010 / 17:54:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!MCClassDefinitionTest class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCClassDefinitionTest.st,v 1.1 2011-08-20 12:03:37 cg Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCClassDefinitionTest.st,v 1.1 2011-08-20 12:03:37 cg Exp $'
+!
+
+version_SVN
+    ^ '§Id: MCClassDefinitionTest.st 7 2010-09-12 07:18:55Z vranyj1 §'
+! !