vize_l1 0.581.0

L1 - the lossless Vue-template surface tree (codename Sinopia, Davinci P2-7)
Documentation
use super::*;
use vize_l0::Span;

#[test]
fn native_js_ts_program_retains_original_jsdoc_receipt_after_owner_move() {
    let arena = Allocator::default();
    let source = "/** @type {import('vue').Ref<number>} */ let value=1;";
    let origin = 137;
    let authored = alloc::format!("{}{source}", " ".repeat(origin as usize));
    for lang in [Lang::Js, Lang::Ts] {
        let original = parse_program_once(
            &arena,
            EmbedSource::authored(&authored, Span::new(origin, origin + source.len() as u32))
                .unwrap(),
            ProgramOptions::module(lang),
        );
        assert!(original.hole().is_none());
        let ast = original.admitted_program().unwrap().program().body.as_ptr();
        let source_pointer = original.source().text().as_ptr();
        let moved = original;
        let admitted = moved.admitted_program().unwrap();
        assert_eq!(moved.source().authored_root(), authored.as_str());
        assert!(admitted.has_jsdoc_comments());
        assert_eq!(admitted.program().body.as_ptr(), ast);
        assert_eq!(admitted.source().as_ptr(), source_pointer);
        assert_eq!(admitted.source(), source);
        assert_eq!(
            admitted.source_type(),
            ProgramOptions::module(lang).source_type()
        );
        assert!(core::ptr::eq(admitted.program(), moved.program().unwrap()));
        assert_eq!(moved.comments().count(), 1);
        let comment = moved.comments().next().unwrap();
        let end = source.find("*/").unwrap() as u32 + 2;
        assert_eq!(comment.decoded_span().unwrap(), Span::new(0, end));
        assert_eq!(
            comment.authored_span().unwrap(),
            Span::new(origin, origin + end)
        );
        assert_eq!(comment.text().unwrap(), &source[..end as usize]);
        assert_eq!(moved.diagnostics().count(), 0);
    }
}