Implement new rust API for bindings and release v0.3
1#![cfg(target_arch = "wasm32")]
2
3extern crate wasm_bindgen_test;
4use js_sys::Function;
5use js_sys::Reflect;
6use stretch_layout::*;
7use wasm_bindgen::prelude::*;
8use wasm_bindgen_test::*;
9
10wasm_bindgen_test_configure!(run_in_browser);
11
12fn js_value(js: &str) -> JsValue {
13 Function::new_no_args(&format!("return {};", js)).call0(&JsValue::UNDEFINED).unwrap()
14}
15
16#[wasm_bindgen_test]
17fn set_measure() {
18 let allocator = Allocator::new();
19 let mut node = Node::new(&allocator, &js_value("{}"));
20 node.set_measure(&js_value(
21 "function (w, h) {
22 return {width: 100, height: 100};
23 }",
24 ));
25
26 let layout = node.compute_layout(&JsValue::UNDEFINED);
27 assert_eq!(layout.width, 100.0);
28 assert_eq!(layout.height, 100.0);
29}
30
31#[wasm_bindgen_test]
32fn add_child() {
33 let allocator = Allocator::new();
34 let mut node = Node::new(&allocator, &js_value("{}"));
35 let child = Node::new(&allocator, &js_value("{}"));
36
37 node.add_child(&child);
38
39 assert_eq!(node.childCount, 1);
40}
41
42#[wasm_bindgen_test]
43fn remove_child() {
44 let allocator = Allocator::new();
45 let mut node = Node::new(&allocator, &js_value("{}"));
46 let child = Node::new(&allocator, &js_value("{}"));
47
48 node.add_child(&child);
49 node.remove_child(&child);
50
51 assert_eq!(node.childCount, 0);
52}
53
54#[wasm_bindgen_test]
55fn remove_child_at_index() {
56 let allocator = Allocator::new();
57 let mut node = Node::new(&allocator, &js_value("{}"));
58 let child = Node::new(&allocator, &js_value("{}"));
59
60 node.add_child(&child);
61 node.remove_child_at_index(0);
62
63 assert_eq!(node.childCount, 0);
64}
65
66#[wasm_bindgen_test]
67fn replace_child_at_index() {
68 let allocator = Allocator::new();
69 let mut node = Node::new(&allocator, &js_value("{}"));
70 let child1 = Node::new(&allocator, &js_value("{width: 100, height: 100}"));
71 let child2 = Node::new(&allocator, &js_value("{width: 200, height: 200}"));
72
73 node.add_child(&child1);
74 node.replace_child_at_index(0, &child2);
75 let layout = node.compute_layout(&JsValue::UNDEFINED);
76
77 assert_eq!(layout.width, 200.0);
78 assert_eq!(layout.height, 200.0);
79}
80
81#[wasm_bindgen_test]
82fn set_style() {
83 let allocator = Allocator::new();
84 let mut node = Node::new(&allocator, &js_value("{}"));
85 node.set_style(&js_value("{width: 200, height: 200}"));
86 let style = node.get_style();
87
88 assert_eq!(Reflect::get(&style, &"width".into()).unwrap().as_f64(), Some(200.0));
89 assert_eq!(Reflect::get(&style, &"height".into()).unwrap().as_f64(), Some(200.0));
90}
91
92#[wasm_bindgen_test]
93fn mark_dirty() {
94 let allocator = Allocator::new();
95 let mut node = Node::new(&allocator, &js_value("{}"));
96 node.compute_layout(&JsValue::UNDEFINED);
97
98 assert_eq!(node.is_dirty(), false);
99 node.mark_dirty();
100 assert_eq!(node.is_dirty(), true);
101}