mirror of
https://github.com/danbulant/oxc
synced 2026-05-25 04:42:10 +00:00
test(transformer/jsx): move tests setup into a macro (#7618)
Follow up after #7553. Move tests setup for JSX pragmas into a macro to prevent tests having access to an owned `TraverseCtx`, for safety.
This commit is contained in:
parent
25bffa59e5
commit
2158c3851b
1 changed files with 31 additions and 21 deletions
|
|
@ -1073,26 +1073,38 @@ mod test {
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
use oxc_allocator::Allocator;
|
use oxc_allocator::Allocator;
|
||||||
use oxc_ast::{ast::Expression, AstBuilder};
|
use oxc_ast::ast::Expression;
|
||||||
use oxc_semantic::{ScopeTree, SymbolTable};
|
use oxc_semantic::{ScopeTree, SymbolTable};
|
||||||
use oxc_traverse::ReusableTraverseCtx;
|
use oxc_traverse::ReusableTraverseCtx;
|
||||||
|
|
||||||
use crate::{context::TransformCtx, TransformOptions};
|
use crate::{TransformCtx, TransformOptions};
|
||||||
|
|
||||||
use super::Pragma;
|
use super::Pragma;
|
||||||
|
|
||||||
|
macro_rules! setup {
|
||||||
|
($traverse_ctx:ident, $transform_ctx:ident) => {
|
||||||
|
let allocator = Allocator::default();
|
||||||
|
let traverse_ctx =
|
||||||
|
ReusableTraverseCtx::new(ScopeTree::default(), SymbolTable::default(), &allocator);
|
||||||
|
// SAFETY: Macro user only gets a `&mut TraverseCtx`, which cannot be abused
|
||||||
|
let mut traverse_ctx = unsafe { traverse_ctx.unwrap() };
|
||||||
|
let $traverse_ctx = &mut traverse_ctx;
|
||||||
|
let $transform_ctx =
|
||||||
|
TransformCtx::new(Path::new("test.jsx"), &TransformOptions::default());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn this_expr_pragma() {
|
fn this_expr_pragma() {
|
||||||
let alloc = Allocator::default();
|
setup!(traverse_ctx, transform_ctx);
|
||||||
let ast = AstBuilder::new(&alloc);
|
|
||||||
let ctx = TransformCtx::new(Path::new("test.jsx"), &TransformOptions::default());
|
|
||||||
// SAFETY: constructed to avoid unsoundness
|
|
||||||
let mut traverse_ctx = unsafe {
|
|
||||||
ReusableTraverseCtx::new(ScopeTree::default(), SymbolTable::default(), &alloc).unwrap()
|
|
||||||
};
|
|
||||||
|
|
||||||
let pragma = Pragma::parse(Some(&"this.a.b".to_string()), "createElement", ast, &ctx);
|
let pragma = Pragma::parse(
|
||||||
let expr = pragma.create_expression(&mut traverse_ctx);
|
Some(&"this.a.b".to_string()),
|
||||||
|
"createElement",
|
||||||
|
traverse_ctx.ast,
|
||||||
|
&transform_ctx,
|
||||||
|
);
|
||||||
|
let expr = pragma.create_expression(traverse_ctx);
|
||||||
|
|
||||||
let Expression::StaticMemberExpression(outer_member) = &expr else { panic!() };
|
let Expression::StaticMemberExpression(outer_member) = &expr else { panic!() };
|
||||||
let Expression::StaticMemberExpression(inner_member) = &outer_member.object else {
|
let Expression::StaticMemberExpression(inner_member) = &outer_member.object else {
|
||||||
|
|
@ -1105,17 +1117,15 @@ mod test {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn import_meta_pragma() {
|
fn import_meta_pragma() {
|
||||||
let alloc = Allocator::default();
|
setup!(traverse_ctx, transform_ctx);
|
||||||
let ast = AstBuilder::new(&alloc);
|
|
||||||
let ctx = TransformCtx::new(Path::new("test.jsx"), &TransformOptions::default());
|
|
||||||
// SAFETY: constructed to avoid unsoundness
|
|
||||||
let mut traverse_ctx = unsafe {
|
|
||||||
ReusableTraverseCtx::new(ScopeTree::default(), SymbolTable::default(), &alloc).unwrap()
|
|
||||||
};
|
|
||||||
|
|
||||||
let pragma =
|
let pragma = Pragma::parse(
|
||||||
Pragma::parse(Some(&"import.meta.prop".to_string()), "createElement", ast, &ctx);
|
Some(&"import.meta.prop".to_string()),
|
||||||
let expr = pragma.create_expression(&mut traverse_ctx);
|
"createElement",
|
||||||
|
traverse_ctx.ast,
|
||||||
|
&transform_ctx,
|
||||||
|
);
|
||||||
|
let expr = pragma.create_expression(traverse_ctx);
|
||||||
|
|
||||||
let Expression::StaticMemberExpression(member) = &expr else { panic!() };
|
let Expression::StaticMemberExpression(member) = &expr else { panic!() };
|
||||||
let Expression::MetaProperty(meta_prop) = &member.object else { panic!() };
|
let Expression::MetaProperty(meta_prop) = &member.object else { panic!() };
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue