Lichen

internal_tests/references.py

90:c7ddfc4525da
2016-10-08 Paul Boddie Added some support for eliminating accessor class types where the provided attributes are invoked and are unbound methods. This uses a more sophisticated method involving usage observations that incorporate invocation information, permitting classes as accessors if paths through the code support them, even if other paths require instances as accessors to invoke methods.
     1 #!/usr/bin/env python     2      3 from referencing import decode_reference, Reference     4      5 def show_test(v1, v2):     6     print "%r %r %r" % (v1 == v2, v1, v2)     7      8 # Compare decoded and constructed references.     9     10 var1 = decode_reference("<var>")    11 var2 = Reference("<var>")    12 show_test(var1, var2)    13     14 # Compare with var with superfluous origin.    15     16 var3 = Reference("<var>", "whatever")    17 show_test(var1, var3)    18     19 # Compare with var and alias.    20     21 var4 = Reference("<var>", None, "attribute")    22 show_test(var1, var4)    23     24 # Compare with var with superfluous origin and alias.    25     26 var5 = Reference("<var>", "whatever", "attribute")    27 show_test(var1, var5)    28 show_test(var5.get_origin(), None)    29     30 # Compare vars with different aliases.    31     32 var6 = Reference("<var>", None, "other")    33 show_test(var4, var6)    34     35 # Check aliased var.    36     37 var7 = var1.alias("attribute")    38 show_test(var7, var4)    39     40 # Check class references, firstly with someclass being identified as a class.    41     42 cls1 = decode_reference("<class>", "someclass")    43 cls2 = Reference("<class>", "someclass")    44 show_test(cls1, cls2)    45     46 # Check aliasing of class references.    47     48 cls3 = cls1.alias("attribute")    49 cls4 = cls2.alias("other")    50 show_test(cls3, cls4)    51     52 # Check other class references.    53     54 cls5 = decode_reference("<class>:someclass")    55 cls6 = Reference("<class>", "someclass")    56 show_test(cls5, cls6)    57     58 # Check aliasing again.    59     60 cls7 = cls5.alias("attribute")    61 cls8 = cls6.alias("other")    62 show_test(cls7, cls8)    63     64 # Check instance references. These do not make sense without an origin.    65     66 inst1 = decode_reference("<instance>:someclass", "whatever")    67 inst2 = Reference("<instance>", "someclass")    68 show_test(inst1, inst2)    69     70 # Check instantiation.    71     72 inst3 = cls5.instance_of()    73 show_test(inst1, inst3)    74     75 # Check modules.    76     77 mod1 = decode_reference("somemodule")    78 mod2 = Reference("<module>", "somemodule")    79 show_test(mod1, mod2)    80     81 mod3 = decode_reference("<module>:somemodule")    82 show_test(mod1, mod3)    83     84 mod4 = decode_reference("<module>", "somemodule")    85 show_test(mod1, mod4)    86     87 # vim: tabstop=4 expandtab shiftwidth=4