Add tests for the attribute access DSL
This commit is contained in:
parent
d18e752d33
commit
78f6301e27
@ -464,3 +464,14 @@ def test_for_compile_error():
|
|||||||
assert(e.message == "`for' requires a body to evaluate")
|
assert(e.message == "`for' requires a body to evaluate")
|
||||||
else:
|
else:
|
||||||
assert(False)
|
assert(False)
|
||||||
|
|
||||||
|
|
||||||
|
def test_attribute_access():
|
||||||
|
"""Ensure attribute access compiles correctly"""
|
||||||
|
can_compile("(. foo bar baz)")
|
||||||
|
can_compile("(. foo [bar] baz)")
|
||||||
|
can_compile("(. foo bar [baz] [0] quux [frob])")
|
||||||
|
can_compile("(. foo bar [(+ 1 2 3 4)] quux [frob])")
|
||||||
|
cant_compile("(. foo bar :baz [0] quux [frob])")
|
||||||
|
cant_compile("(. foo bar baz (0) quux [frob])")
|
||||||
|
cant_compile("(. foo bar baz [0] quux {frob})")
|
||||||
|
@ -888,3 +888,23 @@
|
|||||||
(setv stdout (.getvalue sys.stdout))
|
(setv stdout (.getvalue sys.stdout))
|
||||||
(setv sys.stdout prev-stdout)
|
(setv sys.stdout prev-stdout)
|
||||||
(assert (= stdout "leaky()\nleaky()\nmacros()\n")))
|
(assert (= stdout "leaky()\nleaky()\nmacros()\n")))
|
||||||
|
|
||||||
|
|
||||||
|
(defn test-attribute-access []
|
||||||
|
"NATIVE: Test the attribute access DSL"
|
||||||
|
(defclass mycls [object])
|
||||||
|
|
||||||
|
(setv foo [(mycls) (mycls) (mycls)])
|
||||||
|
(assert (is (. foo) foo))
|
||||||
|
(assert (is (. foo [0]) (get foo 0)))
|
||||||
|
(assert (is (. foo [0] --class--) mycls))
|
||||||
|
(assert (is (. foo [1] --class--) mycls))
|
||||||
|
(assert (is (. foo [(+ 1 1)] --class--) mycls))
|
||||||
|
(assert (= (. foo [(+ 1 1)] --class-- --name-- [0]) "m"))
|
||||||
|
(assert (= (. foo [(+ 1 1)] --class-- --name-- [1]) "y"))
|
||||||
|
|
||||||
|
(setv bar (mycls))
|
||||||
|
(setv (. foo [1]) bar)
|
||||||
|
(assert (is bar (get foo 1)))
|
||||||
|
(setv (. foo [1] test) "hello")
|
||||||
|
(assert (= (getattr (. foo [1]) "test") "hello")))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user