OSDN Git Service

update swf header
[happyabc/happyabc.git] / swflib / abcOutTest.ml
1 open Base
2 open AbcType
3 open OUnit
4 open BytesOut
5
6 module A = AbcOut.Make(struct
7                          type t = int
8                          let to_bytes _ = []
9                        end)
10 open A
11
12 let cpool =
13   { empty_cpool with
14       int = [~-1;42];
15       uint = [42];
16       string = ["abc"];
17       namespace = [Namespace 1];
18       namespace_set = [[1;2]];
19       multiname=[QName (0,1);Multiname (2,3)] }
20
21 let info =
22   { params=[]; return=1; method_name=2; method_flags=[ NeedArguments; NeedActivation] }
23
24 let body =
25   { method_sig=1;
26     max_stack=2;
27     local_count=3;
28     init_scope_depth=4;
29     max_scope_depth=5;
30     code=[];
31     exceptions=[];
32     method_traits=[] }
33
34 let script =
35   {init=0x7F; script_traits=[]}
36
37 let ok x y =
38   OUnit.assert_equal ~printer:(Std.dump)  (to_int_list x) (to_int_list y)
39
40 let _ =
41   ("abcOut.ml" >:::
42      ["of_script test" >::
43         (fun () ->
44            ok [u30 0x7F; u30 0] @@ of_script script);
45       "of_trait test" >::
46         (fun () ->
47            ok [u30 1;u8 0; u30 1; u30 2; u30 3; u8 4; ] @@
48              of_trait {trait_name=1; data=SlotTrait (1,2,3,4); trait_metadata=[]};
49            ok [u30 1;u8 0; u30 1; u30 2; u30 0] @@
50              of_trait {trait_name=1; data=SlotTrait (1,2,0,4); trait_metadata=[]};
51            ok [u30 1;u8 1; u30 1; u30 2] @@
52              of_trait {trait_name=1; data=MethodTrait (1,2,[]); trait_metadata=[]};
53            ok [u30 1;u8 2; u30 1; u30 2] @@
54              of_trait {trait_name=1; data=GetterTrait (1,2,[]); trait_metadata=[]};
55            ok [u30 1;u8 3; u30 1; u30 2] @@
56              of_trait {trait_name=1; data=SetterTrait (1,2,[]); trait_metadata=[]};
57            ok [u30 1;u8 4; u30 1; u30 2] @@
58              of_trait {trait_name=1; data=ClassTrait (1,2); trait_metadata=[]};
59            ok [u30 1;u8 5; u30 1; u30 2] @@
60              of_trait {trait_name=1; data=FunctionTrait (1,2); trait_metadata=[]};
61            ok [u30 1;u8 6; u30 1; u30 2; u30 3; u8 4] @@
62              of_trait {trait_name=1; data=ConstTrait (1,2,3,4); trait_metadata=[]};
63            ok [u30 1;u8 6; u30 1; u30 2; u30 0] @@
64              of_trait {trait_name=1; data=ConstTrait (1,2,0,4);  trait_metadata=[]};);
65       "of_method_info test" >::
66         (fun () ->
67            ok
68              [u30 0; u30 1; u30 2; u8 3] @@
69              of_method_info info);
70       "of_method_body test" >::
71         (fun () ->
72            ok [u30 1;
73                u30 2;
74                u30 3;
75                u30 4;
76                u30 5;
77                u30 0;
78                u30 0;
79                u30 0] @@
80              of_method_body body);
81       "of_cpool test" >::
82         (fun () ->
83            ok [u30 1;(* int    *)
84                u30 1;(* uint   *)
85                u30 1;(* double *)
86                u30 1;(* string *)
87                u30 1;(* ns     *)
88                u30 1;(* ns_set *)
89                u30 1 (* mname  *)] @@
90              of_cpool empty_cpool;
91            ok [u30 3; s32 ~-1; s32 42;                  (* int    *)
92                u30 2; u32 42;                           (* uint   *)
93                u30 1;                                   (* double *)
94                u30 2; u30 3; u8 0x61; u8 0x62; u8 0x63; (* string *)
95                u30 2; u8 0x08; u30 1;                   (* ns     *)
96                u30 2; u30 2; u30 1; u30 2;              (* ns_set *)
97                u30 3; u8 0x07; u30 0; u30 1;
98                       u8 0x09; u30 2; u30 3;            (* mname *)] @@
99              of_cpool cpool);
100       "of_class test" >::
101         (fun () ->
102            ok [u30 10; u30 0] @@
103              of_class {cinit=10; class_traits=[]});
104       "of_instance test" >::
105         (fun () ->
106            ok [u30 1; (* name *)
107                u30 2; (* super name *)
108                u8  3; (* flags *)
109                u30 4; (* interface count *)
110                u30 1; u30 2; u30 3; u30 4; (* interface *)
111                u30 5; (* iinit *)
112                u30 0; (* traits count *) ] @@
113              of_instance {
114                instance_name=1;
115                super_name=2;
116                instance_flags=[Sealed;Final];
117                interfaces=[1;2;3;4];
118                iinit=5;
119                instance_traits=[]});
120       "of_instance protected ns" >::
121         (fun () ->
122            ok [u30 1; (* name *)
123                u30 2; (* super name *)
124                u8  8; (* flags *)
125                u30 1; (* protected ns *)
126                u30 4; (* interface count *)
127                u30 1; u30 2; u30 3; u30 4; (* interface *)
128                u30 5; (* iinit *)
129                u30 0; (* traits count *) ] @@
130              of_instance {
131                instance_name=1;
132                super_name=2;
133                instance_flags=[ProtectedNs 1];
134                interfaces=[1;2;3;4];
135                iinit=5;
136                instance_traits=[]});
137       "spimle abc" >::
138         (fun () ->
139            ok [u16 16; u16 46;(* version *)
140                u30 1; u30 1; u30 1; u30 1; u30 1; u30 1; u30 1;
141                (* cpool *)
142                u30 0; (* info *)
143                u30 0; (* meta *)
144                u30 0; (* class *)
145                u30 0; (* script *)
146                u30 0; (* body *) ] @@
147              to_bytes {
148                cpool       = empty_cpool;
149                method_info = [];
150                metadata    = [];
151                classes     = [];
152                instances   = [];
153                scripts       = [];
154                method_bodies = []});
155       "full abc" >::
156         (fun () ->
157            ok (List.concat [
158              (* version *) [ u16 16; u16 46];
159              (* cpool   *) of_cpool {empty_cpool with string=["foo"] };
160              (* info    *) [ u30 1]; of_method_info info;
161              (* meta    *) [u30 0];
162              (* class   *) [u30 0];
163              (* script  *) [u30 1]; of_script script;
164              (* body    *) [u30 1]; of_method_body body; ]) @@
165              to_bytes {
166                cpool       = {empty_cpool with string=["foo"] } ;
167                method_info = [info];
168                metadata    = [];
169                classes     = [];
170                instances   = [];
171                scripts     = [script];
172                method_bodies = [body]})
173      ] ) +> run_test_tt_main