11const path = require ( 'path' ) ;
22const test = require ( 'ava' ) ;
3+ const execa = require ( 'execa' ) ;
34const pkg = require ( '../package.json' ) ;
45const makeProvider = require ( '..' ) ;
56
@@ -8,7 +9,7 @@ const withProvider = (t, run) => run(t, makeProvider({
89 t . true ( identifiers . includes ( 'ava-3.2' ) ) ;
910 t . is ( version , pkg . version ) ;
1011 return {
11- ava : { version : '3.2 .0' } ,
12+ ava : { version : '3.15 .0' } ,
1213 identifier : 'ava-3.2' ,
1314 normalizeGlobPatterns : patterns => patterns ,
1415 async findFiles ( { patterns} ) {
@@ -19,8 +20,60 @@ const withProvider = (t, run) => run(t, makeProvider({
1920 }
2021} ) ) ;
2122
23+ const validateConfig = ( t , provider , config ) => {
24+ const error = t . throws ( ( ) => provider . main ( { config} ) ) ;
25+ error . message = error . message . replace ( `v${ pkg . version } ` , 'v${pkg.version}' ) ; // eslint-disable-line no-template-curly-in-string
26+ t . snapshot ( error ) ;
27+ } ;
28+
2229test ( 'negotiates ava-3.2 protocol' , withProvider , t => t . plan ( 2 ) ) ;
2330
31+ test ( 'main() config validation: throw when config is not a plain object' , withProvider , ( t , provider ) => {
32+ validateConfig ( t , provider , false ) ;
33+ validateConfig ( t , provider , true ) ;
34+ validateConfig ( t , provider , null ) ;
35+ validateConfig ( t , provider , [ ] ) ;
36+ } ) ;
37+
38+ test ( 'main() config validation: throw when config contains keys other than \'extensions\' or \'rewritePaths\'' , withProvider , ( t , provider ) => {
39+ validateConfig ( t , provider , { foo : 1 } ) ;
40+ } ) ;
41+
42+ test ( 'main() config validation: throw when config.extensions contains empty strings' , withProvider , ( t , provider ) => {
43+ validateConfig ( t , provider , { extensions : [ '' ] } ) ;
44+ } ) ;
45+
46+ test ( 'main() config validation: throw when config.extensions contains non-strings' , withProvider , ( t , provider ) => {
47+ validateConfig ( t , provider , { extensions : [ 1 ] } ) ;
48+ } ) ;
49+
50+ test ( 'main() config validation: throw when config.extensions contains duplicates' , withProvider , ( t , provider ) => {
51+ validateConfig ( t , provider , { extensions : [ 'ts' , 'ts' ] } ) ;
52+ } ) ;
53+
54+ test ( 'main() config validation: config may not be an empty object' , withProvider , ( t , provider ) => {
55+ validateConfig ( t , provider , { } ) ;
56+ } ) ;
57+
58+ test ( 'main() config validation: rewrite paths must end in a /' , withProvider , ( t , provider ) => {
59+ validateConfig ( t , provider , { rewritePaths : { src : 'build/' } } ) ;
60+ validateConfig ( t , provider , { rewritePaths : { 'src/' : 'build' } } ) ;
61+ } ) ;
62+
63+ test ( 'main() extensions: defaults to [\'ts\']' , withProvider , ( t , provider ) => {
64+ t . deepEqual ( provider . main ( { config : { rewritePaths : { 'src/' : 'build/' } } } ) . extensions , [ 'ts' ] ) ;
65+ } ) ;
66+
67+ test ( 'main() extensions: returns configured extensions' , withProvider , ( t , provider ) => {
68+ const extensions = [ 'tsx' ] ;
69+ t . deepEqual ( provider . main ( { config : { extensions, rewritePaths : { 'src/' : 'build/' } } } ) . extensions , extensions ) ;
70+ } ) ;
71+
72+ test ( 'main() extensions: always returns new arrays' , withProvider , ( t , provider ) => {
73+ const main = provider . main ( { config : { rewritePaths : { 'src/' : 'build/' } } } ) ;
74+ t . not ( main . extensions , main . extensions ) ;
75+ } ) ;
76+
2477test ( 'main() ignoreChange()' , withProvider , ( t , provider ) => {
2578 const main = provider . main ( { config : { rewritePaths : { 'src/' : 'build/' } } } ) ;
2679 t . true ( main . ignoreChange ( path . join ( __dirname , 'src/foo.ts' ) ) ) ;
@@ -41,3 +94,29 @@ test('main() updateGlobs()', withProvider, (t, provider) => {
4194 ignoredByWatcherPatterns : [ 'assets/**' ]
4295 } ) ) ;
4396} ) ;
97+
98+ const compile = async provider => {
99+ return {
100+ state : await provider . main ( {
101+ config : {
102+ rewritePaths : {
103+ 'typescript/' : 'fixtures/'
104+ }
105+ }
106+ } ) . compile ( )
107+ } ;
108+ } ;
109+
110+ test ( 'worker(): load rewritten paths files' , withProvider , async ( t , provider ) => {
111+ const { state} = await compile ( provider ) ;
112+ const { stdout, stderr} = await execa . node (
113+ path . join ( __dirname , 'fixtures/install-and-load' ) ,
114+ [ 'ava-3' , JSON . stringify ( state ) , path . join ( __dirname , 'typescript' , 'file.ts' ) ] ,
115+ { cwd : path . join ( __dirname , 'fixtures' ) }
116+ ) ;
117+ if ( stderr . length > 0 ) {
118+ t . log ( stderr ) ;
119+ }
120+
121+ t . snapshot ( stdout ) ;
122+ } ) ;
0 commit comments