test/
test.rs

1use syn_args::{def, derive::ArgsParse, ArgsParse, Formal, Value};
2
3#[derive(Debug, PartialEq, ArgsParse)]
4pub enum ModuleArgs {
5    F1(def::Int, def::Int),
6    F2(def::Int),
7    F3(def::Expr),
8    F4(def::Array<def::Expr>),
9    F5(ModuleSubObj),
10    F6(def::Array<ModuleSubObj>),
11    F7(SubWrap),
12    F8(def::Option<T1>),
13}
14
15#[derive(Debug, PartialEq, ArgsParse)]
16pub struct ModuleSubObj {
17    pub global: def::Option<def::Bool>,
18    pub imports: def::Array<def::Expr>,
19    pub sub: def::Option<Sub>,
20}
21
22#[derive(Debug, PartialEq, ArgsParse)]
23pub struct Sub {
24    pub value: def::Bool,
25}
26
27#[derive(Debug, PartialEq, ArgsParse)]
28pub struct SubWrap {
29    pub s1: Sub,
30    pub s2: Sub,
31}
32
33#[derive(Debug, PartialEq, ArgsParse)]
34struct T1 {
35    pub controllers: def::Option<def::Array<def::Expr>>,
36}
37
38fn test_formal_f1() {
39    let f = Formal::new();
40
41    // fm.parse("F(Object{ a: Int, b: Optional(Int) }, Array(Int))");
42    let args = f.parse("F(1, 3)").unwrap();
43    // let args = f.parse("F(1)").unwrap();
44    // let args = f.parse("F(Hello)").unwrap();
45    println!("{:?}", args);
46
47    let res = ModuleArgs::try_from(args).unwrap();
48    println!("{:?}", res);
49
50    assert_eq!(res, ModuleArgs::F1(def::Int(1), def::Int(3)));
51}
52
53fn test_formal_f2() {
54    let f = Formal::new();
55
56    let args = f.parse("F(1)").unwrap();
57    // let args = f.parse("F(Hello)").unwrap();
58    println!("{:?}", args);
59
60    let res = ModuleArgs::try_from(args).unwrap();
61    println!("{:?}", res);
62
63    assert_eq!(res, ModuleArgs::F2(def::Int(1)));
64}
65
66fn test_formal_f3() {
67    let res = ModuleArgs::parse("F(Hello)").unwrap();
68    println!("{:?}", res);
69
70    assert_eq!(res, ModuleArgs::F3(def::Expr::from("Hello")));
71}
72
73fn test_formal_f4() {
74    let res = ModuleArgs::parse("F([Ident1, Ident2])").unwrap();
75    println!("{:?}", res);
76
77    assert_eq!(res, ModuleArgs::F4(def::Array(vec![def::Expr::from("Ident1"), def::Expr::from("Ident2")])));
78}
79
80fn test_formal_f5() {
81    let res = ModuleArgs::parse("F({ imports: [Ident1, Ident2] })").unwrap();
82    println!("{:?}", res);
83
84    assert_eq!(
85        res,
86        ModuleArgs::F5(ModuleSubObj {
87            imports: def::Array(vec![def::Expr::from("Ident1"), def::Expr::from("Ident2")]),
88            global: def::Option(None),
89            sub: def::Option(None)
90        })
91    );
92}
93
94fn test_formal_f6() {
95    let res = ModuleArgs::parse("F([{ imports: [Ident1, Ident2] }, { imports: [Ident3, Ident4] }])").unwrap();
96    println!("{:?}", res);
97
98    assert_eq!(
99        res,
100        ModuleArgs::F6(def::Array(vec![
101            ModuleSubObj {
102                imports: def::Array(vec![def::Expr::from("Ident1"), def::Expr::from("Ident2")]),
103                global: def::Option(None),
104                sub: def::Option(None)
105            },
106            ModuleSubObj {
107                imports: def::Array(vec![def::Expr::from("Ident3"), def::Expr::from("Ident4")]),
108                global: def::Option(None),
109                sub: def::Option(None)
110            }
111        ]))
112    );
113}
114
115fn test_formal_f6_2() {
116    let res = ModuleArgs::parse("F([{ imports: [Ident1, Ident2], global: true }, { imports: [Ident3, Ident4] }])").unwrap();
117    println!("{:?}", res);
118
119    assert_eq!(
120        res,
121        ModuleArgs::F6(def::Array(vec![
122            ModuleSubObj {
123                imports: def::Array(vec![def::Expr::from("Ident1"), def::Expr::from("Ident2")]),
124                global: def::Option(Some(def::Bool(true))),
125                sub: def::Option(None)
126            },
127            ModuleSubObj {
128                imports: def::Array(vec![def::Expr::from("Ident3"), def::Expr::from("Ident4")]),
129                global: def::Option(None),
130                sub: def::Option(None)
131            }
132        ]))
133    );
134}
135
136fn test_formal_f6_3() {
137    let res = ModuleArgs::parse("F([{ imports: [Ident1, Ident2], global: true, sub: { value: true } }, { imports: [Ident3, Ident4] }])").unwrap();
138    println!("{:?}", res);
139
140    assert_eq!(
141        res,
142        ModuleArgs::F6(def::Array(vec![
143            ModuleSubObj {
144                imports: def::Array(vec![def::Expr::from("Ident1"), def::Expr::from("Ident2")]),
145                global: def::Option(Some(def::Bool(true))),
146                sub: def::Option(Some(Sub { value: def::Bool(true) }))
147            },
148            ModuleSubObj {
149                imports: def::Array(vec![def::Expr::from("Ident3"), def::Expr::from("Ident4")]),
150                global: def::Option(None),
151                sub: def::Option(None)
152            }
153        ]))
154    );
155}
156
157fn test_formal_f7() {
158    let res = ModuleArgs::parse("F({ s1: { value: false }, s2: { value: true } })").unwrap();
159    println!("{:?}", res);
160
161    assert_eq!(res, ModuleArgs::F7(SubWrap { s1: Sub { value: def::Bool(false) }, s2: Sub { value: def::Bool(true) } }));
162}
163
164fn test_tokens_formal_f7() {
165    let res = ModuleArgs::parse("F({ s1: { value: false }, s2: { value: true } })").unwrap();
166    println!("{:?}", res);
167
168    assert_eq!(res, ModuleArgs::F7(SubWrap { s1: Sub { value: def::Bool(false) }, s2: Sub { value: def::Bool(true) } }));
169}
170
171fn test_formal_f8() {
172    let res = ModuleArgs::parse("F({ controllers: [Ident1, Ident2] })").unwrap();
173    println!("{:?}", res);
174
175    assert_eq!(
176        res,
177        ModuleArgs::F8(def::Option(Some(T1 {
178            controllers: def::Option(Some(def::Array(vec![def::Expr::from("Ident1"), def::Expr::from("Ident2")])))
179        })))
180    );
181
182    let res = ModuleArgs::parse("F()").unwrap();
183    println!("{:?}", res);
184
185    assert_eq!(res, ModuleArgs::F8(def::Option(None)));
186}
187
188//
189fn test_value_p1() {
190    let f = Formal::new();
191
192    let args = f.parse("F(1, { a:1, b:2 })").unwrap();
193    println!("{:?}", args);
194
195    assert_eq!(
196        args.0,
197        Value::Array(def::Array(vec![
198            Value::Int(def::Int(1)),
199            Value::Object(def::Object(
200                vec![("a".to_string(), Value::Int(def::Int(1))), ("b".to_string(), Value::Int(def::Int(2)))].into_iter().collect()
201            ))
202        ]))
203    );
204}
205
206fn test_into_object_p1() {
207    let f = Formal::new();
208    let args = f.parse("F({ imports: [Ident1::register(), Ident2] })").unwrap();
209    println!("{:?}", args);
210    let res = ModuleSubObj::try_from(args).unwrap();
211
212    assert_eq!(
213        res,
214        ModuleSubObj {
215            imports: def::Array(vec![def::Expr::from("Ident1::register ()"), def::Expr::from("Ident2")]),
216            global: def::Option(None),
217            sub: def::Option(None)
218        }
219    );
220}
221
222fn main() {
223    test_formal_f1();
224    test_formal_f2();
225    test_formal_f3();
226    test_formal_f4();
227    test_formal_f5();
228    test_formal_f6();
229    test_formal_f6_2();
230    test_formal_f6_3();
231    test_formal_f7();
232    test_tokens_formal_f7();
233    test_formal_f8();
234    // test_value_p1();
235    test_into_object_p1();
236}