test/MCClassDefinitionTest.st
author Claus Gittinger <cg@exept.de>
Wed, 22 Nov 2006 14:01:26 +0100
changeset 8 d91d621a6a1e
child 151 f4d2e1674f22
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello/test' }"
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCTestCase subclass:#MCClassDefinitionTest
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'previousChangeSet'
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Monticello-Tests'
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCClassDefinitionTest class methodsFor:'as yet unclassified'!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
classAComment
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ 'This is a mock class. The Monticello tests manipulated it to simulate a developer modifying code in the image.'
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
classACommentStamp
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	^  'cwp 8/10/2003 16:43'
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
restoreClassAComment
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
	Smalltalk 
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
		at: #MCMockClassA 
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
		ifPresent: [:a | a classComment: self classAComment stamp: self classACommentStamp]
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
! !
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
!MCClassDefinitionTest methodsFor:'as yet unclassified'!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
classAComment
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
	^ self class classAComment
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
creationMessage
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
	^ MessageSend
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
		receiver: MCClassDefinition
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
		selector: #name:superclassName:category:instVarNames:classVarNames:poolDictionaryNames:classInstVarNames:type:comment:commentStamp:
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
tearDown
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	Smalltalk at: 'MCMockClassC' ifPresent: [:c | c removeFromSystem]
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
testCannotLoad
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	| d |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	d _  self mockClass: 'MCMockClassC' super: 'NotAnObject'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
	self should: [d load] raise: Error.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
	self deny: (Smalltalk hasClassNamed: 'MCMockClassC').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
testComparison
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	| d1 d2 d3 d4 |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
	d1 _ self mockClass: 'A' super: 'X'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
	d2 _ self mockClass: 'A' super: 'Y'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
	d3 _ self mockClass: 'B' super: 'X'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
	d4 _ self mockClass: 'B' super: 'X'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
	
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	self assert: (d1 isRevisionOf: d2).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
	self deny: (d1 isSameRevisionAs: d2).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
	self assert: (d3 isRevisionOf: d4).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
	self assert: (d3 isSameRevisionAs: d4).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
	
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
	self deny: (d1 isRevisionOf: d3).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
	self deny: (d4 isRevisionOf: d2).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
testCreation
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
	| d |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
	d _  self mockClassA asClassDefinition.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
	self assert: d className = #MCMockClassA.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
	self assert: d superclassName = #MCMock.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
	self assert: d type = #normal.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	self assert: d category = self mockCategoryName.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	self assert: d instVarNames asArray = #('ivar').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
	self assert: d classVarNames asArray = #('CVar').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
	self assert: d classInstVarNames asArray = #().
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
	self assert: d comment isString.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	self assert: d comment = self classAComment.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	self assert: d commentStamp = self mockClassA organization commentStamp
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
testDefinitionString
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
	| d |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	d _ self mockClassA asClassDefinition.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	self assert: d definitionString = self mockClassA definition.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
testEquals
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	| a b |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	a _ self mockClass: 'ClassA' super: 'SuperA'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	b _ self mockClass: 'ClassA' super: 'SuperA'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
	self assert: a = b
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
testEqualsSensitivity
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
	| message a b defA args defB |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
	message _ self creationMessage.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
	a _ #(ClassA SuperA CategoryA #(iVarA) #(CVarA) #(PoolA) #(ciVarA)
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
			typeA 'A comment' 'A').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	b _ #(ClassB SuperB CategoryB #(iVarB) #(CVarB) #(PoolB) #(ciVarB)
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
			typeB 'B comment' 'B').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
	
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
	defA _ message valueWithArguments: a.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
	1 to: 8 do: [:index |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
				args _ a copy.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
				args at: index put: (b at: index).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
				defB _ message valueWithArguments: args.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
				self deny: defA = defB.]
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
testKindOfSubclass
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	| classes d |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
	classes _ {self mockClassA. String. MethodContext. WeakArray. Float}.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
	classes do: [:c |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
		d _  c asClassDefinition.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
		self assert: d kindOfSubclass = c kindOfSubclass.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
	].
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
testLoadAndUnload
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
	| d c |
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
	d _  self mockClass: 'MCMockClassC' super: 'Object'.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
	d load.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
	self assert: (Smalltalk hasClassNamed: 'MCMockClassC').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
	c _ (Smalltalk classNamed: 'MCMockClassC').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
	self assert: (c isKindOf: Class).
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
	self assert: c superclass = Object.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
	self assert: c instVarNames isEmpty.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
	self assert: c classVarNames isEmpty.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
	self assert: c sharedPools isEmpty.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
	self assert: c category = self mockCategoryName.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
	self assert: c organization classComment = (self commentForClass: 'MCMockClassC').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
	self assert: c organization commentStamp = (self commentStampForClass: 'MCMockClassC').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
	d unload.
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
	self deny: (Smalltalk hasClassNamed: 'MCMockClassC').
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
! !
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
!MCClassDefinitionTest class methodsFor:'documentation'!
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
version
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    ^ '$Header: /cvs/stx/stx/goodies/monticello/test/MCClassDefinitionTest.st,v 1.1 2006-11-22 13:01:26 cg Exp $'
d91d621a6a1e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
! !