| 1 | #!/usr/bin/env python2
 | 
| 2 | """
 | 
| 3 | symbols_test.py: Tests for symbols.py
 | 
| 4 | 
 | 
| 5 | Copied out of symbols.py.  You pass this some filenames.
 | 
| 6 | """
 | 
| 7 | 
 | 
| 8 | import sys
 | 
| 9 | import symtable
 | 
| 10 | 
 | 
| 11 | from . import symbols
 | 
| 12 | from . import transformer
 | 
| 13 | 
 | 
| 14 | 
 | 
| 15 | def list_eq(l1, l2):
 | 
| 16 |     return sorted(l1) == sorted(l2)
 | 
| 17 | 
 | 
| 18 | def get_names(syms):
 | 
| 19 |     return [s for s in [s.get_name() for s in syms.get_symbols()]
 | 
| 20 |             if not (s.startswith('_[') or s.startswith('.'))]
 | 
| 21 | 
 | 
| 22 | 
 | 
| 23 | if __name__ == "__main__":
 | 
| 24 |     # TODO: Pass symbols
 | 
| 25 |     transformer.Init(None)
 | 
| 26 | 
 | 
| 27 |     for file in sys.argv[1:]:
 | 
| 28 |         print(file)
 | 
| 29 |         f = open(file)
 | 
| 30 |         buf = f.read()
 | 
| 31 |         f.close()
 | 
| 32 |         syms = symtable.symtable(buf, file, "exec")
 | 
| 33 |         mod_names = get_names(syms)
 | 
| 34 | 
 | 
| 35 |         #tree = parseFile(file)
 | 
| 36 |         tree = None
 | 
| 37 |         s = symbols.SymbolVisitor()
 | 
| 38 |         s.Dispatch(tree)
 | 
| 39 | 
 | 
| 40 |         # compare module-level symbols
 | 
| 41 |         names2 = s.scopes[tree].get_names()
 | 
| 42 | 
 | 
| 43 |         if not list_eq(mod_names, names2):
 | 
| 44 |             print()
 | 
| 45 |             print("oops", file)
 | 
| 46 |             print(sorted(mod_names))
 | 
| 47 |             print(sorted(names2))
 | 
| 48 |             sys.exit(-1)
 | 
| 49 | 
 | 
| 50 |         d = {}
 | 
| 51 |         d.update(s.scopes)
 | 
| 52 |         del d[tree]
 | 
| 53 |         scopes = d.values()
 | 
| 54 |         del d
 | 
| 55 | 
 | 
| 56 |         for s in syms.get_symbols():
 | 
| 57 |             if s.is_namespace():
 | 
| 58 |                 l = [sc for sc in scopes
 | 
| 59 |                      if sc.name == s.get_name()]
 | 
| 60 |                 if len(l) > 1:
 | 
| 61 |                     print("skipping", s.get_name())
 | 
| 62 |                 else:
 | 
| 63 |                     if not list_eq(get_names(s.get_namespace()),
 | 
| 64 |                                    l[0].get_names()):
 | 
| 65 |                         print(s.get_name())
 | 
| 66 |                         print(sorted(get_names(s.get_namespace())))
 | 
| 67 |                         print(sorted(l[0].get_names()))
 | 
| 68 |                         sys.exit(-1)
 |