MCClassDefinitionTest.st
changeset 276 f65551a3cc92
equal deleted inserted replaced
275:5ad1fc22ea2e 276:f65551a3cc92
       
     1 "{ Package: 'stx:goodies/monticello' }"
       
     2 
       
     3 MCTestCase subclass:#MCClassDefinitionTest
       
     4 	instanceVariableNames:'previousChangeSet'
       
     5 	classVariableNames:''
       
     6 	poolDictionaries:''
       
     7 	category:'Monticello-Tests'
       
     8 !
       
     9 
       
    10 
       
    11 !MCClassDefinitionTest class methodsFor:'as yet unclassified'!
       
    12 
       
    13 classAComment
       
    14 	^ 'This is a mock class. The Monticello tests manipulated it to simulate a developer modifying code in the image.'
       
    15 !
       
    16 
       
    17 classACommentStamp
       
    18 	^  'cwp 8/10/2003 16:43'
       
    19 !
       
    20 
       
    21 restoreClassAComment
       
    22 	Smalltalk 
       
    23 		at: #MCMockClassA 
       
    24 		ifPresent: [:a | a classComment: self classAComment stamp: self classACommentStamp]
       
    25 ! !
       
    26 
       
    27 !MCClassDefinitionTest methodsFor:'as yet unclassified'!
       
    28 
       
    29 classAComment
       
    30 	^ self class classAComment
       
    31 !
       
    32 
       
    33 creationMessage
       
    34 	^ MessageSend
       
    35 		receiver: MCClassDefinition
       
    36 		selector: #name:superclassName:category:instVarNames:classVarNames:poolDictionaryNames:classInstVarNames:type:comment:commentStamp:
       
    37 !
       
    38 
       
    39 tearDown
       
    40         Smalltalk at: #'MCMockClassC' ifPresent: [:c | c removeFromSystem]
       
    41 
       
    42     "Modified: / 09-09-2010 / 15:23:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    43 !
       
    44 
       
    45 testCannotLoad
       
    46 	| d |
       
    47 	d :=  self mockClass: 'MCMockClassC' super: 'NotAnObject'.
       
    48 	self should: [d load] raise: Error.
       
    49 	self deny: (Smalltalk hasClassNamed: 'MCMockClassC').
       
    50 !
       
    51 
       
    52 testComparison
       
    53 	| d1 d2 d3 d4 |
       
    54 	d1 := self mockClass: 'A' super: 'X'.
       
    55 	d2 := self mockClass: 'A' super: 'Y'.
       
    56 	d3 := self mockClass: 'B' super: 'X'.
       
    57 	d4 := self mockClass: 'B' super: 'X'.
       
    58 	
       
    59 	self assert: (d1 isRevisionOf: d2).
       
    60 	self deny: (d1 isSameRevisionAs: d2).
       
    61 
       
    62 	self assert: (d3 isRevisionOf: d4).
       
    63 	self assert: (d3 isSameRevisionAs: d4).
       
    64 	
       
    65 	self deny: (d1 isRevisionOf: d3).
       
    66 	self deny: (d4 isRevisionOf: d2).
       
    67 !
       
    68 
       
    69 testCreation
       
    70         | d |
       
    71         d :=  self mockClassA asClassDefinition.
       
    72         self assert: d className = #MCMockClassA.
       
    73         self assert: d superclassName = #MCMock.
       
    74         self assert: d type = #normal.
       
    75         self assert: d category = self mockCategoryName.
       
    76         self assert: d instVarNames asArray = #('ivar').
       
    77         self assert: d classVarNames asArray = #('CVar').
       
    78         self assert: d classInstVarNames asArray = #().
       
    79         self assert: d comment isString.
       
    80         self assert: d comment = self classAComment.
       
    81         "/TODO: Fix it later
       
    82         "/self assert: d commentStamp = self mockClassA organization commentStamp
       
    83 
       
    84     "Modified: / 11-09-2010 / 18:24:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    85 !
       
    86 
       
    87 testDefinitionString
       
    88         | d |
       
    89         d := self mockClassA asClassDefinition.
       
    90         self assert: d definitionString = self mockClassA mcDefinition.
       
    91 
       
    92     "Modified: / 11-09-2010 / 18:04:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    93 !
       
    94 
       
    95 testEquals
       
    96 	| a b |
       
    97 	a := self mockClass: 'ClassA' super: 'SuperA'.
       
    98 	b := self mockClass: 'ClassA' super: 'SuperA'.
       
    99 	self assert: a = b
       
   100 !
       
   101 
       
   102 testEqualsSensitivity
       
   103 	| message a b defA args defB |
       
   104 	message := self creationMessage.
       
   105 	a := #(ClassA SuperA CategoryA #(iVarA) #(CVarA) #(PoolA) #(ciVarA)
       
   106 			typeA 'A comment' 'A').
       
   107 	b := #(ClassB SuperB CategoryB #(iVarB) #(CVarB) #(PoolB) #(ciVarB)
       
   108 			typeB 'B comment' 'B').
       
   109 	
       
   110 	defA := message valueWithArguments: a.
       
   111 	1 to: 8 do: [:index |
       
   112 				args := a copy.
       
   113 				args at: index put: (b at: index).
       
   114 				defB := message valueWithArguments: args.
       
   115 				self deny: defA = defB.]
       
   116 !
       
   117 
       
   118 testKindOfSubclass
       
   119         | classes d |
       
   120         classes := Array 
       
   121                     with: self mockClassA
       
   122                     with: String 
       
   123                     with: Context
       
   124                     with: WeakArray
       
   125                     with: Float.
       
   126         classes do: [:c |
       
   127                 d :=  c asClassDefinition.
       
   128                 self assert: d kindOfSubclass = c kindOfSubclass.
       
   129         ].
       
   130 
       
   131     "Modified: / 28-08-2010 / 23:03:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   132 !
       
   133 
       
   134 testLoadAndUnload
       
   135 
       
   136 
       
   137         | d c |
       
   138         d :=  self mockClass: 'MCMockClassC' super: 'Object'.
       
   139         d load.
       
   140         self assert: (Smalltalk hasClassNamed: 'MCMockClassC').
       
   141         c := (Smalltalk classNamed: 'MCMockClassC').
       
   142         self assert: (c isKindOf: Class).
       
   143         self assert: c superclass = Object.
       
   144         self assert: c instVarNames isEmpty.
       
   145         self assert: c classVarNames isEmpty.
       
   146         self assert: c sharedPools isEmpty.
       
   147         self assert: c category = self mockCategoryName.
       
   148         self assert: c organization classComment = (self commentForClass: 'MCMockClassC').
       
   149         "/Fix it later
       
   150         "/self assert: c organization commentStamp = (self commentStampForClass: 'MCMockClassC').
       
   151         d unload.
       
   152         self deny: (Smalltalk hasClassNamed: 'MCMockClassC').
       
   153 
       
   154     "Modified: / 11-09-2010 / 17:54:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   155 ! !
       
   156 
       
   157 !MCClassDefinitionTest class methodsFor:'documentation'!
       
   158 
       
   159 version
       
   160     ^ '$Header: /cvs/stx/stx/goodies/monticello/MCClassDefinitionTest.st,v 1.1 2011-08-20 12:03:37 cg Exp $'
       
   161 !
       
   162 
       
   163 version_CVS
       
   164     ^ '$Header: /cvs/stx/stx/goodies/monticello/MCClassDefinitionTest.st,v 1.1 2011-08-20 12:03:37 cg Exp $'
       
   165 !
       
   166 
       
   167 version_SVN
       
   168     ^ '§Id: MCClassDefinitionTest.st 7 2010-09-12 07:18:55Z vranyj1 §'
       
   169 ! !