@@ -1,136 +1,7 @@
1−//! Test suite for the Web and headless browsers.
1+use super::{assert_rendered, before_after, create_element, RenderFn};
3−#![cfg(target_arch = "wasm32")]
6−use dodrio::{Attribute, Node, Render, Vdom};
2+use dodrio::{Attribute, Node, Vdom};
8−use wasm_bindgen::JsCast;
9use wasm_bindgen_test::*;
3use wasm_bindgen_test::*;
11−wasm_bindgen_test_configure!(run_in_browser);
13−fn window() -> web_sys::Window {
14− web_sys::window().expect("no global `window` exists")
17−fn document() -> web_sys::Document {
20− .expect("should have a document on window")
23−fn create_element(tag: &str) -> web_sys::Element {
26− .expect("should create element OK")
31− static START: Once = Once::new();
33− console_log::init_with_level(Level::Trace).expect("could not initialize console_log");
37−fn assert_rendered<R: Render>(container: &web_sys::Element, r: &R) {
39− let bump = &Bump::new();
40− let node = r.render(bump);
41− let child = container
43− .expect("container does not have anything rendered into it?");
44− check_node(&child, &node);
46− fn stringify_actual_node(n: &web_sys::Node) -> String {
47− if let Some(el) = n.dyn_ref::<web_sys::Element>() {
50− format!("#text({:?})", n.text_content())
54− fn check_node(actual: &web_sys::Node, expected: &Node) {
55− debug!("check_render:");
56− debug!(" actual = {}", stringify_actual_node(&actual));
57− debug!(" expected = {:#?}", expected);
59− Node::Text(text_node) => {
61− actual.node_name().to_uppercase(),
63− "actual.node_name() == #TEXT"
66− actual.text_content().unwrap_or_default(),
68− "actual.text_content() == expected.text()"
71− Node::Element(elem) => {
73− actual.node_name().to_uppercase(),
74− elem.tag_name().to_uppercase(),
75− "actual.node_name() == expected.tag_name()"
78− .dyn_ref::<web_sys::Element>()
79− .expect("`actual` should be an `Element`");
80− check_attributes(actual.attributes(), elem.attributes());
81− check_children(actual.child_nodes(), elem.children());
86− fn check_attributes(actual: web_sys::NamedNodeMap, expected: &[Attribute]) {
89− expected.len() as u32,
90− "actual's number of attributes == expected's number of attributes"
92− for attr in expected {
93− let actual_attr = actual
94− .get_named_item(attr.name)
95− .expect(&format!("should have attribute \"{}\"", attr.name));
99− "actual attr value == expected attr value for attr \"{}\"",
105− fn check_children(actual: web_sys::NodeList, expected: &[Node]) {
108− expected.len() as u32,
109− "actual children length == expected children length"
111− for (i, child) in expected.iter().enumerate() {
112− let actual_child = actual.item(i as u32).unwrap();
113− check_node(&actual_child, child);
118−struct RenderFn<F>(F)
120− F: for<'bump> Fn(&'bump Bump) -> Node<'bump>;
122−impl<F> Render for RenderFn<F>
124− F: for<'bump> Fn(&'bump Bump) -> Node<'bump>,
126− fn render<'a, 'bump>(&'a self, bump: &'bump Bump) -> Node<'bump>
134#[wasm_bindgen_test]
5#[wasm_bindgen_test]
135fn render_initial_text() {
6fn render_initial_text() {
136 let hello = RenderFn(|_bump| Node::text("hello"));
7 let hello = RenderFn(|_bump| Node::text("hello"));
@@ -162,47 +33,6 @@ fn render_initial_node() {
162 assert_rendered(&container, &hello);
33 assert_rendered(&container, &hello);
165−fn assert_before_after<R, S>(before: R, after: S)
170− let container = create_element("div");
172− debug!("====== Rendering the *before* DOM into the physical DOM ======");
173− let mut vdom = Vdom::new(&container, &before);
174− debug!("====== Checking the *before* DOM against the physical DOM ======");
175− assert_rendered(&container, &before);
177− debug!("====== Rendering the *after* DOM into the physical DOM ======");
178− vdom.render(&after);
179− debug!("====== Checking the *after* DOM against the physical DOM ======");
180− assert_rendered(&container, &after);
183−macro_rules! before_after {
186− before($before_bump:ident) {
189− after($after_bump:ident) {
195− #[wasm_bindgen_test]
197− assert_before_after(
198− RenderFn(|$before_bump| { $( $before )* }),
199− RenderFn(|$after_bump| { $( $after )* })
206before_after! {
36before_after! {
207 same_text {
37 same_text {
208 before(_bump) {
38 before(_bump) {