jsdet-core 0.1.1

Core WASM-sandboxed JavaScript detonation engine
Documentation
//! Wave 10: property tests for jsdet-core taint propagation.

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());
            }
        }
    }
}