Skip to content

Commit

Permalink
fill in tests for tag_hints
Browse files Browse the repository at this point in the history
  • Loading branch information
KodrAus committed Jan 14, 2025
1 parent dadf9d4 commit f8c6566
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 9 deletions.
57 changes: 56 additions & 1 deletion buffer/src/value.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2244,7 +2244,62 @@ mod alloc_tests {

#[test]
fn buffer_tag_hints() {
todo!()
let mut value = ValueBuf::new();

value.tag_hint(&sval::Tag::new("test")).unwrap();

value.seq_begin(Some(2)).unwrap();

value.seq_value_begin().unwrap();
value.tag_hint(&sval::Tag::new("test")).unwrap();
value.bool(false).unwrap();
value.seq_value_end().unwrap();

value.seq_value_begin().unwrap();
value.bool(true).unwrap();
value.seq_value_end().unwrap();

value.seq_end().unwrap();

value.tag_hint(&sval::Tag::new("test")).unwrap();

let expected = vec![
ValuePart {
kind: ValueKind::TagHint {
tag: sval::Tag::new("test"),
},
},
ValuePart {
kind: ValueKind::Seq {
len: 5,
num_entries_hint: Some(2),
},
},
ValuePart {
kind: ValueKind::SeqValue { len: 2 },
},
ValuePart {
kind: ValueKind::TagHint {
tag: sval::Tag::new("test"),
},
},
ValuePart {
kind: ValueKind::Bool(false),
},
ValuePart {
kind: ValueKind::SeqValue { len: 1 },
},
ValuePart {
kind: ValueKind::Bool(true),
},
ValuePart {
kind: ValueKind::TagHint {
tag: sval::Tag::new("test"),
},
},
];

assert_eq!(expected, &*value.parts);
}

#[test]
Expand Down
5 changes: 5 additions & 0 deletions nested/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
/*!
A variant of [`sval::Stream`] for cases where a recursive API is needed.
# Limitations
Streaming via `sval_nested` will discard any [`sval::Stream::tag_hint`]s. `sval` allows tag hints to
appear anywhere in a stream, but this library enforces a stricter lifecycle, making those hints unreliable.
*/

#![cfg_attr(not(test), no_std)]
Expand Down
55 changes: 47 additions & 8 deletions test/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,30 @@ pub fn assert_tokens<'sval, V: sval::Value + ?Sized>(value: &'sval V, tokens: &[
let mut stream = TokenBuf::new();

match value.stream(&mut stream) {
Ok(()) => assert_eq!(
tokens,
stream.as_tokens(),
"{} != {}",
sval_fmt::stream_to_string(AsValue(tokens)),
sval_fmt::stream_to_string(AsValue(stream.as_tokens()))
),
Ok(()) => {
assert_eq!(
tokens,
stream.as_tokens(),
"{} != {}",
sval_fmt::stream_to_string(AsValue(tokens)),
sval_fmt::stream_to_string(AsValue(stream.as_tokens()))
);

#[cfg(test)]
{
let mut dyn_stream = &mut TokenBuf::new();

value.stream(&mut dyn_stream as &mut dyn sval_dynamic::Stream<'sval>).unwrap();

assert_eq!(
tokens,
dyn_stream.as_tokens(),
"(dyn) {} != {}",
sval_fmt::stream_to_string(AsValue(tokens)),
sval_fmt::stream_to_string(AsValue(dyn_stream.as_tokens()))
);
}
},
Err(_) => stream.fail::<V>(),
}
}
Expand Down Expand Up @@ -1101,7 +1118,29 @@ mod tests {

#[test]
fn stream_tag_hints() {
todo!()
struct WithHints;

impl sval::Value for WithHints {
fn stream<'sval, S: sval::Stream<'sval> + ?Sized>(
&'sval self,
stream: &mut S,
) -> sval::Result {
stream.tag_hint(&sval::Tag::new("test"))?;

stream.value(&42)?;

stream.tag_hint(&sval::Tag::new("test"))
}
}

assert_tokens(
&WithHints,
&[
Token::TagHint(sval::Tag::new("test")),
Token::I32(42),
Token::TagHint(sval::Tag::new("test")),
],
);
}

#[test]
Expand Down

0 comments on commit f8c6566

Please sign in to comment.