1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //! dynamic attributes in dioxus necessitate an allocated node ID.
- //!
- //! This tests to ensure we clean it up
- use bumpalo::Bump;
- use dioxus::core::{ElementId, Mutation::*};
- use dioxus::prelude::*;
- use dioxus_core::BorrowedAttributeValue;
- #[test]
- fn attrs_cycle() {
- let mut dom = VirtualDom::new(|cx| {
- let id = generation();
- match generation() % 2 {
- 0 => render! { div {} },
- 1 => render! {
- div { h1 { class: "{id}", id: "{id}" } }
- },
- _ => unreachable!(),
- }
- });
- let bump = Bump::new();
- assert_eq!(
- dom.rebuild_to_vec_to_vec().santize().edits,
- [
- LoadTemplate { name: "template", index: 0, id: ElementId(1,) },
- AppendChildren { m: 1, id: ElementId(0) },
- ]
- );
- dom.mark_dirty(ScopeId::ROOT);
- assert_eq!(
- dom.render_immediate_to_vec().santize().edits,
- [
- LoadTemplate { name: "template", index: 0, id: ElementId(2,) },
- AssignId { path: &[0,], id: ElementId(3,) },
- SetAttribute {
- name: "class",
- value: (&*bump.alloc("1".into_value(&bump))).into(),
- id: ElementId(3,),
- ns: None
- },
- SetAttribute {
- name: "id",
- value: (&*bump.alloc("1".into_value(&bump))).into(),
- id: ElementId(3,),
- ns: None
- },
- ReplaceWith { id: ElementId(1,), m: 1 },
- ]
- );
- dom.mark_dirty(ScopeId::ROOT);
- assert_eq!(
- dom.render_immediate_to_vec().santize().edits,
- [
- LoadTemplate { name: "template", index: 0, id: ElementId(1) },
- ReplaceWith { id: ElementId(2), m: 1 }
- ]
- );
- dom.mark_dirty(ScopeId::ROOT);
- assert_eq!(
- dom.render_immediate_to_vec().santize().edits,
- [
- LoadTemplate { name: "template", index: 0, id: ElementId(2) },
- AssignId { path: &[0], id: ElementId(3) },
- SetAttribute {
- name: "class",
- value: BorrowedAttributeValue::Text("3"),
- id: ElementId(3),
- ns: None
- },
- SetAttribute {
- name: "id",
- value: BorrowedAttributeValue::Text("3"),
- id: ElementId(3),
- ns: None
- },
- ReplaceWith { id: ElementId(1), m: 1 }
- ]
- );
- // we take the node taken by attributes since we reused it
- dom.mark_dirty(ScopeId::ROOT);
- assert_eq!(
- dom.render_immediate_to_vec().santize().edits,
- [
- LoadTemplate { name: "template", index: 0, id: ElementId(1) },
- ReplaceWith { id: ElementId(2), m: 1 }
- ]
- );
- }
|