Eliot Miranda uploaded a new version of SUnit to project The Trunk:
http://source.squeak.org/trunk/SUnit-eem.93.mcz ==================== Summary ==================== Name: SUnit-eem.93 Author: eem Time: 27 March 2013, 12:34:18.106 pm UUID: daa99dec-920c-4091-978e-600a5d57deb3 Ancestors: SUnit-cmm.92 Move ClassTestCase to SUnit-Extensions from Tests. =============== Diff against SUnit-cmm.92 =============== Item was added: + TestCase subclass: #ClassTestCase + instanceVariableNames: '' + classVariableNames: '' + poolDictionaries: '' + category: 'SUnit-Extensions'! + + !ClassTestCase commentStamp: 'brp 7/26/2003 16:57' prior: 0! + This class is intended for unit tests of individual classes and their metaclasses. + + It provides methods to determine the coverage of the unit tests. + + Subclasses are expected to re-implement #classesToBeTested and #selectorsToBeIgnored. + + They should also implement to confirm that all methods have been tested. + + #testCoverage + + super testCoverage. + + ! Item was added: + ----- Method: ClassTestCase class>>isAbstract (in category 'Testing') ----- + isAbstract + "Override to true if a TestCase subclass is Abstract and should not have + TestCase instances built from it" + + ^self name = #ClassTestCase + ! Item was added: + ----- Method: ClassTestCase class>>mustTestCoverage (in category 'Testing') ----- + mustTestCoverage + + ^ false! Item was added: + ----- Method: ClassTestCase>>categoriesForClass: (in category 'private') ----- + categoriesForClass: aClass + + ^ aClass organization allMethodSelectors collect: + [:each | aClass organization categoryOfElement: each]. + ! Item was added: + ----- Method: ClassTestCase>>classToBeTested (in category 'coverage') ----- + classToBeTested + + self subclassResponsibility! Item was added: + ----- Method: ClassTestCase>>selectorsNotTested (in category 'coverage') ----- + selectorsNotTested + + ^ self selectorsToBeTested difference: self selectorsTested. + ! Item was added: + ----- Method: ClassTestCase>>selectorsTested (in category 'Coverage') ----- + selectorsTested + | literals | + literals := Set new. + self class + selectorsAndMethodsDo: [ :s :m | (s beginsWith: 'test') + ifTrue: [ literals addAll: (m messages)] ]. + ^ literals asSortedArray! Item was added: + ----- Method: ClassTestCase>>selectorsToBeIgnored (in category 'coverage') ----- + selectorsToBeIgnored + ^ #(#DoIt #DoItIn:)! Item was added: + ----- Method: ClassTestCase>>selectorsToBeTested (in category 'coverage') ----- + selectorsToBeTested + + ^ ( { self classToBeTested. self classToBeTested class } gather: [:c | c selectors]) + difference: self selectorsToBeIgnored! Item was added: + ----- Method: ClassTestCase>>targetClass (in category 'private') ----- + targetClass + |className| + + className := self class name asText copyFrom: 0 to: self class name size - 4. + ^ Smalltalk at: (className asString asSymbol). + ! Item was added: + ----- Method: ClassTestCase>>testClassComment (in category 'tests') ----- + testClassComment + self shouldnt: [self targetClass organization hasNoComment].! Item was added: + ----- Method: ClassTestCase>>testCoverage (in category 'tests') ----- + testCoverage + + | untested | + self class mustTestCoverage ifTrue: + [ untested := self selectorsNotTested. + self assert: untested isEmpty + description: untested size asString, ' selectors are not covered' ]! Item was added: + ----- Method: ClassTestCase>>testNew (in category 'tests') ----- + testNew + self shouldnt: [self targetClass new] raise: Error.! Item was added: + ----- Method: ClassTestCase>>testUnCategorizedMethods (in category 'tests') ----- + testUnCategorizedMethods + | categories slips | + categories := self categoriesForClass: self targetClass. + slips := categories select: [:each | each = #'as yet unclassified']. + self should: [slips isEmpty]. ! |
Free forum by Nabble | Edit this page |