Files
2025-04-06 19:54:48 +08:00

64 lines
2.1 KiB
TypeScript

import * as ts from 'typescript';
import transformer from '../src/transformer';
function transpile(source: string): string {
const program = ts.createProgram([], {});
const result = ts.transpileModule(source, {
compilerOptions: {
target: ts.ScriptTarget.ESNext,
module: ts.ModuleKind.CommonJS,
},
transformers: {
before: [transformer(program) as ts.TransformerFactory<ts.SourceFile>]
}
});
return result.outputText;
}
describe('rbxts-transformer-instances', () => {
test('transforms new Part() to new Instance("Part")', () => {
const source = `const part = new Part();`;
const result = transpile(source);
expect(result).toContain('const part = new Instance("Part")');
});
test('transforms new instances with arguments', () => {
const source = `const model = new Model("MyModel");`;
const result = transpile(source);
expect(result).toContain('const model = new Instance("Model", "MyModel")');
});
test('preserves non-instance constructors', () => {
const source = `const obj = new CustomClass();`;
const result = transpile(source);
expect(result).toContain('const obj = new CustomClass()');
});
test('handles multiple constructors in the same file', () => {
const source = `
const part = new Part();
const obj = new CustomClass();
const folder = new Folder("MyFolder");
`;
const result = transpile(source);
expect(result).toContain('const part = new Instance("Part")');
expect(result).toContain('const obj = new CustomClass()');
expect(result).toContain('const folder = new Instance("Folder", "MyFolder")');
});
test('transforms instances in complex expressions', () => {
const source = `
function createParts() {
return [new Part(), new Part(), new Model("MyModel")];
}
`;
const result = transpile(source);
expect(result).toContain('return [new Instance("Part"), new Instance("Part"), new Instance("Model", "MyModel")]');
});
});