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

Reply via email to