64 lines
2.1 KiB
TypeScript
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")]');
|
|
});
|
|
}); |