1
- import { hasSrcDirectoryInclude } from '../typescript-config' ;
1
+ import ts from 'typescript' ;
2
+
3
+ import { ValidatedConfig } from '../../../../declarations' ;
4
+ import { mockValidatedConfig } from '../../../../testing/mocks' ;
5
+ import { createTestingSystem , TestingSystem } from '../../../../testing/testing-sys' ;
6
+ import * as tsConfig from '../typescript-config' ;
2
7
3
8
describe ( 'typescript-config' , ( ) => {
4
9
describe ( 'hasSrcDirectoryInclude' , ( ) => {
5
10
it ( 'returns `false` for a non-array argument' , ( ) => {
6
11
// the intent of this test is to evaluate when a user doesn't provide an array, hence the type assertion
7
- expect ( hasSrcDirectoryInclude ( 'src' as unknown as string [ ] , 'src' ) ) . toBe ( false ) ;
12
+ expect ( tsConfig . hasSrcDirectoryInclude ( 'src' as unknown as string [ ] , 'src' ) ) . toBe ( false ) ;
8
13
} ) ;
9
14
10
15
it ( 'returns `false` for an empty array' , ( ) => {
11
- expect ( hasSrcDirectoryInclude ( [ ] , 'src/' ) ) . toBe ( false ) ;
16
+ expect ( tsConfig . hasSrcDirectoryInclude ( [ ] , 'src/' ) ) . toBe ( false ) ;
12
17
} ) ;
13
18
14
19
it ( 'returns `false` when an entry does not exist in the array' , ( ) => {
15
- expect ( hasSrcDirectoryInclude ( [ 'src' ] , 'source' ) ) . toBe ( false ) ;
20
+ expect ( tsConfig . hasSrcDirectoryInclude ( [ 'src' ] , 'source' ) ) . toBe ( false ) ;
16
21
} ) ;
17
22
18
23
it ( 'returns `true` when an entry does exist in the array' , ( ) => {
19
- expect ( hasSrcDirectoryInclude ( [ 'src' , 'foo' ] , 'src' ) ) . toBe ( true ) ;
24
+ expect ( tsConfig . hasSrcDirectoryInclude ( [ 'src' , 'foo' ] , 'src' ) ) . toBe ( true ) ;
20
25
} ) ;
21
26
22
27
it ( 'returns `true` for globs' , ( ) => {
23
- expect ( hasSrcDirectoryInclude ( [ 'src/**/*.ts' , 'foo/' ] , 'src/**/*.ts' ) ) . toBe ( true ) ;
28
+ expect ( tsConfig . hasSrcDirectoryInclude ( [ 'src/**/*.ts' , 'foo/' ] , 'src/**/*.ts' ) ) . toBe ( true ) ;
24
29
} ) ;
25
30
26
31
it . each ( [
@@ -29,7 +34,53 @@ describe('typescript-config', () => {
29
34
[ [ '../src' ] , '../src' ] ,
30
35
[ [ '*' ] , './*' ] ,
31
36
] ) ( 'returns `true` for relative paths' , ( includedPaths , srcDir ) => {
32
- expect ( hasSrcDirectoryInclude ( includedPaths , srcDir ) ) . toBe ( true ) ;
37
+ expect ( tsConfig . hasSrcDirectoryInclude ( includedPaths , srcDir ) ) . toBe ( true ) ;
38
+ } ) ;
39
+ } ) ;
40
+
41
+ describe ( 'validateTsConfig' , ( ) => {
42
+ let mockSys : TestingSystem ;
43
+ let config : ValidatedConfig ;
44
+ let tsSpy : jest . SpyInstance ;
45
+
46
+ beforeEach ( ( ) => {
47
+ mockSys = createTestingSystem ( ) ;
48
+ config = mockValidatedConfig ( ) ;
49
+
50
+ jest . spyOn ( tsConfig , 'getTsConfigPath' ) . mockResolvedValue ( {
51
+ path : 'tsconfig.json' ,
52
+ content : '' ,
53
+ } ) ;
54
+ tsSpy = jest . spyOn ( ts , 'getParsedCommandLineOfConfigFile' ) ;
55
+ } ) ;
56
+
57
+ it ( 'includes watchOptions when provided' , async ( ) => {
58
+ tsSpy . mockReturnValueOnce ( {
59
+ watchOptions : {
60
+ excludeFiles : [ 'exclude.ts' ] ,
61
+ excludeDirectories : [ 'exclude-dir' ] ,
62
+ } ,
63
+ options : null ,
64
+ fileNames : [ ] ,
65
+ errors : [ ] ,
66
+ } ) ;
67
+
68
+ const result = await tsConfig . validateTsConfig ( config , mockSys , { } ) ;
69
+ expect ( result . watchOptions ) . toEqual ( {
70
+ excludeFiles : [ 'exclude.ts' ] ,
71
+ excludeDirectories : [ 'exclude-dir' ] ,
72
+ } ) ;
73
+ } ) ;
74
+
75
+ it ( 'does not include watchOptions when not provided' , async ( ) => {
76
+ tsSpy . mockReturnValueOnce ( {
77
+ options : null ,
78
+ fileNames : [ ] ,
79
+ errors : [ ] ,
80
+ } ) ;
81
+
82
+ const result = await tsConfig . validateTsConfig ( config , mockSys , { } ) ;
83
+ expect ( result . watchOptions ) . toEqual ( { } ) ;
33
84
} ) ;
34
85
} ) ;
35
86
} ) ;
0 commit comments