That is just AMAZINGLY COOL. I cannot believe we can do that in 5 lines of code. WOW. Why nobody wrote a better test coverage report wich such backend? Alex, does you stuff do something with that?
cheers On Tue, Feb 21, 2012 at 4:03 PM, Pavel Krivanek <[email protected]>wrote: > Hi, > > what about to intrroduce tests that will test coverage of tests? Some > improved version of the code below. Are there some tool for Smalltalk > showing uncovered lines of code? There are such tools in Java world > :-) One little problem is that this code do not work on Linux because > of a VM error that cause test failures on CI server too. > > Cheers, > Pavel > > | class test trace classTrace result | > > class := Time. > test := TimeTest. > > trace := Dictionary new. > > thisContext runSimulated: [test suite run] contextAtEachStep: [ :current | > | cls sel methods bytecodes | > cls := current method methodClass. > sel := current method selector. > methods := trace at: cls ifAbsentPut: Dictionary new. > bytecodes := methods at: sel ifAbsentPut: Set new. > bytecodes add: current pc.] > > trace . > > result := String streamContents: [:s | > > classTrace := trace at: class ifAbsent: nil. > classTrace > ifNil: [ > s nextPutAll: 'Class ', class name, ' not called'; cr. ] > ifNotNil: [ > s nextPutAll: class name; cr. > class selectorsDo: [:sel | > | m usedBytecodes allBytecodes | > m := class >> sel. > usedBytecodes := (classTrace at: sel ifAbsent: Set > new) size. > allBytecodes := 0. > m symbolicLinesDo: [:pc :lineForPC | allBytecodes > := allBytecodes + 1 ].. > s tab; nextPutAll: sel; nextPutAll: ' - '; > nextPutAll: > (usedBytecodes / allBytecodes * 100) asFloat asString; nextPutAll: > '%'; cr. ]]. > ]. > result.. > > -- Mariano http://marianopeck.wordpress.com
