vize_l1 0.535.0

L1 - the lossless Vue-template surface tree (codename Sinopia, Davinci P2-7)
Documentation
use super::{Cell, Probe, StableHasher128, String, Tokenizer, cstr, feed, oracle};

#[test]
fn interrupted_callback_and_non_eof_profile_change_keep_the_frozen_contract() {
    let mut cases = oracle(include_bytes!(concat!(
        env!("CARGO_MANIFEST_DIR"),
        "/tests/_fixtures/tokenizer_callback_resume.bin"
    )));
    extern crate std;
    use std::panic::{AssertUnwindSafe, catch_unwind};

    let source = "<div id='x' // comment\n :name='y'>{{{raw}}}</div><!bogus>";
    let mut result = String::default();
    let polls = Cell::new(0);
    let pause = Cell::new(false);
    {
        let probe = Probe {
            trace: &mut result,
            polls: &polls,
            pause: Some(&pause),
            live_mode: false,
            verbatim: false,
        };
        let mut tokenizer = Tokenizer::new(source, probe);
        assert!(catch_unwind(AssertUnwindSafe(|| tokenizer.tokenize())).is_err());
        tokenizer.set_tolerate_declarations(true);
        tokenizer.set_in_tag_comments(true);
        tokenizer.set_triple_mustache(true);
        tokenizer.tokenize();
        tokenizer.set_tolerate_declarations(false);
        tokenizer.set_in_tag_comments(false);
        tokenizer.set_triple_mustache(false);
        tokenizer.tokenize();
    }
    result.push_str(&cstr!("mode-polls:{};", polls.get()));
    let mut hash = StableHasher128::new();
    cases.check(
        &[source.as_bytes(), result.as_bytes()],
        "non-EOF callback pause and profile switch",
    );
    cases.finish();
    feed(&mut hash, source.as_bytes());
    feed(&mut hash, result.as_bytes());
    assert_eq!(
        hash.digest(),
        [
            158, 92, 108, 69, 251, 99, 193, 37, 48, 125, 186, 47, 216, 189, 183, 150
        ],
        "captured source: 5bca3a881"
    );
}