@@ -1,140 +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")]
7− node::{Attribute, Node},
2+use dodrio::{Attribute, Node, Vdom};
12−use wasm_bindgen::JsCast;
13use wasm_bindgen_test::*;
3use wasm_bindgen_test::*;
15−wasm_bindgen_test_configure!(run_in_browser);
17−fn window() -> web_sys::Window {
18− web_sys::window().expect("no global `window` exists")
21−fn document() -> web_sys::Document {
24− .expect("should have a document on window")
27−fn create_element(tag: &str) -> web_sys::Element {
30− .expect("should create element OK")
35− static START: Once = Once::new();
37− console_log::init_with_level(Level::Trace).expect("could not initialize console_log");
41−fn assert_rendered<R: Render>(container: &web_sys::Element, r: &R) {
43− let bump = &Bump::new();
44− let node = r.render(bump);
45− let child = container
47− .expect("container does not have anything rendered into it?");
48− check_node(&child, &node);
50− fn stringify_actual_node(n: &web_sys::Node) -> String {
51− if let Some(el) = n.dyn_ref::<web_sys::Element>() {
54− format!("#text({:?})", n.text_content())
58− fn check_node(actual: &web_sys::Node, expected: &Node) {
59− debug!("check_render:");
60− debug!(" actual = {}", stringify_actual_node(&actual));
61− debug!(" expected = {:#?}", expected);
63− Node::Text(text_node) => {
65− actual.node_name().to_uppercase(),
67− "actual.node_name() == #TEXT"
70− actual.text_content().unwrap_or_default(),
72− "actual.text_content() == expected.text()"
75− Node::Element(elem) => {
77− actual.node_name().to_uppercase(),
78− elem.tag_name().to_uppercase(),
79− "actual.node_name() == expected.tag_name()"
82− .dyn_ref::<web_sys::Element>()
83− .expect("`actual` should be an `Element`");
84− check_attributes(actual.attributes(), elem.attributes());
85− check_children(actual.child_nodes(), elem.children());
90− fn check_attributes(actual: web_sys::NamedNodeMap, expected: &[Attribute]) {
93− expected.len() as u32,
94− "actual's number of attributes == expected's number of attributes"
96− for attr in expected {
97− let actual_attr = actual
98− .get_named_item(attr.name)
99− .expect(&format!("should have attribute \"{}\"", attr.name));
101− actual_attr.value(),
103− "actual attr value == expected attr value for attr \"{}\"",
109− fn check_children(actual: web_sys::NodeList, expected: &[Node]) {
112− expected.len() as u32,
113− "actual children length == expected children length"
115− for (i, child) in expected.iter().enumerate() {
116− let actual_child = actual.item(i as u32).unwrap();
117− check_node(&actual_child, child);
122−struct RenderFn<F>(F)
124− F: for<'bump> Fn(&'bump Bump) -> Node<'bump>;
126−impl<F> Render for RenderFn<F>
128− F: for<'bump> Fn(&'bump Bump) -> Node<'bump>,
130− fn render<'a, 'bump>(&'a self, bump: &'bump Bump) -> Node<'bump>
138#[wasm_bindgen_test]
5#[wasm_bindgen_test]
139fn render_initial_text() {
6fn render_initial_text() {
140 let hello = RenderFn(|_bump| Node::text("hello"));
7 let hello = RenderFn(|_bump| Node::text("hello"));
@@ -166,47 +33,6 @@ fn render_initial_node() {
166 assert_rendered(&container, &hello);
33 assert_rendered(&container, &hello);
169−fn assert_before_after<R, S>(before: R, after: S)
174− let container = create_element("div");
176− debug!("====== Rendering the *before* DOM into the physical DOM ======");
177− let mut vdom = Vdom::new(&container, &before);
178− debug!("====== Checking the *before* DOM against the physical DOM ======");
179− assert_rendered(&container, &before);
181− debug!("====== Rendering the *after* DOM into the physical DOM ======");
182− vdom.render(&after);
183− debug!("====== Checking the *after* DOM against the physical DOM ======");
184− assert_rendered(&container, &after);
187−macro_rules! before_after {
190− before($before_bump:ident) {
193− after($after_bump:ident) {
199− #[wasm_bindgen_test]
201− assert_before_after(
202− RenderFn(|$before_bump| { $( $before )* }),
203− RenderFn(|$after_bump| { $( $after )* })
210before_after! {
36before_after! {
211 same_text {
37 same_text {
212 before(_bump) {
38 before(_bump) {