1
1
const path = require ( 'path' ) ;
2
2
const test = require ( 'ava' ) ;
3
+ const execa = require ( 'execa' ) ;
3
4
const pkg = require ( '../package.json' ) ;
4
5
const makeProvider = require ( '..' ) ;
5
6
@@ -8,7 +9,7 @@ const withProvider = (t, run) => run(t, makeProvider({
8
9
t . true ( identifiers . includes ( 'ava-3.2' ) ) ;
9
10
t . is ( version , pkg . version ) ;
10
11
return {
11
- ava : { version : '3.2 .0' } ,
12
+ ava : { version : '3.15 .0' } ,
12
13
identifier : 'ava-3.2' ,
13
14
normalizeGlobPatterns : patterns => patterns ,
14
15
async findFiles ( { patterns} ) {
@@ -19,8 +20,60 @@ const withProvider = (t, run) => run(t, makeProvider({
19
20
}
20
21
} ) ) ;
21
22
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
+
22
29
test ( 'negotiates ava-3.2 protocol' , withProvider , t => t . plan ( 2 ) ) ;
23
30
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
+
24
77
test ( 'main() ignoreChange()' , withProvider , ( t , provider ) => {
25
78
const main = provider . main ( { config : { rewritePaths : { 'src/' : 'build/' } } } ) ;
26
79
t . true ( main . ignoreChange ( path . join ( __dirname , 'src/foo.ts' ) ) ) ;
@@ -41,3 +94,29 @@ test('main() updateGlobs()', withProvider, (t, provider) => {
41
94
ignoredByWatcherPatterns : [ 'assets/**' ]
42
95
} ) ) ;
43
96
} ) ;
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