|
@@ -1,13 +1,13 @@
|
|
//! Diffing Tests
|
|
//! Diffing Tests
|
|
|
|
+//!
|
|
|
|
+//! These tests only verify that the diffing algorithm works properly for single components.
|
|
|
|
+//!
|
|
|
|
+//! It does not validated that component lifecycles work properly. This is done in another test file.
|
|
|
|
|
|
-use bumpalo::Bump;
|
|
|
|
-
|
|
|
|
-use dioxus::{
|
|
|
|
- diff::DiffMachine, prelude::*, scheduler::Scheduler, DiffInstruction, DomEdit, MountType,
|
|
|
|
-};
|
|
|
|
|
|
+use dioxus::{prelude::*, DomEdit, TestDom};
|
|
use dioxus_core as dioxus;
|
|
use dioxus_core as dioxus;
|
|
use dioxus_html as dioxus_elements;
|
|
use dioxus_html as dioxus_elements;
|
|
-use futures_util::FutureExt;
|
|
|
|
|
|
+
|
|
mod test_logging;
|
|
mod test_logging;
|
|
use DomEdit::*;
|
|
use DomEdit::*;
|
|
|
|
|
|
@@ -15,13 +15,18 @@ use DomEdit::*;
|
|
// feel free to enable while debugging
|
|
// feel free to enable while debugging
|
|
const IS_LOGGING_ENABLED: bool = false;
|
|
const IS_LOGGING_ENABLED: bool = false;
|
|
|
|
|
|
|
|
+fn new_dom() -> TestDom {
|
|
|
|
+ test_logging::set_up_logging(IS_LOGGING_ENABLED);
|
|
|
|
+ TestDom::new()
|
|
|
|
+}
|
|
|
|
+
|
|
#[test]
|
|
#[test]
|
|
fn diffing_works() {}
|
|
fn diffing_works() {}
|
|
|
|
|
|
/// Should push the text node onto the stack and modify it
|
|
/// Should push the text node onto the stack and modify it
|
|
#[test]
|
|
#[test]
|
|
fn html_and_rsx_generate_the_same_output() {
|
|
fn html_and_rsx_generate_the_same_output() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
let (create, change) = dom.lazy_diff(
|
|
let (create, change) = dom.lazy_diff(
|
|
rsx! ( div { "Hello world" } ),
|
|
rsx! ( div { "Hello world" } ),
|
|
rsx! ( div { "Goodbye world" } ),
|
|
rsx! ( div { "Goodbye world" } ),
|
|
@@ -54,7 +59,7 @@ fn html_and_rsx_generate_the_same_output() {
|
|
/// Should result in 3 elements on the stack
|
|
/// Should result in 3 elements on the stack
|
|
#[test]
|
|
#[test]
|
|
fn fragments_create_properly() {
|
|
fn fragments_create_properly() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let create = dom.create(rsx! {
|
|
let create = dom.create(rsx! {
|
|
div { "Hello a" }
|
|
div { "Hello a" }
|
|
@@ -91,7 +96,7 @@ fn fragments_create_properly() {
|
|
/// Should result in the creation of an anchor (placeholder) and then a replacewith
|
|
/// Should result in the creation of an anchor (placeholder) and then a replacewith
|
|
#[test]
|
|
#[test]
|
|
fn empty_fragments_create_anchors() {
|
|
fn empty_fragments_create_anchors() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({ (0..0).map(|f| rsx! { div {}}) });
|
|
let left = rsx!({ (0..0).map(|f| rsx! { div {}}) });
|
|
let right = rsx!({ (0..1).map(|f| rsx! { div {}}) });
|
|
let right = rsx!({ (0..1).map(|f| rsx! { div {}}) });
|
|
@@ -114,7 +119,7 @@ fn empty_fragments_create_anchors() {
|
|
/// Should result in the creation of an anchor (placeholder) and then a replacewith m=5
|
|
/// Should result in the creation of an anchor (placeholder) and then a replacewith m=5
|
|
#[test]
|
|
#[test]
|
|
fn empty_fragments_create_many_anchors() {
|
|
fn empty_fragments_create_many_anchors() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({ (0..0).map(|f| rsx! { div {}}) });
|
|
let left = rsx!({ (0..0).map(|f| rsx! { div {}}) });
|
|
let right = rsx!({ (0..5).map(|f| rsx! { div {}}) });
|
|
let right = rsx!({ (0..5).map(|f| rsx! { div {}}) });
|
|
@@ -141,7 +146,7 @@ fn empty_fragments_create_many_anchors() {
|
|
/// Includes child nodes inside the fragment
|
|
/// Includes child nodes inside the fragment
|
|
#[test]
|
|
#[test]
|
|
fn empty_fragments_create_anchors_with_many_children() {
|
|
fn empty_fragments_create_anchors_with_many_children() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({ (0..0).map(|f| rsx! { div {} }) });
|
|
let left = rsx!({ (0..0).map(|f| rsx! { div {} }) });
|
|
let right = rsx!({
|
|
let right = rsx!({
|
|
@@ -184,7 +189,7 @@ fn empty_fragments_create_anchors_with_many_children() {
|
|
/// Should result in every node being pushed and then replaced with an anchor
|
|
/// Should result in every node being pushed and then replaced with an anchor
|
|
#[test]
|
|
#[test]
|
|
fn many_items_become_fragment() {
|
|
fn many_items_become_fragment() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
(0..2).map(|f| {
|
|
(0..2).map(|f| {
|
|
@@ -227,7 +232,7 @@ fn many_items_become_fragment() {
|
|
/// Should result in no edits
|
|
/// Should result in no edits
|
|
#[test]
|
|
#[test]
|
|
fn two_equal_fragments_are_equal() {
|
|
fn two_equal_fragments_are_equal() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
(0..2).map(|f| {
|
|
(0..2).map(|f| {
|
|
@@ -247,7 +252,7 @@ fn two_equal_fragments_are_equal() {
|
|
/// Should result the creation of more nodes appended after the old last node
|
|
/// Should result the creation of more nodes appended after the old last node
|
|
#[test]
|
|
#[test]
|
|
fn two_fragments_with_differrent_elements_are_differet() {
|
|
fn two_fragments_with_differrent_elements_are_differet() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!(
|
|
let left = rsx!(
|
|
{ (0..2).map(|_| rsx! { div { }} ) }
|
|
{ (0..2).map(|_| rsx! { div { }} ) }
|
|
@@ -280,7 +285,7 @@ fn two_fragments_with_differrent_elements_are_differet() {
|
|
/// Should result in multiple nodes destroyed - with changes to the first nodes
|
|
/// Should result in multiple nodes destroyed - with changes to the first nodes
|
|
#[test]
|
|
#[test]
|
|
fn two_fragments_with_differrent_elements_are_differet_shorter() {
|
|
fn two_fragments_with_differrent_elements_are_differet_shorter() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!(
|
|
let left = rsx!(
|
|
{(0..5).map(|f| {rsx! { div { }}})}
|
|
{(0..5).map(|f| {rsx! { div { }}})}
|
|
@@ -321,7 +326,7 @@ fn two_fragments_with_differrent_elements_are_differet_shorter() {
|
|
/// Should result in multiple nodes destroyed - with no changes
|
|
/// Should result in multiple nodes destroyed - with no changes
|
|
#[test]
|
|
#[test]
|
|
fn two_fragments_with_same_elements_are_differet() {
|
|
fn two_fragments_with_same_elements_are_differet() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!(
|
|
let left = rsx!(
|
|
{(0..2).map(|f| {rsx! { div { }}})}
|
|
{(0..2).map(|f| {rsx! { div { }}})}
|
|
@@ -356,7 +361,7 @@ fn two_fragments_with_same_elements_are_differet() {
|
|
/// should result in the removal of elements
|
|
/// should result in the removal of elements
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_order() {
|
|
fn keyed_diffing_order() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!(
|
|
let left = rsx!(
|
|
{(0..5).map(|f| {rsx! { div { key: "{f}" }}})}
|
|
{(0..5).map(|f| {rsx! { div { key: "{f}" }}})}
|
|
@@ -377,7 +382,7 @@ fn keyed_diffing_order() {
|
|
/// Should result in moves, but not removals or additions
|
|
/// Should result in moves, but not removals or additions
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_out_of_order() {
|
|
fn keyed_diffing_out_of_order() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[0, 1, 2, 3, /**/ 4, 5, 6, /**/ 7, 8, 9].iter().map(|f| {
|
|
[0, 1, 2, 3, /**/ 4, 5, 6, /**/ 7, 8, 9].iter().map(|f| {
|
|
@@ -402,7 +407,7 @@ fn keyed_diffing_out_of_order() {
|
|
/// Should result in moves only
|
|
/// Should result in moves only
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_out_of_order_adds() {
|
|
fn keyed_diffing_out_of_order_adds() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
@@ -429,7 +434,7 @@ fn keyed_diffing_out_of_order_adds() {
|
|
/// Should result in moves onl
|
|
/// Should result in moves onl
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_out_of_order_adds_2() {
|
|
fn keyed_diffing_out_of_order_adds_2() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
@@ -457,7 +462,7 @@ fn keyed_diffing_out_of_order_adds_2() {
|
|
/// Should result in moves onl
|
|
/// Should result in moves onl
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_out_of_order_adds_3() {
|
|
fn keyed_diffing_out_of_order_adds_3() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
@@ -485,7 +490,7 @@ fn keyed_diffing_out_of_order_adds_3() {
|
|
/// Should result in moves onl
|
|
/// Should result in moves onl
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_out_of_order_adds_4() {
|
|
fn keyed_diffing_out_of_order_adds_4() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
@@ -513,7 +518,7 @@ fn keyed_diffing_out_of_order_adds_4() {
|
|
/// Should result in moves onl
|
|
/// Should result in moves onl
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_out_of_order_adds_5() {
|
|
fn keyed_diffing_out_of_order_adds_5() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
@@ -536,7 +541,7 @@ fn keyed_diffing_out_of_order_adds_5() {
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_additions() {
|
|
fn keyed_diffing_additions() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7, 8 /**/].iter().map(|f| {
|
|
@@ -563,7 +568,7 @@ fn keyed_diffing_additions() {
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_additions_and_moves_on_ends() {
|
|
fn keyed_diffing_additions_and_moves_on_ends() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7 /**/].iter().map(|f| {
|
|
@@ -595,7 +600,7 @@ fn keyed_diffing_additions_and_moves_on_ends() {
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
fn keyed_diffing_additions_and_moves_in_middle() {
|
|
fn keyed_diffing_additions_and_moves_in_middle() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[/**/ 4, 5, 6, 7 /**/].iter().map(|f| {
|
|
[/**/ 4, 5, 6, 7 /**/].iter().map(|f| {
|
|
@@ -632,7 +637,7 @@ fn keyed_diffing_additions_and_moves_in_middle() {
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
fn controlled_keyed_diffing_out_of_order() {
|
|
fn controlled_keyed_diffing_out_of_order() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[4, 5, 6, 7].iter().map(|f| {
|
|
[4, 5, 6, 7].iter().map(|f| {
|
|
@@ -669,7 +674,7 @@ fn controlled_keyed_diffing_out_of_order() {
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
fn controlled_keyed_diffing_out_of_order_max_test() {
|
|
fn controlled_keyed_diffing_out_of_order_max_test() {
|
|
- let dom = TestDom::new();
|
|
|
|
|
|
+ let dom = new_dom();
|
|
|
|
|
|
let left = rsx!({
|
|
let left = rsx!({
|
|
[0, 1, 2, 3, 4].iter().map(|f| {
|
|
[0, 1, 2, 3, 4].iter().map(|f| {
|