7 OUnit.assert_equal ~printer:(string_of_list $ List.map Ast.to_string_stmt) x y
10 {(Node.empty x) with Node.filename = "<string>"; Node.lineno = 0}
14 Node.filename = "<string>";
34 let meth name args body =
35 (node name,List.map node args,body)
37 let klass name super attrs methods =
38 `Class (node name,node super,List.map node attrs,methods)
40 let define_class name super attrs =
41 `DefineClass (node name,node super,List.map node attrs)
43 let define_method name self obj args body =
44 `DefineMethod (node name,(node self,node obj),List.map node args,body)
47 ("clos module test" >::: [
53 pos ("bar","Baz") 0 5 8 in
64 ok [`Class (klass,super,attrs,
65 [f,self::args,`Block []])] @@
66 trans [`DefineClass (klass,super,attrs);
67 `DefineMethod(f,(self,obj),args,`Block [])]);
70 ok [klass "Foo" ("bar","Baz") []
71 [meth "f" ["self";"x"] (int 42)]] @@
72 trans [define_class "Foo" ("bar","Baz") [];
73 define_method "f" "self" "Foo" ["x"] (int 42)]);
76 ok [klass "Foo" ("bar","Baz") ["x";"y"] []] @@
77 trans [define_class "Foo" ("bar","Baz") ["x";"y"]]);
78 "plain is not change" >::
80 ok [`Expr (int 42)] @@
81 trans [`Expr (int 42)]);
82 "define and plain is mixed" >::
84 ok [klass "Foo" ("bar","Baz") []
85 [meth "f" ["self";"x"] (int 42)];
87 trans [define_class "Foo" ("bar","Baz") [];
89 define_method "f" "self" "Foo" ["x"] (int 42)]);
92 ok [klass "Foo" ("bar","Baz") []
93 [meth "f" ["self";"x"] (int 42)];
94 `Expr (`Invoke (var "obj",node "f",[int 10]))] @@
95 trans [define_class "Foo" ("bar","Baz") [];
96 define_method "f" "self" "Foo" ["x"] (int 42);
97 `Expr (`Call [var "f";var "obj";int 10])]);
100 ok [`Expr (`If (`Invoke (var "obj",node "f",[int 10]),
103 trans [define_method "f" "self" "Foo" ["x"] (int 42);
104 `Expr (`If (`Call [var "f";var "obj";int 10],