MCClassDefinitionTest.st
author Claus Gittinger <cg@exept.de>
Tue, 08 May 2018 19:54:33 +0200
changeset 1042 3b8c88c55251
parent 276 f65551a3cc92
permissions -rw-r--r--
#FEATURE by cg class: MCRepositoryGroup changed: #initializeRepositoriesFromUserSettings

"{ 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 §'
! !