use jsdet_core::observation::{TaintLabel, Value};
use jsdet_core::taint::{propagate_concat, propagate_json_parse, propagate_json_stringify};
use proptest::prelude::*;
proptest! {
#![proptest_config(ProptestConfig::with_cases(32))]
#[test]
fn wave10_concat_strings(parts in prop::collection::vec("[a-z0-9 ]{0,8}", 0..6)) {
let values: Vec<Value> = parts.iter().map(|p| Value::string(p)).collect();
if let Some(result) = propagate_concat(&values) {
let expected: String = parts.join("");
prop_assert_eq!(result.as_str(), Some(expected.as_str()));
}
}
#[test]
fn wave10_json_roundtrip_preserves_taint(s in "[a-z]{1,20}") {
let tainted = Value::tainted_string(&s, TaintLabel::new(7));
if let Some(json) = propagate_json_parse(&tainted) {
if let Some(back) = propagate_json_stringify(&json) {
prop_assert!(back.is_tainted());
}
}
}
}