Hi Laurent,

Perhaps I am missing something but you only need 2 conditions to detect what 
you are looking for:

1) changed method is a test (and defined in a subclass of TestCase)
2) changed method has a sender that is a test method



-----------------
Benoit St-Jean
A standpoint is an intellectual horizon of radius zero.
(Albert Einstein)

    





From: laurent.laff...@gmail.com
Date: Sun, 27 Jun 2010 17:33:53 +0200
To: pharo-project@lists.gforge.inria.fr
Subject: [Pharo-project] Xtreme Pharo hacker needed :)

Hi,
I struggle for a functionality I want to add on Autotest. Suppose a class with 
two methods A and B, such as A senders of B
Zork>>methodA   self methodB


And unit tests:
ZorkTest>>testSomething   .....   Zork new methodA  ...  self assert: ....



If I change methodA, Autotest detects it, search all senders of methodA in 
tests and run. As  ZorkTest>>testSomething is sender of Zork>>methodA, it will 
find and run it.
Now if I change methodB and there's no senders in tests, the previous heuristic 
won't work. So I added as last heuristic: if no method found, search all 
TestCases that references the changed method class and run. 

So here it will find ZorkTest and run all its tests. The problem is that I 
don't really know if the method I've changed has been actually "hit" by the 
tests. I just see that tests has been run. I don't know if my method has been 
called when running the tests. 


So I want to detect this.
One way of doing this seems to use 
MethodContext>>runSimulated:contextAtEachStep:. I've found this looking at 
MessageTally. Is it the best solution ?


So in Autotest>>findRunAndShowTestsOf: I try something like this
Autotest>>findRunAndShowTestsOf:changedMethod  | testMethods aTestResult 
methodHit |

  "Finds the test related to changedMethod, run them and tell the view to 
update"       testMethods := search methodsFor: changedMethod.

                methodHit := false.     thisContext sender

                runSimulated: [aTestResult := runner run: testMethods]          
contextAtEachStep: [:current|  

                                                (current method = 
changedMethod)    "<--- here I detect if changedMethod has been hit"            
                                      ifTrue: [methodHit := true]].

        .....
but using this debugger opens with "SimulationGuardException: triggered by 
BlockClosure>>newProcess" in MethodContext>>doPrimitive:method:receiver:args: 


As I don't (yet :) understand all this stuff, I want to know if it's the right 
way to do it and what should I check.


ThanksLaurent Laffont

http://pharocasts.blogspot.com/
http://magaloma.blogspot.com/
                                          
_________________________________________________________________
MSN Dating: Find someone special. Start now.
http://go.microsoft.com/?linkid=9734384
_______________________________________________
Pharo-project mailing list
Pharo-project@lists.gforge.inria.fr
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to