I should add it to Mocketry.

2011/7/19 Sean P. DeNigris <[email protected]>

> Ah, so the lookups are done once when the method is compiled and then
> stored
> in the CompiledMethod...
>
> My vision is to write something like:
>        cannedNow := DateAndTime stub: #now; andReturn: [ DateAndTime year:
> 2011
> month: 12 day: 24 hour: 12 minute: 34 second: 55 ].
>        testableClass := MyClass usingDouble: cannedNow.
>
> The first line seems easy, and for the second line, I have so far (very
> rough, but working):
>
>        | class copy |
>        class := MyClass.
>        copy := MyClass copy.
>
>        copy methods do: [ :m | | classRef |
>                (m hasLiteralSuchThat: [ :l | ((l isKindOf: Association)
> and: [ l key =
> #DateAndTime])])
>                        ifTrue: [ | newMeth refIndex |
>                                newMeth := copy methodDictionary at: m
> selector put: m copy.
>                                refIndex := newMeth indexOfLiteralSuchThat:
> [ :l | ((l isKindOf:
> Association) and: [ l key = #DateAndTime])].
>                                newMeth literalAt: refIndex put:
> #DateAndTime->MockedClass ] ].
>        ^ copy.
>
> Where CompiledMethod>>indexOfLiteralSuchThat: aBlock
>        "Answer the literal index of the argument, literal, or zero if
> none."
>        2 to: self numLiterals - 1 "exclude superclass +
> selector/properties"
>           do:
>                [:index |
>                (aBlock value: (self objectAt: index)) ifTrue: [^index -
> 1]].
>        ^0
>
> Thanks again.
> Sean
>
>
> --
> View this message in context:
> http://forum.world.st/Stubbing-class-side-methods-tp3674065p3676637.html
> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
>

Reply via email to