--- /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 §'
+! !