#[cfg(test)]
mod tests {
use serde_json::{Map, Value};
const INSERTION_ORDERED: &str = "SERDE_JSON_MAP=insertion_ordered";
const KEY_SORTED: &str = "SERDE_JSON_MAP=key_sorted";
fn probe() -> Map<String, Value> {
let mut probe = Map::new();
probe.insert("beta".to_owned(), Value::Null);
probe.insert("alpha".to_owned(), Value::Null);
probe
}
fn map_is_insertion_ordered() -> bool {
probe().keys().next().map(String::as_str) == Some("beta")
}
#[test]
fn serde_json_map_ordering_is_announced() {
if map_is_insertion_ordered() {
println!(
"{INSERTION_ORDERED} — serde_json::Map is an IndexMap here (preserve_order \
resolved ON). Emitters that walk a Map see AUTHORED order."
);
} else {
println!(
"{KEY_SORTED} — serde_json::Map is a BTreeMap here (preserve_order resolved \
OFF). Emitters that walk a Map see SORTED order."
);
}
}
#[test]
fn insertion_order_is_observable_exactly_when_the_map_preserves_it() {
let forward = {
let mut map = Map::new();
map.insert("alpha".to_owned(), Value::Null);
map.insert("beta".to_owned(), Value::Null);
map
};
let reversed = probe();
let distinguishable =
forward.keys().collect::<Vec<_>>() != reversed.keys().collect::<Vec<_>>();
assert_eq!(
distinguishable,
map_is_insertion_ordered(),
"the ordering probe and the fixtures disagree about this build. If the probe says \
key-sorted while two opposite insertion orders are still distinguishable (or vice \
versa), then every `*_independent_of_insertion_order` test in this workspace is \
asserting something other than what its name claims."
);
}
}