vize_l2 0.632.0

L2 - the Davinci semantic IR (codename Disegno): the neutral op family every input dialect lowers into
Documentation
use super::*;

#[test]
fn boolean_proof_is_the_original_initializer_not_a_name_annotation_or_primitive_family() {
    for initializer in ["1", "null", "'true'", "2n"] {
        let arena = Allocator::default();
        let source = alloc::format!(
            "<script setup>const ready={initializer}</script><template><div v-if='ready'/></template>"
        );
        let mut owner = owner(&arena, &source);
        {
            let mut walk = owner.begin().unwrap();
            let child = walk.selected().children().next().unwrap();
            assert_eq!(walk.child(child).unwrap_err().kind, Kind::UnsupportedChild);
            assert!(walk.complete().is_err());
        }
        let output = owner.finish();
        let file = output.file().unwrap();
        let mut bindings = file.bindings();
        let binding = bindings.next().unwrap();
        assert!(bindings.next().is_none());
        assert!(binding.declaration().unwrap().initializer.is_primitive());
        assert_eq!(binding.declaration().unwrap().boolean_initializer(), None);
        assert_eq!(file.artifact().node_count(), 0);
        assert!(!file.is_complete());
    }
}

#[test]
fn unsupported_condition_spelling_and_body_shapes_remain_whole_lower_refusals() {
    for template in [
        "<div v-if='ready && ready'/>",
        "<div v-if='(ready)'/>",
        "<div v-if='ready /* kept */'/>",
        "<div v-if=' ready '/>",
        "<div v-if='r&#101;ady'/>",
        "<div v-if='\\u0072eady'/>",
        "<div v-if='ready'><b/></div>",
        "<div v-if='ready'>a b</div>",
        "<div v-if='ready' title='value'/>",
        "<div v-if='ready' @click='ready'/>",
        "<div v-if='ready' v-if='ready'/>",
        "<div v-if='ready'/><p/>",
        "<div><p v-if='ready'/></div>",
        "<div v-if='ready' v-for='item in ready'/>",
        "<div v-else-if='ready'/>",
        "<div v-if='missing'/>",
    ] {
        let arena = Allocator::default();
        let source =
            alloc::format!("<script setup>let ready=true</script><template>{template}</template>");
        let mut owner = owner(&arena, &source);
        {
            let mut walk = owner.begin().unwrap();
            let mut refused = false;
            for child in walk.selected().children() {
                if walk.child(child).is_err() {
                    refused = true;
                    break;
                }
            }
            assert!(refused, "{template}");
            assert!(walk.complete().is_err());
        }
        let output = owner.finish();
        assert!(output.view().is_err(), "{template}");
        if let Some(file) = output.file() {
            assert!(!file.is_complete());
        }
        if let Some(file) = output.rejected_file() {
            assert!(core::ptr::eq(file.source(), source.as_str()));
            assert!(
                file.native_conditionals()
                    .iter()
                    .all(|row| !matches!(row.state(), NativeFileConditionalState::Admitted(_)))
            );
        }
    }
}