@@ -9,6 +9,7 @@ import * as ts from "typescript";
99import * as vm from "vm" ;
1010import * as tstl from "../src" ;
1111import { createEmitOutputCollector } from "../src/transpilation/output-collector" ;
12+ import { transpileProject } from "../src" ;
1213
1314const jsonLib = fs . readFileSync ( path . join ( __dirname , "json.lua" ) , "utf8" ) ;
1415const luaLib = fs . readFileSync ( path . resolve ( __dirname , "../dist/lualib/lualib_bundle.lua" ) , "utf8" ) ;
@@ -128,7 +129,7 @@ export abstract class TestBuilder {
128129 return this ;
129130 }
130131
131- private options : tstl . CompilerOptions = {
132+ protected options : tstl . CompilerOptions = {
132133 luaTarget : tstl . LuaTarget . Lua54 ,
133134 noHeader : true ,
134135 skipLibCheck : true ,
@@ -148,7 +149,7 @@ export abstract class TestBuilder {
148149 protected mainFileName = "main.ts" ;
149150 public setMainFileName ( mainFileName : string ) : this {
150151 expect ( this . hasProgram ) . toBe ( false ) ;
151- this . mainFileName = mainFileName ;
152+ this . mainFileName = path . normalize ( mainFileName ) ;
152153 return this ;
153154 }
154155
@@ -202,7 +203,8 @@ export abstract class TestBuilder {
202203 const { transpiledFiles } = this . getLuaResult ( ) ;
203204 const mainFile = this . options . luaBundle
204205 ? transpiledFiles [ 0 ]
205- : transpiledFiles . find ( ( { sourceFiles } ) => sourceFiles . some ( f => f . fileName === this . mainFileName ) ) ;
206+ : transpiledFiles . find ( ( { sourceFiles } ) => sourceFiles . some ( f => path . normalize ( f . fileName ) === this . mainFileName ) ) ;
207+
206208 expect ( mainFile ) . toMatchObject ( { lua : expect . any ( String ) , luaSourceMap : expect . any ( String ) } ) ;
207209 return mainFile as ExecutableTranspiledFile ;
208210 }
@@ -539,6 +541,21 @@ class ExpressionTestBuilder extends AccessorTestBuilder {
539541 }
540542}
541543
544+ class ProjectTestBuilder extends ModuleTestBuilder {
545+ constructor ( private tsConfig : string ) {
546+ super ( "" ) ;
547+ }
548+
549+ @memoize
550+ public getLuaResult ( ) : tstl . TranspileVirtualProjectResult {
551+ // Override getLuaResult to use transpileProject with tsconfig.json instead
552+ const collector = createEmitOutputCollector ( ) ;
553+ const { diagnostics } = transpileProject ( this . tsConfig , this . options , collector . writeFile ) ;
554+
555+ return { diagnostics : [ ...diagnostics ] , transpiledFiles : collector . files } ;
556+ }
557+ }
558+
542559const createTestBuilderFactory = < T extends TestBuilder > (
543560 builder : new ( _tsCode : string ) => T ,
544561 serializeSubstitutions : boolean
@@ -566,3 +583,4 @@ export const testFunction = createTestBuilderFactory(FunctionTestBuilder, false)
566583export const testFunctionTemplate = createTestBuilderFactory ( FunctionTestBuilder , true ) ;
567584export const testExpression = createTestBuilderFactory ( ExpressionTestBuilder , false ) ;
568585export const testExpressionTemplate = createTestBuilderFactory ( ExpressionTestBuilder , true ) ;
586+ export const testProject = createTestBuilderFactory ( ProjectTestBuilder , false ) ;
0 commit comments