tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 1130HTML 550Markdown 11TOML 63111 Sutichaykuna

⎇ bce89b1006f36ce35abfaf1f1c2b3dd95f3dffd3 bindings/js/tests/web.rs Rust · 101 siq'ikuna · 2.8 KB Ñawpa willay Pi imata llamkarqan ch'uya

Implement new rust API for bindings and release v0.3 bce89b100 · Emil Sjölander ·

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}