Skip to main content

makepad_gen_plugin/
lib.rs

1/// makepad compiler
2pub mod compiler;
3/// makepad builtin widgets and structs
4pub mod builtin;
5/// makepad model, include AppMain, Widget and Virtual
6pub mod model;
7/// needed traits for makepad
8pub mod traits;
9/// makepad props from GenUI
10pub mod from_gen;
11/// do token stream and makepad live design
12pub mod token;
13pub mod visitor;
14pub mod two_way_binding;
15pub mod script;
16
17
18#[cfg(test)]
19mod test_widget {
20    // use std::{path::PathBuf, str::FromStr};
21
22    use std::path::PathBuf;
23
24    use gen_analyzer::Model;
25    use gen_utils::{
26        common::{fs, Source},
27        compiler::ToRs,
28    };
29
30    use crate::{compiler::{Context, RouterBuilder}, model::{SimpleAppMain, Widget}};
31
32
33    fn context() -> Context {
34        Context {
35            app_main: SimpleAppMain::default(),
36            // sc_visitor_chain: VisitorChain::build(),
37            define_widget_poll: Default::default(),
38            plugins: None,
39            dyn_processor: None,
40            lib_content: None,
41            router: Some(RouterBuilder::new("/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/router/router.toml", "").unwrap()),
42        }
43    }
44
45    #[test]
46    fn router_called(){
47        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/router/views/home.gen
48        let source = Source::new(
49            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
50            "router/views/home.gen",
51            "src_gen_0/src/router/views/home.rs",
52        );
53        handle(source);
54    }
55
56    #[test]
57    fn lifecycle_home(){
58        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/lifecycle/views/home.gen
59        let source = Source::new(
60            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
61            "lifecycle/views/home.gen",
62            "src_gen_0/src/lifecycle/views/home.rs",
63        );
64        handle(source);
65    }
66
67    #[test]
68    fn lifecycle_hello(){
69        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/lifecycle/tests/components/hello.gen
70        let source = Source::new(
71            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/lifecycle/tests",
72            "components/hello.gen",
73            "src_gen_0/src/components/hello.rs",
74        );
75        handle(source);
76    }
77
78    #[test]
79    fn update_lifecycle(){
80        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/views/update.gen
81        let source = Source::new(
82            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
83            "views/update.gen",
84            "src_gen_0/src/views/update.rs",
85        );
86        handle(source);
87    }
88
89    #[test]
90    fn if_nested(){
91        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/if_nested.gen
92        let source = Source::new(
93            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
94            "views/if_nested.gen",
95            "src_gen_0/src/views/if_nested.rs",
96        );
97        handle(source);
98    }
99
100    #[test]
101    fn if_all_multi(){
102        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/if_all_multi.gen
103        let source = Source::new(
104            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
105            "views/if_all_multi.gen",
106            "src_gen_0/src/views/if_all_multi.rs",
107        );
108        handle(source);
109    }
110
111    #[test]
112    fn if_else_and_if_else(){
113        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/if_else_and_if_else.gen
114        let source = Source::new(
115            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
116            "views/if_else_and_if_else.gen",
117            "src_gen_0/src/views/if_else_and_if_else.rs",
118        );
119        handle(source);
120    }
121
122    #[test]
123    fn computed_with_args(){
124        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/if_multi_else_if.gen
125        let source = Source::new(
126            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
127            "views/if_multi_else_if.gen",
128            "src_gen_0/src/views/if_multi_else_if.rs",
129        );
130        handle(source);
131    }
132
133    #[test]
134    fn if_computed(){
135        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/if_else_if_else.gen
136        let source = Source::new(
137            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
138            "views/if_else_if_else.gen",
139            "src_gen_0/src/views/if_else_if_else.rs",
140        );
141        handle(source);
142    }
143
144    #[test]
145    fn multi_if(){
146        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/multi_if.gen
147        let source = Source::new(
148            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
149            "views/multi_if.gen",
150            "src_gen_0/src/views/multi_if.rs",
151        );
152        handle(source);
153    }
154
155    #[test]
156    fn ui_root(){
157        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/root.gen
158        let source = Source::new(
159            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
160            "views/root.gen",
161            "src_gen_0/src/views/root.rs",
162        );
163        handle(source);
164    }
165
166    #[test]
167    fn route_macro(){
168        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/views/router_test.gen
169        let source = Source::new(
170            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
171            "views/router_test.gen",
172            "src_gen_0/src/views/router_test.rs",
173        );
174        handle(source);
175    }
176
177    #[test]
178    fn only_if(){
179        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/home.gen
180        let source = Source::new(
181            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
182            "views/home.gen",
183            "src_gen_0/src/views/home.rs",
184        );
185        handle(source);
186    }
187
188    #[test]
189    fn if_easy(){
190        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/views/if_easy.gen
191        let source = Source::new(
192            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
193            "views/if_easy.gen",
194            "src_gen_0/src/views/if_easy.rs",
195        );
196        handle(source);
197    }
198
199    #[test]
200    fn if_else(){
201        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else/views/if_else.gen
202        let source = Source::new(
203            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/if_else_test/if_else",
204            "views/if_else.gen",
205            "src_gen_0/src/views/if_else.rs",
206        );
207
208        handle(source);
209    }
210
211    #[test]
212    fn vis(){
213        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/views/bind1.gen
214        let source = Source::new(
215            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
216            "views/bind1.gen",
217            "src_gen_0/src/views/bind1.rs",
218        );
219
220        handle(source);
221    }
222
223    #[test]
224    fn script(){
225        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/views/sc1.gen
226        let source = Source::new(
227            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
228            "views/sc1.gen",
229            "src_gen_0/src/views/sc1.rs",
230        );
231        // let model = Model::new(source, true).unwrap();
232        // dbg!(model);
233        handle(source);
234    }
235
236    #[test]
237    fn script_pure(){
238        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/tests/views/sc_pure.gen
239        let source = Source::new(
240            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/tests",
241            "views/sc_pure.gen",
242            "src_gen_0/src/views/sc_pure.rs",
243        );
244        // let model = Model::new(source, true).unwrap();
245        // dbg!(model);
246        handle(source);
247    }
248
249    #[test]
250    fn c_ref2() {
251        let source = Source::new(
252            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/c_ref_test",
253            "c_ref/components/header.gen",
254            "src_gen_0/src/components/header.rs",
255        );
256
257        handle(source);
258    }
259
260    // /Users/shengyifei/projects/gen_ui/made_with_GenUI/c_ref_test/c_ref/views/root.gen
261    #[test]
262    fn c_ref() {
263        let source = Source::new(
264            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/c_ref_test",
265            "c_ref/views/hello.gen",
266            "src_gen_0/src/views/hello.rs",
267        );
268
269        handle(source);
270    }
271
272    
273    #[test]
274    fn for_loop() {
275        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/for_test/fors/components/hello.gen
276        let source = Source::new(
277            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/for_test",
278            "fors/components/hello.gen",
279            "src_gen_0/src/components/hello.rs",
280        );
281
282        handle(source);
283    }
284
285    #[test]
286    fn setting(){
287        // /Users/shengyifei/projects/gen_ui/made_with_GenUI/others/others/views/home.gen
288        let source = Source::new(
289            "/Users/shengyifei/projects/gen_ui/made_with_GenUI/others",
290            "others/views/home.gen",
291            "src_gen_0/src/views/home.rs",
292        );
293        handle(source);
294    }
295
296    
297
298    
299    fn handle(source: Source) {
300        let model = Model::new(source, true).unwrap();
301        // dbg!(model.template);
302        let mut context = context();
303        let w = Widget::try_from((&mut context, model)).unwrap();
304        // dbg!(w.template);
305        let content = w.content().unwrap().to_string();
306        let path = PathBuf::from("/Users/shengyifei/projects/gen_ui/GenUI/gen/mini_test.rs");
307        let _ = fs::write(path.as_path(), &content);
308    }
309
310}