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}
27 let meth name args body =
28 (node name,List.map node args,body)
30 let klass name super attrs methods =
31 Class (node name,node super,List.map node attrs,methods)
33 let define_class name super attrs =
34 DefineClass (node name,node super,List.map node attrs)
36 let define_method name self obj args body =
37 DefineMethod (node name,(node self,node obj),List.map node args,body)
40 ("clos module test" >::: [
43 ok [klass "Foo" ("bar","Baz") []
44 [meth "f" ["self";"x"] (int 42)]] @@
45 trans [define_class "Foo" ("bar","Baz") [];
46 define_method "f" "self" "Foo" ["x"] (int 42)]);
49 ok [klass "Foo" ("bar","Baz") ["x";"y"] []] @@
50 trans [define_class "Foo" ("bar","Baz") ["x";"y"]]);
51 "plain is not change" >::
54 trans [Plain (Expr (int 42))]);
55 "define and plain is mixed" >::
57 ok [klass "Foo" ("bar","Baz") []
58 [meth "f" ["self";"x"] (int 42)];
60 trans [define_class "Foo" ("bar","Baz") [];
61 Plain (Expr (int 42));
62 define_method "f" "self" "Foo" ["x"] (int 42)]);
65 ok [klass "Foo" ("bar","Baz") []
66 [meth "f" ["self";"x"] (int 42)];
67 Expr (Invoke (var "obj",node "f",[int 10]))] @@
68 trans [define_class "Foo" ("bar","Baz") [];
69 define_method "f" "self" "Foo" ["x"] (int 42);
70 Plain (Expr (Call [var "f";var "obj";int 10]))]);
73 ok [Expr (If (Invoke (var "obj",node "f",[int 10]),
76 trans [define_method "f" "self" "Foo" ["x"] (int 42);
77 Plain (Expr (If (Call [var "f";var "obj";int 10],