[squeak-dev] The Inbox: TraitsTests-pre.15.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Nov 20 14:00:44 UTC 2015
A new version of TraitsTests was added to project The Inbox:
http://source.squeak.org/inbox/TraitsTests-pre.15.mcz
==================== Summary ====================
Name: TraitsTests-pre.15
Author: pre
Time: 20 November 2015, 3:00:52.59 pm
UUID: 3faad7d5-71f7-48d2-9ccb-4162d332c62a
Ancestors: TraitsTests-nice.14
Updates the Traits tests to reflect the changes to the trait composition operator evaluation order
=============== Diff against TraitsTests-nice.14 ===============
Item was changed:
----- Method: ClassTraitTest>>testConflictsAliasesAndExclusions (in category 'testing') -----
testConflictsAliasesAndExclusions
"conflict"
self t1 classTrait compile: 'm2ClassSide: x ^99' classified: 'mycategory'.
self assert: (self t1 classTrait includesLocalSelector: #m2ClassSide:).
self assert: (self t5 classTrait >> #m2ClassSide:) isConflict.
self assert: (self c2 class >> #m2ClassSide:) isConflict.
"exclusion and alias"
self assert: self t5 classSide traitComposition asString
= 'T1 classTrait + T2 classTrait'.
self t5 classSide
uses: (self t1 classTrait @ { (#m2ClassSideAlias1: -> #m2ClassSide:) }
+ + (self t2 classTrait @ { (#m2ClassSideAlias2: -> #m2ClassSide:) } - { #m2ClassSide: })).
- + self t2 classTrait) @ { (#m2ClassSideAlias2: -> #m2ClassSide:) }
- - { #m2ClassSide: }.
self deny: (self t5 classTrait >> #m2ClassSide:) isConflict.
self deny: (self c2 class >> #m2ClassSide:) isConflict.
self assert: (self c2 m2ClassSideAlias1: 13) = 99.
self assert: (self c2 m2ClassSideAlias2: 13) = 13!
Item was changed:
----- Method: PureBehaviorTest>>testChangeSuperclass (in category 'testing-applying trait composition') -----
testChangeSuperclass
"self run: #testChangeSuperclass"
"Test that when the superclass of a class is changed the non-local methods
of the class sending super are recompiled to correctly store the new superclass."
| aC2 newSuperclass |
aC2 := self c2 new.
"C1 is current superclass of C2"
self assert: aC2 m51.
self assert: self c2 superclass == self c1.
self deny: (self c2 localSelectors includes: #m51).
self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!"
+ self assert: self c2 traitCompositionString = '(T5 - {#m11})'.
- self assert: self c2 traitCompositionString = 'T5 - {#m11}'.
self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53).
self assert: self c2 localSelectors sort = #(bar foo).
"change superclass of C2 from C1 to X"
newSuperclass := self createClassNamed: #X superclass: Object uses: {}.
newSuperclass
subclass: self c2 name
uses: self c2 traitComposition
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: self c2 category.
self assert: self c2 superclass == newSuperclass.
newSuperclass compile: 'foo ^17'.
self assert: aC2 m51 = 17.
self deny: (self c2 localSelectors includes: #m51).
self c2 compile: 'm51 ^19'.
self assert: aC2 m51 = 19.
self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!"
+ self assert: self c2 traitCompositionString = '(T5 - {#m11})'.
- self assert: self c2 traitCompositionString = 'T5 - {#m11}'.
self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53).
self assert: self c2 localSelectors sort = #(bar foo m51).
"change superclass of C2 back to C1"
self c1
subclass: self c2 name
uses: self c2 traitComposition
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: self c2 category.
self assert: (aC2 m51 = 19).
self assert: self c2 superclass == self c1.
self assert: (self c2 localSelectors includes: #m51).
self deny: (self c2 >> #m52) == (self t5 >> #m52). "no sharing!!"
+ self assert: self c2 traitCompositionString = '(T5 - {#m11})'.
- self assert: self c2 traitCompositionString = 'T5 - {#m11}'.
self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53).
self assert: self c2 localSelectors sort = #(bar foo m51).
!
Item was changed:
----- Method: PureBehaviorTest>>testPropagationWhenTraitCompositionModifications (in category 'testing-applying trait composition') -----
testPropagationWhenTraitCompositionModifications
"Test that the propagation mechanism works when
setting new traitCompositions."
self assert: self c2 methodDict size = 9. "2 + (3+(3+2))-1"
"removing methods"
self createTraitNamed: #T5
+ uses: self t1 + (self t2 - { #m21. #m22 }).
- uses: self t1 + self t2 - { #m21. #m22 }.
self assert: self c2 methodDict size = 7.
"adding methods"
self createTraitNamed: #T2 uses: self t3.
self assert: self c2 methodDict size = 10.
self assert: (self c2 methodDict keys includesAllOf: #(#m31 #m32 #m33 ))!
Item was changed:
----- Method: PureBehaviorTest>>testReshapeClass (in category 'testing-applying trait composition') -----
testReshapeClass
"self run: #testReshapeClass"
"Ensure that reshaping a class has no impact on its traits"
+ self assert: self c2 traitCompositionString = '(T5 - {#m11})'.
- self assert: self c2 traitCompositionString = 'T5 - {#m11}'.
self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53).
self assert: self c2 localSelectors sort = #(bar foo).
self c2 addInstVarName: 'foobar'.
+ self assert: self c2 traitCompositionString = '(T5 - {#m11})'.
- self assert: self c2 traitCompositionString = 'T5 - {#m11}'.
self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53).
self assert: self c2 localSelectors sort = #(bar foo).
self c2 removeInstVarName: 'foobar'.
+ self assert: self c2 traitCompositionString = '(T5 - {#m11})'.
- self assert: self c2 traitCompositionString = 'T5 - {#m11}'.
self assert: self c2 selectors sort = #(bar foo m12 m13 m21 m22 m51 m52 m53).
self assert: self c2 localSelectors sort = #(bar foo).
!
Item was changed:
----- Method: TraitCompositionTest>>testInvalidComposition (in category 'testing-basic') -----
testInvalidComposition
self shouldnt: [self t1 @ { (#a -> #b) } @ { (#x -> #y) }]
raise: TraitCompositionException.
self shouldnt: [(self t1 + self t2) @ { (#a -> #b) } @ { (#x -> #y) }]
raise: TraitCompositionException.
self shouldnt: [self t1 - { #a } - { #b }] raise: TraitCompositionException.
self shouldnt: [self t1 + self t2 - { #a } - { #b }]
raise: TraitCompositionException.
self should: [(self t1 - { #x }) @ { (#a -> #b) }]
raise: TraitCompositionException.
+ self should: [(self t1 + (self t2 - { #x } @ { (#a -> #b) }))]
- self should: [(self t1 + self t2 - { #x }) @ { (#a -> #b) }]
raise: TraitCompositionException.
self should: [self t1 + self t1] raise: TraitCompositionException.
self should: [(self t1 + self t2) @ { (#a -> #b) } + self t1]
raise: TraitCompositionException.
self should: [self t1 @ { (#a -> #m11). (#a -> #m12) }]
raise: TraitCompositionException.
self should: [self t1 @ { (#a -> #m11). (#b -> #a) }]
raise: TraitCompositionException!
Item was changed:
----- Method: TraitCompositionTest>>testPrinting (in category 'testing-basic') -----
testPrinting
| composition1 composition2 |
+ composition1 := ((self t1 - { #a } + (self t2 @ { (#z -> #c) } - { #b. #c }))
+ + (self t3 - { #d. #e })
+ + (self t4 @ { (#x -> #a). (#y -> #b) })).
+ composition2 := (self t4 @ { (#x -> #a). (#y -> #b) }) + (self t1 - { #a })
+ + (self t3 - { #d. #e })
+ + (self t2 - { #b. #c }).
- composition1 := ((self t1 - { #a } + self t2) @ { (#z -> #c) } - { #b. #c }
- + self t3 - { #d. #e }
- + self t4) @ { (#x -> #a). (#y -> #b) }.
- composition2 := self t4 @ { (#x -> #a). (#y -> #b) } + self t1 - { #a }
- + self t3 - { #d. #e }
- + self t2 - { #b. #c }.
self assertPrints: composition1 printString
+ like: '(T1 - {#a}) + ((T2 @ {#z->#c}) - {#b. #c}) + (T3 - {#d. #e}) + (T4 @ {#x->#a. #y->#b})'.
- like: 'T1 - {#a} + T2 @ {#z->#c} - {#b. #c} + T3 - {#d. #e} + T4 @ {#x->#a. #y->#b}'.
self assertPrints: composition2 printString
+ like: '(T4 @ {#x->#a. #y->#b}) + (T1 - {#a}) + (T3 - {#d. #e}) + (T2 - {#b. #c})'!
- like: 'T4 @ {#x->#a. #y->#b} + T1 - {#a} + T3 - {#d. #e} + T2 - {#b. #c}'!
Item was changed:
----- Method: TraitFileOutTest>>setUp (in category 'running') -----
setUp
super setUp.
SystemOrganization addCategory: self categoryName.
td := self createTraitNamed: #TD uses: {}.
td compile: 'd' classified: #cat1.
tc := self createTraitNamed: #TC uses: td.
tc compile: 'c' classified: #cat1.
tb := self createTraitNamed: #TB uses: td.
tb compile: 'b' classified: #cat1.
+ ta := self createTraitNamed: #TA uses: tb + ((tc @ {#cc->#c}) - {#c}).
- ta := self createTraitNamed: #TA uses: tb + tc @ {#cc->#c} - {#c}.
ta compile: 'a' classified: #cat1.
ca := self createClassNamed: #CA superclass: Object uses: {}.
ca compile: 'ca' classified: #cat1.
cb := self createClassNamed: #CB superclass: ca uses: ta.
cb compile: 'cb' classified: #cat1.
"make the class of cb also use tc:"
cb class uses: ta classTrait + tc instanceVariableNames: ''.!
Item was changed:
----- Method: TraitFileOutTest>>testFileOutCategory (in category 'testing') -----
testFileOutCategory
"File out whole system category, delete all classes and traits and then
file them in again."
"self run: #testFileOutCategory"
SystemOrganization fileOutCategory: self categoryName.
SystemOrganization removeSystemCategory: self categoryName.
self deny: (Smalltalk globals keys includesAnyOf: #(CA CB TA TB TC TD)).
self fileIn: self categoryName , '.st'..
self assert: (Smalltalk globals keys includesAllOf: #(CA CB TA TB TC TD)).
ta := Smalltalk at: #TA.
self assert: (ta isKindOf: Trait).
+ self assert: 'TB + ((TC @ {#cc->#c}) - {#c})' equals: ta traitComposition asString.
- self assert: 'TB + TC @ {#cc->#c} - {#c}' equals: ta traitComposition asString.
self assert: (ta methodDict keys includesAllOf: #(a b cc)).
cb := Smalltalk at: #CB.
self assert: (cb isKindOf: Class).
self assert: 'TA' equals: cb traitComposition asString.
self assert: (cb methodDict keys includesAllOf: #(cb a b cc)).
"test classSide traitComposition of CB"
self assert: 'TA classTrait + TC' equals: cb classSide traitComposition asString.
self assert: (cb classSide methodDict keys includesAllOf: #(d c))
!
Item was changed:
----- Method: TraitFileOutTest>>testFileOutTrait (in category 'testing') -----
testFileOutTrait
"fileOut trait T6, remove it from system and then file it in again"
"self run: #testFileOutTrait"
| fileName |
self t6 compile: 'localMethod: argument ^argument'.
self t6 classSide compile: 'localClassSideMethod: argument ^argument'.
self t6 fileOut.
fileName := self t6 asString , '.st'.
self resourceClassesAndTraits remove: self t6.
self t6 removeFromSystem.
self fileIn: fileName.
self assert: (Smalltalk includesKey: #T6).
TraitsResource current t6: (Smalltalk at: #T6).
self resourceClassesAndTraits add: self t6.
self assert: (self t6 isKindOf: Trait).
+ self assert: 'T1 + (T2 @ {#m22Alias->#m22})' equals: self t6 traitComposition asString.
- self assert: 'T1 + T2 @ {#m22Alias->#m22}' equals: self t6 traitComposition asString.
self assert: (self t6 methodDict keys includesAllOf: #(
#localMethod:
#m11
#m12
#m13
#m21
#m22
#m22Alias
)).
self assert: 2 equals: self t6 classSide methodDict size.
self assert: (self t6 classSide methodDict keys includes: #localClassSideMethod:) description: 'Missing selector #localClassSideMethod:'.
self assert: (self t6 classSide methodDict keys includes: #m2ClassSide:) description: 'Missing selector #m2ClassSide:'.!
Item was changed:
----- Method: TraitTest>>testPrinting (in category 'testing') -----
testPrinting
self assertPrints: self t6 definition
like: 'Trait named: #T6
+ uses: T1 + (T2 @ {#m22Alias->#m22})
- uses: T1 + T2 @ {#m22Alias->#m22}
category: ''TraitsTests-Kernel'''!
Item was changed:
----- Method: TraitsResource>>setUp (in category 'as yet unclassified') -----
setUp
"Please note, that most tests rely on this setup of traits and
classes - and that especially the order of the definitions matters."
"SetUpCount := SetUpCount + 1."
dirty := false.
SystemChangeNotifier uniqueInstance doSilently:
[self t1: (self createTraitNamed: #T1
uses: { }).
self t1 comment: 'I am the trait T1'.
self t2: (self createTraitNamed: #T2
uses: { }).
self t2 compile: 'm21 ^21' classified: #cat1.
self t2 compile: 'm22 ^22' classified: #cat2.
self t2 classSide compile: 'm2ClassSide: a ^a'.
self t3: (self createTraitNamed: #T3
uses: { }).
self t3 compile: 'm31 ^31' classified: #cat1.
self t3 compile: 'm32 ^32' classified: #cat2.
self t3 compile: 'm33 ^33' classified: #cat3.
self t4: (self createTraitNamed: #T4
uses: { (self t1). (self t2) }).
self t4 compile: 'm11 ^41' classified: #catX. "overrides T1>>m11"
self t4 compile: 'm42 ^42' classified: #cat2.
self t5: (self createTraitNamed: #T5 uses: self t1 + self t2).
self t5 compile: 'm51 ^super foo' classified: #cat1.
self t5 compile: 'm52 ^ self class bar' classified: #cat1.
self t5 compile: 'm53 ^ self class bar' classified: #cat1.
self t6: (self createTraitNamed: #T6
+ uses: (self t1 + (self t2 @ { (#m22Alias -> #m22) }))).
- uses: (self t1 + self t2) @ { (#m22Alias -> #m22) }).
self c1: (self
createClassNamed: #C1
superclass: Object
uses: { }).
self c1 compile: 'foo ^true' classified: #accessing.
self t1 compile: 'm11 ^11' classified: #cat1.
self t1 compile: 'm12 ^12' classified: #cat2.
self t1 compile: 'm13 ^self m12' classified: #cat3.
self c2: (self
createClassNamed: #C2
superclass: self c1
uses: self t5 - { #m11 }).
self c2 compile: 'foo ^false' classified: #private.
self c2 compile: 'bar ^self foo' classified: #private.
self setUpTrivialRequiresFixture.
self setUpTwoLevelRequiresFixture.
self setUpTranslatingRequiresFixture].
SystemChangeNotifier uniqueInstance notify: self ofAllSystemChangesUsing: #codeChangedEvent:!
More information about the Squeak-dev
mailing list
|