| 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) |