Hi Vitalije, I think I have a bigger problem - see my other message. Even when I run Leo's own unit tests I get no "output".
On Monday, October 15, 2018 at 2:37:32 PM UTC-7, vitalije wrote: > > you should put: > > 1. @others line in @test node before assertions statements > 2. put cloned factorial node under the @test node > > that way the definition of the factorial function will be part of the test > script that get executed by Leo's run-tests command. > It should look like: > -factorial (clone) > -Tests > -@test Test Factorial > -factorial(clone) > > > Vitalije > > On Monday, October 15, 2018 at 11:29:44 PM UTC+2, [email protected] wrote: >> >> Thanks vitalijie. >> >> I think I get the idea, but I'm still having trouble. >> >> Let's say I start with this node (hyphen denotes a node, and indented >> hyphen denotes a subnode). >> >> - factorial >> >> This node contains my factorial definition. >> >> Now I'll create some more nodes so that I end up with: >> >> - factorial (clone) >> - Tests >> - factorial (clone) >> - @test Test Factorial >> >> The @test node contains the following lines: >> >> self.assertEqual(factorial(5), 121) >> self.assertEqual(factorial(5), 122) >> assert (factorial(5)==120) >> >> The "Tests" node contains the following: >> >> @language python >> @others >> >> Now when I run "run-all-unit-tests-locally" I don't see any results. I >> know the command does something because I see the nodes change/flicker >> momentarily. I looked at the console window ( >> https://leoeditor.com/installing.html#running-leo-from-a-console-window) >> and ran it from the command line, but I still see nothing. >> >> Things I tried: >> >> 1. Quitting and restarting. >> 2. Remove @others above >> 3. Added the preamble in >> https://leoeditor.com/unitTesting.html#test-driven-development-in-leo in >> the Tests node. Toggled the if 0 to if 1 but it made no difference. >> >> What am I missing? >> >> On Friday, October 12, 2018 at 11:49:24 PM UTC-7, vitalije wrote: >>> >>> I usually make clone of the whole content of a module being tested as a >>> first child of a @test node, and put there in the @test node @others >>> directive at the top of body. After @others I write code that tests some >>> function from the module. >>> >>> Quite often I start developing a module without creating an external >>> file. The whole development module is under one node that is cloned under >>> several @test nodes, and only after I am satisfied with the code, I just >>> make another clone and put it under some @clean or @file node as the only >>> top level child to create external file. >>> >>> This works very well for me when developing Python. When I am writing in >>> CoffeeScript I use cloned content of a module in two different external >>> files: one is a regular CoffeeScript module, and the other is saved under >>> /test/ folder and usually in a file named "test_<module>.coffee". >>> >>> [image: leo-unit-testing.png] >>> For example in the above picture you can see two @clean nodes: >>> >>> 1. @clean coffee/ev-3.coffee >>> 2. @clean test/spec/spec3-1.coffee >>> >>> Both of this two nodes have under them cloned node `ev-3 kod` which >>> contains all definitions (functions, constants, singleton instances, ...). >>> Node named 'izEvidencije` contains just some comments and @others line. So, >>> all those definitions are defined and present in both files >>> coffee/ev-3.coffee and test/spec/spec3-1.coffee. In the spec3-1.coffee >>> there is a node `specifikacije` which contains all specs that are >>> describing (and testing) behavior of ev-3.coffee module. >>> >>> For Python development, it is even easier because Leo executes test >>> nodes on the fly, so there is no need for the external test file, but if >>> you do wish to create test files and use some other test runner you can use >>> the same technique as in the above example for CoffeeScript. >>> >>> HTH >>> Vitalije >>> >>> On Saturday, October 13, 2018 at 12:23:32 AM UTC+2, MN wrote: >>>> >>>> Any node, but @test or @button nodes are easiest to use. >>>>> >>>>> Is that defined somewhere? >>>>>> >>>>> >>>>> Yes, in the next sentence. >>>>> >>>> >>>> The sentence can be parsed in two ways: >>>> >>>> "This node (in the Leo outline) defines your development environment. >>>> You can use an @test node, an @button node, or an @command node" >>>> >>>> I read it as "There is something called a dev node" and "You can make a >>>> dev node a @test, @button or @command node". It sounded like a dev node is >>>> a node with a special property (e.g. a cloned node is visually different >>>> from a regular node), and then you can make THAT dev node a @test node. I >>>> think a better phrasing would be: >>>> >>>> "A dev node is defined as any node that is either a @test, @button or >>>> @command node." >>>> >>>> For the examples you gave (and your other comments in the group), it >>>> seems like I cannot put the unit test in its own node (even as a sibling)? >>>> >>>> On Fri, Oct 12, 2018 at 2:11 AM Edward K. Ream <[email protected]> >>>> wrote: >>>> >>>>> On Thursday, October 11, 2018 at 4:17:07 PM UTC-5, MN wrote: >>>>> >>>>> > What is a dev node? >>>>> >>>>> Any node, but @test or @button nodes are easiest to use. >>>>> >>>>> Is that defined somewhere? >>>>>> >>>>> >>>>> Yes, in the next sentence. >>>>> >>>>> Suppose I have a node whose contents are: >>>>>> >>>>>> from operator import mul >>>>>> >>>>>> def factorial(number): >>>>>> if number < 0: >>>>>> raise ValueError >>>>>> if number == 0: >>>>>> return 1 >>>>>> return reduce(mul, range(number+1), 1) >>>>>> >>>>>> It's a simple function. Imagine this is a helper function that will >>>>>> be used by some other function that interacts with Leo. It is not saved >>>>>> to >>>>>> any file (beyond the .leo file, of course). I would like to create a >>>>>> unit >>>>>> test for this. What is the best way? >>>>>> >>>>> >>>>> There are several ways. >>>>> >>>>> >>>>> *1. Use Python doctests >>>>> <https://docs.python.org/2/library/doctest.html>* >>>>> >>>>> Here is a tested code: Create a node, @test factorial, whose body is: >>>>> >>>>> import doctest >>>>> from operator import mul >>>>> >>>>> def factorial(number): >>>>> """ >>>>> >>> factorial(5) >>>>> 120 >>>>> """ >>>>> if number < 0: >>>>> raise ValueError >>>>> if number == 0: >>>>> return 1 >>>>> return reduce(mul, range(number+1), 1) >>>>> >>>>> doctest.run_docstring_examples(factorial, globals(), name='factorial') >>>>> >>>>> Execute the code with with Ctrl-B, or with one of the >>>>> run-*-unit-tests-locally commands. >>>>> >>>>> This will fail, for different reasons, on both Python 2 and 3. >>>>> >>>>> *2. Define unit tests using UnitTest.TestCase* >>>>> >>>>> Alternatively, you can define explicit tests. Here is tested code. >>>>> >>>>> import unittest >>>>> from operator import mul >>>>> >>>>> def factorial(number): >>>>> if number < 0: >>>>> raise ValueError >>>>> if number == 0: >>>>> return 1 >>>>> return reduce(mul, range(number+1), 1) >>>>> >>>>> class TestFactorial(unittest.TestCase): >>>>> >>>>> def test1(self): >>>>> self.assertTrue(factorial(5)==120) >>>>> >>>>> suite = unittest.TestLoader().loadTestsFromTestCase(TestFactorial) >>>>> unittest.TextTestRunner(verbosity=1).run(suite) >>>>> >>>>> Again, you can run this with Ctrl-B, or with one of Leo's unit test >>>>> commands. >>>>> >>>>> Edward >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "leo-editor" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To post to this group, send email to [email protected]. >>>>> Visit this group at https://groups.google.com/group/leo-editor. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "leo-editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/leo-editor. For more options, visit https://groups.google.com/d/optout.
