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] } }); 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")]'); }); });