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