on master help sign in
tests: Move tests over to using the element builders for rendering
commit4be691b9ff8f825cddf36373c54f2ab4c204af61 authorNick Fitzgerald <fitzgen@gmail.com> dateWed 13 Feb 2019, 15:09 (8 years ago) parent8862ed9
3 files changed+124−154
tests/web/cached.rs+8−6 tests/web/events.rs+23−46 tests/web/render.rs+93−102
tests/web/cached.rs+8−6
@@ -1,5 +1,5 @@
11use super::{assert_rendered, create_element, RenderFn};
2−use dodrio::{bumpalo::Bump, Cached, Node, Render, Vdom};
2+use dodrio::{builder::*, bumpalo::Bump, Cached, Node, Render, Vdom};
33use futures::prelude::*;
44use std::cell::Cell;
55use std::rc::Rc;
@@ -27,12 +27,14 @@ impl Render for CountRenders {
2727 self.render_count.set(count);
2828
2929 let s = bumpalo::format!(in bump, "{}", count);
30− Node::text(s.into_bump_str())
30+ text(s.into_bump_str())
3131 }
3232}
3333
3434#[wasm_bindgen_test(async)]
3535fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
36+ use dodrio::builder::*;
37+
3638 let cached = Cached::new(CountRenders::new());
3739
3840 let container0 = create_element("div");
@@ -58,7 +60,7 @@ fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
5860 vdom0.weak().with_component(move |comp| {
5961 let comp = comp.unwrap_mut::<Cached<CountRenders>>();
6062 assert_eq!(comp.render_count.get(), 1);
61− assert_rendered(&container1, &RenderFn(|_| Node::text("1")));
63+ assert_rendered(&container1, &RenderFn(|_| text("1")));
6264 })
6365 })
6466 // We re-render, re-use the cached node, and get "1" again.
@@ -67,7 +69,7 @@ fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
6769 vdom2.weak().with_component(move |comp| {
6870 let comp = comp.unwrap_mut::<Cached<CountRenders>>();
6971 assert_eq!(comp.render_count.get(), 1);
70− assert_rendered(&container2, &RenderFn(|_| Node::text("1")));
72+ assert_rendered(&container2, &RenderFn(|_| text("1")));
7173 })
7274 })
7375 // We invalidate the cache, re-render, re-populate the cache, and should
@@ -83,7 +85,7 @@ fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
8385 vdom5.weak().with_component(move |comp| {
8486 let comp = comp.unwrap_mut::<Cached<CountRenders>>();
8587 assert_eq!(comp.render_count.get(), 2);
86− assert_rendered(&container3, &RenderFn(|_| Node::text("2")));
88+ assert_rendered(&container3, &RenderFn(|_| text("2")));
8789 })
8890 })
8991 // We re-render, re-use the cached node, and get "2" again.
@@ -92,7 +94,7 @@ fn uses_cached_render() -> impl Future<Item = (), Error = JsValue> {
9294 vdom7.weak().with_component(move |comp| {
9395 let comp = comp.unwrap_mut::<Cached<CountRenders>>();
9496 assert_eq!(comp.render_count.get(), 2);
95− assert_rendered(&container4, &RenderFn(|_| Node::text("2")));
97+ assert_rendered(&container4, &RenderFn(|_| text("2")));
9698 })
9799 })
98100 .map_err(|e| JsValue::from(e.to_string()))
tests/web/events.rs+23−46
@@ -1,6 +1,6 @@
11use super::create_element;
22use bumpalo::Bump;
3−use dodrio::{on, Attribute, Node, Render, Vdom};
3+use dodrio::{Node, Render, Vdom};
44use futures::Future;
55use std::cell::{Cell, RefCell};
66use std::rc::Rc;
@@ -30,18 +30,13 @@ impl Render for EventContainer {
3030 where
3131 'a: 'bump,
3232 {
33− Node::element(
34− bump,
35− "div",
36− [on(bump, self.event, |root, _scheduler, _event| {
33+ use dodrio::builder::*;
34+ div(bump)
35+ .attr("id", "target")
36+ .on(self.event, |root, _scheduler, _event| {
3737 (root.unwrap_mut::<EventContainer>().on_event)();
38− })],
39− [Attribute {
40− name: "id",
41− value: "target",
42− }],
43− [],
44− )
38+ })
39+ .finish()
4540 }
4641}
4742
@@ -147,33 +142,18 @@ impl Render for ListensOnlyOnFirstRender {
147142 where
148143 'a: 'bump,
149144 {
145+ use dodrio::builder::*;
146+
150147 let count = self.count.get();
151148 self.count.set(count + 1);
149+
150+ let mut elem = div(bump).attr("id", "target");
152151 if count == 0 {
153− Node::element(
154− bump,
155− "div",
156− [on(bump, "click", |root, _scheduler, _event| {
157− (root.unwrap_mut::<ListensOnlyOnFirstRender>().callback)();
158− })],
159− [Attribute {
160− name: "id",
161− value: "target",
162− }],
163− [],
164− )
165− } else {
166− Node::element(
167− bump,
168− "div",
169− [],
170− [Attribute {
171− name: "id",
172− value: "target",
173− }],
174− [],
175− )
152+ elem = elem.on("click", |root, _scheduler, _event| {
153+ (root.unwrap_mut::<ListensOnlyOnFirstRender>().callback)();
154+ });
176155 }
156+ elem.finish()
177157 }
178158}
179159
@@ -315,23 +295,20 @@ impl Render for CountRendersAndListen {
315295 where
316296 'a: 'bump,
317297 {
298+ use dodrio::builder::*;
299+
318300 let count = self.count.get() + 1;
319301 self.count.set(count);
320− Node::element(
321− bump,
322− "button",
323− [on(bump, "click", |comp, _vdom, _event| {
302+
303+ button(bump)
304+ .attr("id", "target")
305+ .on("click", |comp, _vdom, _event| {
324306 let comp: &mut _ = comp.unwrap_mut::<dodrio::Cached<CountRendersAndListen>>();
325307 let comp: &mut CountRendersAndListen = comp;
326308 let n = comp.count.get();
327309 (comp.callback)(n);
328− })],
329− [Attribute {
330− name: "id",
331− value: "target",
332− }],
333− [],
334− )
310+ })
311+ .finish()
335312 }
336313}
337314
tests/web/render.rs+93−102
@@ -1,12 +1,12 @@
11use super::{assert_rendered, before_after, create_element, RenderFn};
2−use dodrio::{Attribute, Node, Vdom};
2+use dodrio::{builder::*, Vdom};
33use futures::prelude::*;
44use std::rc::Rc;
55use wasm_bindgen_test::*;
66
77#[wasm_bindgen_test]
88fn render_initial_text() {
9− let hello = Rc::new(RenderFn(|_bump| Node::text("hello")));
9+ let hello = Rc::new(RenderFn(|_bump| text("hello")));
1010
1111 let container = create_element("div");
1212 let _vdom = Vdom::new(&container, hello.clone());
@@ -16,19 +16,10 @@ fn render_initial_text() {
1616#[wasm_bindgen_test]
1717fn render_initial_node() {
1818 let hello = Rc::new(RenderFn(|bump| {
19− Node::element(
20− bump,
21− "div",
22− [],
23− [Attribute {
24− name: "id",
25− value: "hello-world",
26− }],
27− [
28− Node::text("Hello "),
29− Node::element(bump, "span", [], [], [Node::text("World!")]),
30− ],
31− )
19+ div(bump)
20+ .attr("id", "hello-world")
21+ .children([text("Hello "), span(bump).child(text("World!")).finish()])
22+ .finish()
3223 }));
3324
3425 let container = create_element("div");
@@ -39,7 +30,7 @@ fn render_initial_node() {
3930#[wasm_bindgen_test]
4031fn container_is_emptied_upon_drop() {
4132 let container = create_element("div");
42− let vdom = Vdom::new(&container, RenderFn(|_bump| Node::text("blah")));
33+ let vdom = Vdom::new(&container, RenderFn(|_bump| text("blah")));
4334 drop(vdom);
4435 assert!(container.first_child().is_none());
4536}
@@ -47,206 +38,206 @@ fn container_is_emptied_upon_drop() {
4738before_after! {
4839 same_text {
4940 before(_bump) {
50− Node::text("hello")
41+ text("hello")
5142 }
5243 after(_bump) {
53− Node::text("hello")
44+ text("hello")
5445 }
5546 }
5647
5748 update_text {
5849 before(_bump) {
59− Node::text("before")
50+ text("before")
6051 }
6152 after(_bump) {
62− Node::text("after")
53+ text("after")
6354 }
6455 }
6556
6657 replace_text_with_elem {
6758 before(_bump) {
68− Node::text("before")
59+ text("before")
6960 }
7061 after(bump) {
71− Node::element(bump, "div", [], [], [])
62+ div(bump).finish()
7263 }
7364 }
7465
7566 replace_elem_with_text {
7667 before(bump) {
77− Node::element(bump, "div", [], [], [])
68+ div(bump).finish()
7869 }
7970 after(_bump) {
80− Node::text("before")
71+ text("before")
8172 }
8273 }
8374
8475 same_elem {
8576 before(bump) {
86− Node::element(bump, "div", [], [], [])
77+ div(bump).finish()
8778 }
8879 after(bump) {
89− Node::element(bump, "div", [], [], [])
80+ div(bump).finish()
9081 }
9182 }
9283
9384 elems_with_different_tag_names {
9485 before(bump) {
95− Node::element(bump, "span", [], [], [])
86+ span(bump).finish()
9687 }
9788 after(bump) {
98− Node::element(bump, "div", [], [], [])
89+ div(bump).finish()
9990 }
10091 }
10192
10293 same_tag_name_update_attribute {
10394 before(bump) {
104− Node::element(bump, "div", [], [Attribute { name: "value", value: "1" }], [])
95+ div(bump).attr("value", "1").finish()
10596 }
10697 after(bump) {
107− Node::element(bump, "div", [], [Attribute { name: "value", value: "2" }], [])
98+ div(bump).attr("value", "2").finish()
10899 }
109100 }
110101
111102 same_tag_name_remove_attribute {
112103 before(bump) {
113− Node::element(bump, "div", [], [Attribute { name: "value", value: "1" }], [])
104+ div(bump).attr("value", "1").finish()
114105 }
115106 after(bump) {
116− Node::element(bump, "div", [], [], [])
107+ div(bump).finish()
117108 }
118109 }
119110
120111 same_tag_name_add_attribute {
121112 before(bump) {
122− Node::element(bump, "div", [], [], [])
113+ div(bump).finish()
123114 }
124115 after(bump) {
125− Node::element(bump, "div", [], [Attribute { name: "value", value: "2" }], [])
116+ div(bump).attr("value", "2").finish()
126117 }
127118 }
128119
129120 same_tag_name_many_attributes {
130121 before(bump) {
131− Node::element(bump, "div", [], [
132− Attribute { name: "before-1", value: "1" },
133− Attribute { name: "shared-1", value: "1" },
134− Attribute { name: "modified-1", value: "1" },
135− Attribute { name: "before-2", value: "2" },
136− Attribute { name: "shared-2", value: "2" },
137− Attribute { name: "modified-2", value: "2" },
138− Attribute { name: "before-3", value: "3" },
139− Attribute { name: "shared-3", value: "3" },
140− Attribute { name: "modified-3", value: "3" },
141− ], [])
122+ div(bump)
123+ .attr("before-1", "1")
124+ .attr("shared-1", "1")
125+ .attr("modified-1", "1")
126+ .attr("before-2", "2")
127+ .attr("shared-2", "2")
128+ .attr("modified-2", "2")
129+ .attr("before-3", "3")
130+ .attr("shared-3", "3")
131+ .attr("modified-3", "3")
132+ .finish()
142133 }
143134 after(bump) {
144− Node::element(bump, "div", [], [
145− Attribute { name: "after-1", value: "1" },
146− Attribute { name: "shared-1", value: "1" },
147− Attribute { name: "modified-1", value: "100" },
148− Attribute { name: "after-2", value: "2" },
149− Attribute { name: "shared-2", value: "2" },
150− Attribute { name: "modified-2", value: "200" },
151− Attribute { name: "after-3", value: "3" },
152− Attribute { name: "shared-3", value: "3" },
153− Attribute { name: "modified-3", value: "300" },
154− ], [])
135+ div(bump)
136+ .attr("after-1", "1")
137+ .attr("shared-1", "1")
138+ .attr("modified-1", "100")
139+ .attr("after-2", "2")
140+ .attr("shared-2", "2")
141+ .attr("modified-2", "200")
142+ .attr("after-3", "3")
143+ .attr("shared-3", "3")
144+ .attr("modified-3", "300")
145+ .finish()
155146 }
156147 }
157148
158149 same_tag_same_children {
159150 before(bump) {
160− Node::element(bump, "div", [], [], [
161− Node::text("child")
162− ])
151+ div(bump).child(text("child")).finish()
163152 }
164153 after(bump) {
165− Node::element(bump, "div", [], [], [
166− Node::text("child")
167− ])
154+ div(bump).child(text("child")).finish()
168155 }
169156 }
170157
171158 same_tag_update_child {
172159 before(bump) {
173− Node::element(bump, "div", [], [], [
174− Node::text("before")
175− ])
160+ div(bump).child(text("before")).finish()
176161 }
177162 after(bump) {
178− Node::element(bump, "div", [], [], [
179− Node::text("after")
180− ])
163+ div(bump).child(text("after")).finish()
181164 }
182165 }
183166
184167 same_tag_add_child {
185168 before(bump) {
186− Node::element(bump, "div", [], [], [])
169+ div(bump).finish()
187170 }
188171 after(bump) {
189− Node::element(bump, "div", [], [], [
190− Node::text("child")
191− ])
172+ div(bump).child(text("child")).finish()
192173 }
193174 }
194175
195176 same_tag_remove_child {
196177 before(bump) {
197− Node::element(bump, "div", [], [], [
198− Node::text("child")
199− ])
178+ div(bump).child(text("child")).finish()
200179 }
201180 after(bump) {
202− Node::element(bump, "div", [], [], [])
181+ div(bump).finish()
203182 }
204183 }
205184
206185 same_tag_update_many_children {
207186 before(bump) {
208− Node::element(bump, "div", [], [], [
209− Node::element(bump, "div", [], [], []),
210− Node::element(bump, "span", [], [], []),
211− Node::element(bump, "p", [], [], []),
212− ])
187+ div(bump)
188+ .children([
189+ div(bump).finish(),
190+ span(bump).finish(),
191+ p(bump).finish(),
192+ ])
193+ .finish()
213194 }
214195 after(bump) {
215− Node::element(bump, "div", [], [], [
216− Node::element(bump, "span", [], [], []),
217− Node::element(bump, "p", [], [], []),
218− Node::element(bump, "div", [], [], []),
219− ])
196+ div(bump)
197+ .children([
198+ span(bump).finish(),
199+ p(bump).finish(),
200+ div(bump).finish(),
201+ ])
202+ .finish()
220203 }
221204 }
222205
223206 same_tag_remove_many_children {
224207 before(bump) {
225− Node::element(bump, "div", [], [], [
226− Node::element(bump, "div", [], [], []),
227− Node::element(bump, "span", [], [], []),
228− Node::element(bump, "p", [], [], []),
229− ])
208+ div(bump)
209+ .children([
210+ div(bump).finish(),
211+ span(bump).finish(),
212+ p(bump).finish(),
213+ ])
214+ .finish()
230215 }
231216 after(bump) {
232− Node::element(bump, "div", [], [], [
233− Node::element(bump, "div", [], [], []),
234− ])
217+ div(bump)
218+ .children([
219+ div(bump).finish(),
220+ ])
221+ .finish()
235222 }
236223 }
237224
238225 same_tag_add_many_children {
239226 before(bump) {
240− Node::element(bump, "div", [], [], [
241− Node::element(bump, "div", [], [], []),
242− ])
227+ div(bump)
228+ .children([
229+ div(bump).finish(),
230+ ])
231+ .finish()
243232 }
244233 after(bump) {
245− Node::element(bump, "div", [], [], [
246− Node::element(bump, "div", [], [], []),
247− Node::element(bump, "span", [], [], []),
248− Node::element(bump, "p", [], [], []),
249− ])
234+ div(bump)
235+ .children([
236+ div(bump).finish(),
237+ span(bump).finish(),
238+ p(bump).finish(),
239+ ])
240+ .finish()
250241 }
251242 }
252243}