On Saturday, November 1, 2014 10:01:48 AM UTC-7, Jason Merrill wrote:
>
>
> On Thursday, October 30, 2014 8:08:23 PM UTC-4, Sal Mangano wrote:
>>>>>
>>>>> I wanted a unittest framework that worked more like unittest in python 
>>>>> (or xUnit in in other languages) so I 
>>>>> wrote g...@github.com:smangano/JLTest.git. If you find it useful great. I 
>>>>> am 
>>>>> still new to Julia so if you find anything showing poor taste I am happy 
>>>>> to 
>>>>> get critique and/or suggestions for improvement. I'll try to add better 
>>>>> docs but I think it is pretty self explanatory if you look at 
>>>>> test/runtests.jl
>>>>>
>>>>>
>>>>>
> Re: macros, in places where you have macros that should take a function, 
> or that will usually be called with a begin ... end block, you can often 
> replace them with a plain old function and simplify the implementation. 
> Julia's `do` syntax makes this especially easy. Same goes for macros that 
> take a string and don't use it to generate code.
>
> Borrowing the example from the readme:
>
> using JLTest
>
> @testcase begin
>     @casename "Mytest Tests"
>
>     #Some code
>     x = 0
>
>     #Function to be called before each test (optional)
>     @setUp () -> (x+=1)
>
>     #Function to be called after each test (optional)
>     @tearDown () -> (x=0)
>
>     @test begin
>         @testname "A Simple Test" #Name of test (optional)
>         @assertEqual(x,1)
>     end
>
>     #more tests or code...
>
> end # end of test case
>
>
> Could become
>
> using JLTest
>
> testcase() do
>     casename("Mytest Tests")
>
>     #Some code
>     x = 0
>
>     #Function to be called before each test (optional)
>     setUp() do
>         x += 1
>     end
>
>     #Function to be called after each test (optional)
>     tearDown() do
>         x=0
>     end
>
>     test() do
>         testname("A Simple Test") #Name of test (optional)
>         @assertEqual(x,1)
>     end
>
>     #more tests or code...
>
> end # end of test case
>
>
> So concretely, I'm suggesting testcase, casename, setup, teardown, test, 
> and testname could (should?) maybe all be functions instead of macros.
>
> The assertions are probably best left as macros, since they actually get 
> something out of delayed evaluation (i.e. being able to print the original 
> expresions when they fail).
>

I just took a look at the actual implementation, and it looks like part of 
the reason for all the macros is to have a kind of dynamic scoping--i.e. 
inside a testcase block there is an implicit current TestCase instance. I'm 
curious if others have suggestions about how to manage dynamic scoping like 
this (am I even using that term correctly?). It seems like something that 
comes up in a number of places, and I'm not sure if there's a consensus on 
it yet. One place I'm thinking of is in some of the plotting libraries, 
where you want to build up a plot incrementally, so it's desirable to have 
an idea of "the current plot".

Reply via email to