In this thread I'll discuss issues related to unit tests for the python 
importer.

*The unit tests will change*

I've said that the new importer must pass all existing unit tests, but 
that's not exactly true, for the following reasons:

1. The new importer won't necessarily generate the same nodes.
2. I shall soon change some of the existing unit tests.

The real requirements:

1. The new importer must pass all perfect-import tests.
2. The new importer must generate reasonable nodes, preferably by using the 
existing python post pass.

*The structure of typical unit tests*

Let's use test_basic_nesting_1 as an example.  It is:

def test_basic_nesting_1(self):

    s = """
        import sys
        def f1():
            pass

        class Class1:
            def method11():
                pass
            def method12():
                pass
                
        a = 2
        
        def f2():
            pass
    
        # An outer comment
        @myClassDecorator
        class Class2:
            @myDecorator
            def method21():
                pass
            def method22():
                pass
                
        # About main.
        def main():
            pass
    
        if __name__ == '__main__':
            main()
    """
    p = self.run_test(s, verbose=False)
    self.check_headlines(p, (
        (1, 'Organizer: Declarations'),
        (1, 'f1'),
        (1, 'class Class1'),
        (2, 'method11'),
        (2, 'method12'),
        (1, 'Organizer: a = 2'),
        (1, 'f2'),
        (1, 'class Class2'),
        (2, 'method21'),
        (2, 'method22'),
        (1, 'main'),
    ))

This is an important test. It verifies that common python code will import 
correctly, and will have the expected structure. The line:

p = self.run_test(s, verbose=False)

contains the perfect import test.  That is, BaseTestImporter.run_test will 
fail if writing p does not generate (modulo blank lines) the string s.

The call to BaseTestImporter.check_headlines has the form:

self.check_headlines(p, (
  << table of tuples (node level, node headline) >>
))

Clearly, the table may have to change. During early development, I would be 
OK with disabling such calls altogether.

However, it's important to handle decorators correctly!  They should *not* 
reside in their own nodes.

*Converting old-style structure tests*

A cff reveals that 17 unit tests should be converted to call 
check_headlines. At present, they use clumsy, by-hand code that is roughly 
equivalent.  I'll do the conversion today or tomorrow and push the result 
to devel.

*Summary*

BaseTestImporter.run_test verifies perfect importer.

BaseTestImporter.check_headlines runs only if the perfect-import checks 
pass. That table that check_headlines uses may have to change. That's fine 
with me, provided that decorators are placed correctly.

I shall soon convert all tests so that they use check_headlines rather than 
the more verbose equivalent.

All questions and comments are welcome.

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 view this discussion on the web visit 
https://groups.google.com/d/msgid/leo-editor/070ece5a-b9b6-47c8-9a18-0d2141a5962dn%40googlegroups.com.

Reply via email to