Skip to content

Commit 796370e

Browse files
committed
test(serde): Check span meaning
1 parent ad87859 commit 796370e

File tree

2 files changed

+62
-4
lines changed

2 files changed

+62
-4
lines changed

crates/toml/tests/serde/spanned.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,16 @@ fn implicit_tables() {
636636
Map(Vec<(Spanned<String>, Spanned<Self>)>),
637637
}
638638

639+
impl SpannedValue {
640+
fn get(&self, key: &str) -> Option<&(Spanned<String>, Spanned<Self>)> {
641+
let Self::Map(map) = self else {
642+
return None;
643+
};
644+
645+
map.iter().find(|(k, _v)| k.get_ref() == key)
646+
}
647+
}
648+
639649
impl<'de> Deserialize<'de> for SpannedValue {
640650
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
641651
where
@@ -663,9 +673,9 @@ fn implicit_tables() {
663673
alice.bob = { one.two = "qux" }
664674
"#;
665675

666-
let result = crate::from_str::<SpannedValue>(INPUT);
676+
let result = crate::from_str::<SpannedValue>(INPUT).unwrap();
667677
assert_data_eq!(
668-
result.unwrap().to_debug(),
678+
result.to_debug(),
669679
str![[r#"
670680
Map(
671681
[
@@ -751,6 +761,25 @@ Map(
751761
752762
"#]]
753763
);
764+
765+
let foo = result.get("foo").unwrap();
766+
assert_data_eq!(&INPUT[foo.0.span()], str!["foo"]);
767+
assert_data_eq!(&INPUT[foo.1.span()], str!["foo"]);
768+
let bar = foo.1.get_ref().get("bar").unwrap();
769+
assert_data_eq!(&INPUT[bar.0.span()], str!["bar"]);
770+
assert_data_eq!(&INPUT[bar.1.span()], str!["[foo.bar]"]);
771+
let alice = bar.1.get_ref().get("alice").unwrap();
772+
assert_data_eq!(&INPUT[alice.0.span()], str!["alice"]);
773+
assert_data_eq!(&INPUT[alice.1.span()], str!["alice"]);
774+
let bob = alice.1.get_ref().get("bob").unwrap();
775+
assert_data_eq!(&INPUT[bob.0.span()], str!["bob"]);
776+
assert_data_eq!(&INPUT[bob.1.span()], str![[r#"{ one.two = "qux" }"#]]);
777+
let one = bob.1.get_ref().get("one").unwrap();
778+
assert_data_eq!(&INPUT[one.0.span()], str!["one"]);
779+
assert_data_eq!(&INPUT[one.1.span()], str!["one"]);
780+
let two = one.1.get_ref().get("two").unwrap();
781+
assert_data_eq!(&INPUT[two.0.span()], str!["two"]);
782+
assert_data_eq!(&INPUT[two.1.span()], str![[r#""qux""#]]);
754783
}
755784

756785
#[test]

crates/toml_edit/tests/serde/spanned.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,16 @@ fn implicit_tables() {
636636
Map(Vec<(Spanned<String>, Spanned<Self>)>),
637637
}
638638

639+
impl SpannedValue {
640+
fn get(&self, key: &str) -> Option<&(Spanned<String>, Spanned<Self>)> {
641+
let Self::Map(map) = self else {
642+
return None;
643+
};
644+
645+
map.iter().find(|(k, _v)| k.get_ref() == key)
646+
}
647+
}
648+
639649
impl<'de> Deserialize<'de> for SpannedValue {
640650
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
641651
where
@@ -663,9 +673,9 @@ fn implicit_tables() {
663673
alice.bob = { one.two = "qux" }
664674
"#;
665675

666-
let result = crate::from_str::<SpannedValue>(INPUT);
676+
let result = crate::from_str::<SpannedValue>(INPUT).unwrap();
667677
assert_data_eq!(
668-
result.unwrap().to_debug(),
678+
result.to_debug(),
669679
str![[r#"
670680
Map(
671681
[
@@ -751,6 +761,25 @@ Map(
751761
752762
"#]]
753763
);
764+
765+
let foo = result.get("foo").unwrap();
766+
assert_data_eq!(&INPUT[foo.0.span()], str!["foo"]);
767+
assert_data_eq!(&INPUT[foo.1.span()], str!["foo"]);
768+
let bar = foo.1.get_ref().get("bar").unwrap();
769+
assert_data_eq!(&INPUT[bar.0.span()], str!["bar"]);
770+
assert_data_eq!(&INPUT[bar.1.span()], str!["[foo.bar]"]);
771+
let alice = bar.1.get_ref().get("alice").unwrap();
772+
assert_data_eq!(&INPUT[alice.0.span()], str!["alice"]);
773+
assert_data_eq!(&INPUT[alice.1.span()], str!["alice"]);
774+
let bob = alice.1.get_ref().get("bob").unwrap();
775+
assert_data_eq!(&INPUT[bob.0.span()], str!["bob"]);
776+
assert_data_eq!(&INPUT[bob.1.span()], str![[r#"{ one.two = "qux" }"#]]);
777+
let one = bob.1.get_ref().get("one").unwrap();
778+
assert_data_eq!(&INPUT[one.0.span()], str!["one"]);
779+
assert_data_eq!(&INPUT[one.1.span()], str!["one"]);
780+
let two = one.1.get_ref().get("two").unwrap();
781+
assert_data_eq!(&INPUT[two.0.span()], str!["two"]);
782+
assert_data_eq!(&INPUT[two.1.span()], str![[r#""qux""#]]);
754783
}
755784

756785
#[test]

0 commit comments

Comments
 (0)