Skip to content

Commit

Permalink
fix: dom_tokens empty
Browse files Browse the repository at this point in the history
  • Loading branch information
EqualMa committed May 7, 2024
1 parent 8d08a9b commit 42d617f
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 36 deletions.
17 changes: 17 additions & 0 deletions crates/frender-dom-tokens/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,17 @@ pub mod __private {
panic!("str_slice_from_first invalid")
}
}

pub mod empty_dom_tokens_types_mod {
pub use crate::Empty as DomTokens;

pub const POSSIBLE_DOM_TOKENS_COUNT: usize = 0;

pub const POSSIBLE_DOM_TOKEN_ARRAY: crate::UniqueDomTokenArray<
'static,
POSSIBLE_DOM_TOKENS_COUNT,
> = crate::UniqueDomTokenArray::new_const([]);
}
}

#[doc(hidden)]
Expand Down Expand Up @@ -277,6 +288,9 @@ macro_rules! __dom_token_predicate_match {
#[doc(hidden)]
#[macro_export]
macro_rules! __nested_dom_token_predicate {
() => {
$crate::Empty
};
($dom_token:tt) => {
$crate::__dom_token_predicate! $dom_token
};
Expand Down Expand Up @@ -589,6 +603,9 @@ macro_rules! __define_dom_tokens_types {
#[doc(hidden)]
#[macro_export]
macro_rules! __nested_dom_tokens_types {
([] ($($root_path:tt)+)) => {
pub(in $($root_path)+) use $crate::__private::empty_dom_tokens_types_mod::*;
};
([$dom_token:tt] ($($root_path:tt)+)) => {
$crate::__define_dom_tokens_types! { $dom_token pub(in $($root_path)+) }
};
Expand Down
76 changes: 40 additions & 36 deletions crates/frender-dom-tokens/tests/empty.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
use async_str_iter::ext::AsyncStrIteratorExt as _;
use frender_dom_tokens::{dom_tokens, ChainableDomTokens, DomTokenList, DomTokens};
use frender_dom_tokens::{dom_tokens, ChainableDomTokens, DomTokens};
use utils::dom_token_list::DomTokenListNever;

use crate::utils::ssr::{collect_dom_tokens, collect_dom_tokens_prefix_space};

pub mod utils;

const fn empty() -> impl ChainableDomTokens + Copy {
dom_tokens!()
Expand All @@ -8,50 +12,50 @@ const fn empty() -> impl ChainableDomTokens + Copy {
#[test]
fn ssr() {
futures_lite::future::block_on(async {
{
let out: String = DomTokens::dom_tokens_into_async_str_iter(empty())
.collect()
.await;

assert_eq!(out, "");
}

{
let out: String =
ChainableDomTokens::dom_tokens_prefix_space_into_async_str_iter(empty())
.collect()
.await;

assert_eq!(out, "");
}
assert_eq!(collect_dom_tokens(empty()).await, "");
assert_eq!(collect_dom_tokens_prefix_space(empty()).await, "");
})
}

#[test]
fn csr() {
struct DomTokenListUntouched;
let dom_token_list = &mut DomTokenListNever;
let state = &mut Default::default();

DomTokens::update_with_state(empty(), dom_token_list, state);
DomTokens::update_with_state(empty(), dom_token_list, state);
}

impl DomTokenList for DomTokenListUntouched {
fn set_value(&mut self, _: &str) {
unreachable!()
}
mod impl_dom_tokens {
use frender_dom_tokens::{impl_dom_tokens_for, ChainableDomTokens, DomTokens};

fn add_1(&mut self, _: frender_dom_tokens::DomToken) {
unreachable!()
}
use crate::utils::{
dom_token_list::DomTokenListNever,
ssr::{collect_dom_tokens, collect_dom_tokens_prefix_space},
};

fn remove_1(&mut self, _: frender_dom_tokens::DomToken) {
unreachable!()
}
#[derive(Debug, Clone, Copy)]
struct MyEmpty;
impl_dom_tokens_for!(|_: MyEmpty| dom_tokens!());

fn replace(&mut self, _: frender_dom_tokens::DomToken, _: frender_dom_tokens::DomToken) {
unreachable!()
}
const fn empty() -> impl ChainableDomTokens + Copy {
MyEmpty
}

let dom_token_list = &mut DomTokenListUntouched;
let state = &mut Default::default();
#[test]
fn ssr() {
futures_lite::future::block_on(async {
assert_eq!(collect_dom_tokens(empty()).await, "");
assert_eq!(collect_dom_tokens_prefix_space(empty()).await, "");
})
}

DomTokens::update_with_state(empty(), dom_token_list, state);
DomTokens::update_with_state(empty(), dom_token_list, state);
#[test]
fn csr() {
let dom_token_list = &mut DomTokenListNever;
let state = &mut Default::default();

DomTokens::update_with_state(empty(), dom_token_list, state);
DomTokens::update_with_state(empty(), dom_token_list, state);
}
}

0 comments on commit 42d617f

Please sign in to comment.