[squeak-dev] The Trunk: Tests-ar.53.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Mar 3 04:22:46 UTC 2010
Andreas Raab uploaded a new version of Tests to project The Trunk:
http://source.squeak.org/trunk/Tests-ar.53.mcz
==================== Summary ====================
Name: Tests-ar.53
Author: ar
Time: 2 March 2010, 8:22:31.19 pm
UUID: 485253c5-ac9d-364d-b950-bdac21bc4cd3
Ancestors: Tests-ar.52
Improved PackageDependencyTest now prints out dependencies upon failure so that we can see what the dependencies are and what we need to fix.
=============== Diff against Tests-ar.52 ===============
Item was changed:
+ ----- Method: PackageDependencyTest>>testPackage:dependsOnlyOn: (in category 'utilities') -----
- ----- Method: PackageDependencyTest>>testPackage:dependsOnlyOn: (in category 'tests') -----
testPackage: pkgName dependsOnlyOn: pkgList
+ "Ensure that the package with the given name depends only on the packages in pkgList.
+ NOTE: If you use this for fixing dependencies, classDeps includes the classes
+ and users from the package(s) not declared as dependents. Basically, you need
+ to fix all the references in classDeps to make the test pass."
+ | classDeps pi pkgDeps |
+ classDeps := IdentityDictionary new.
- "Ensure that the package with the given name depends only on the packages in pkgList"
- | classes pi deps |
- classes := IdentitySet new.
pi := PackageOrganizer default packageNamed: pkgName ifAbsent:[^self]. "unloaded"
+ pi classes do:[:pkgClass|
+ (classDeps at: (pkgClass superclass ifNil:[ProtoObject])
+ ifAbsentPut:[OrderedCollection new]) add: pkgClass name, ' superclass'.
+ ].
- pi classes do:[:pkgClass| classes add: (pkgClass superclass ifNil:[ProtoObject])].
pi methods do:[:mref| | cm |
cm := mref compiledMethod.
1 to: cm numLiterals do:[:i| | lit |
((lit := cm literalAt: i) isVariableBinding
+ and:[lit value isBehavior]) ifTrue:[(classDeps at: lit value ifAbsentPut:[OrderedCollection new]) add: cm methodClass asString, '>>', cm selector]]].
+ pkgDeps := Dictionary new.
+ classDeps keys do:[:aClass| | pkg |
- and:[lit value isBehavior]) ifTrue:[classes add: lit value]]].
- deps := Dictionary new.
- classes do:[:aClass| | pkg |
pkg := PackageOrganizer default packageOfClass: aClass ifNone:[nil].
pkg ifNil:[
+ Transcript cr; show: 'WARNING: No package for ', aClass.
+ (classDeps removeKey: aClass) do:[:each| Transcript crtab; show: each].
- Transcript cr; show: 'WARNING: No package for ', pkg.
] ifNotNil:[
+ (pkgDeps at: pkg name ifAbsentPut:[OrderedCollection new]) add: aClass.
- (deps at: pkg name ifAbsentPut:[OrderedCollection new]) add: aClass.
].
].
+ (pkgDeps removeKey: pkgName ifAbsent:[#()])
+ do:[:aClass| classDeps removeKey: aClass ifAbsent:[]].
- deps removeKey: pkgName ifAbsent:[].
pkgList do:[:pkg|
+ self assert: (pkgDeps includesKey: pkg).
+ (pkgDeps removeKey: pkg ifAbsent:[#()])
+ do:[:aClass| classDeps removeKey: aClass ifAbsent:[]].
- self assert: (deps includesKey: pkg).
- deps removeKey: pkg.
].
+ classDeps keysAndValuesDo:[:class :deps|
+ Transcript cr; show: class name, ' dependencies:'.
+ deps do:[:each| Transcript crtab; show: each].
+ ].
+ self assert: pkgDeps isEmpty.
+ !
- self assert: deps isEmpty.!
More information about the Squeak-dev
mailing list
|