• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1describe("unittests:: services:: PreProcessFile:", () => {
2    function test(sourceText: string, readImportFile: boolean, detectJavaScriptImports: boolean, expectedPreProcess: ts.PreProcessedFileInfo): void {
3        const resultPreProcess = ts.preProcessFile(sourceText, readImportFile, detectJavaScriptImports);
4
5        assert.equal(resultPreProcess.isLibFile, expectedPreProcess.isLibFile, "Pre-processed file has different value for isLibFile. Expected: " + expectedPreProcess.isLibFile + ". Actual: " + resultPreProcess.isLibFile);
6
7        checkFileReferenceList("Imported files", expectedPreProcess.importedFiles, resultPreProcess.importedFiles);
8        checkFileReferenceList("Referenced files", expectedPreProcess.referencedFiles, resultPreProcess.referencedFiles);
9        checkFileReferenceList("Type reference directives", expectedPreProcess.typeReferenceDirectives, resultPreProcess.typeReferenceDirectives);
10        checkFileReferenceList("Lib reference directives", expectedPreProcess.libReferenceDirectives, resultPreProcess.libReferenceDirectives);
11
12        assert.deepEqual(resultPreProcess.ambientExternalModules, expectedPreProcess.ambientExternalModules);
13    }
14
15    function checkFileReferenceList(kind: string, expected: ts.FileReference[], actual: ts.FileReference[]) {
16        if (expected === actual) {
17            return;
18        }
19        assert.deepEqual(actual, expected, `Expected [${kind}] ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
20    }
21
22    describe("Test preProcessFiles,", () => {
23        it("Correctly return referenced files from triple slash", () => {
24            test("///<reference path = \"refFile1.ts\" />" + "\n" + "///<reference path =\"refFile2.ts\"/>" + "\n" + "///<reference path=\"refFile3.ts\" />" + "\n" + "///<reference path= \"..\\refFile4d.ts\" />",
25                /*readImportFile*/ true,
26                /*detectJavaScriptImports*/ false,
27                {
28                    referencedFiles: [{ fileName: "refFile1.ts", pos: 22, end: 33 }, { fileName: "refFile2.ts", pos: 59, end: 70 },
29                        { fileName: "refFile3.ts", pos: 94, end: 105 }, { fileName: "..\\refFile4d.ts", pos: 131, end: 146 }],
30                    importedFiles: <ts.FileReference[]>[],
31                    typeReferenceDirectives: [],
32                    libReferenceDirectives: [],
33                    ambientExternalModules: undefined,
34                    isLibFile: false
35                });
36        });
37
38        it("Do not return reference path because of invalid triple-slash syntax", () => {
39            test("///<reference path\"refFile1.ts\" />" + "\n" + "///<reference path =\"refFile2.ts\">" + "\n" + "///<referencepath=\"refFile3.ts\" />" + "\n" + "///<reference pat= \"refFile4d.ts\" />",
40                /*readImportFile*/ true,
41                /*detectJavaScriptImports*/ false,
42                {
43                    referencedFiles: <ts.FileReference[]>[],
44                    importedFiles: <ts.FileReference[]>[],
45                    typeReferenceDirectives: [],
46                    libReferenceDirectives: [],
47                    ambientExternalModules: undefined,
48                    isLibFile: false
49                });
50        });
51
52        it("Do not return reference path of non-imports", () => {
53            test("Quill.import('delta');",
54                /*readImportFile*/ true,
55                /*detectJavaScriptImports*/ false,
56                {
57                    referencedFiles: <ts.FileReference[]>[],
58                    importedFiles: <ts.FileReference[]>[],
59                    typeReferenceDirectives: [],
60                    libReferenceDirectives: [],
61                    ambientExternalModules: undefined,
62                    isLibFile: false
63                });
64        });
65
66        it("Do not return reference path of nested non-imports", () => {
67            test("a.b.import('c');",
68                /*readImportFile*/ true,
69                /*detectJavaScriptImports*/ false,
70                {
71                    referencedFiles: <ts.FileReference[]>[],
72                    importedFiles: <ts.FileReference[]>[],
73                    typeReferenceDirectives: [],
74                    libReferenceDirectives: [],
75                    ambientExternalModules: undefined,
76                    isLibFile: false
77                });
78        });
79
80        it("Correctly return imported files", () => {
81            test("import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\"); import i3= require(\"r3.ts\"); import i4=require(\"r4.ts\"); import i5 = require  (\"r5.ts\");",
82                /*readImportFile*/ true,
83                /*detectJavaScriptImports*/ false,
84                {
85                    referencedFiles: <ts.FileReference[]>[],
86                    typeReferenceDirectives: [],
87                    libReferenceDirectives: [],
88                    importedFiles: [{ fileName: "r1.ts", pos: 20, end: 25 }, { fileName: "r2.ts", pos: 49, end: 54 }, { fileName: "r3.ts", pos: 78, end: 83 },
89                        { fileName: "r4.ts", pos: 106, end: 111 }, { fileName: "r5.ts", pos: 138, end: 143 }],
90                    ambientExternalModules: undefined,
91                    isLibFile: false
92                });
93        });
94
95        it("Do not return imported files if readImportFiles argument is false", () => {
96            test("import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\"); import i3= require(\"r3.ts\"); import i4=require(\"r4.ts\"); import i5 = require  (\"r5.ts\");",
97                /*readImportFile*/ false,
98                /*detectJavaScriptImports*/ false,
99                {
100                    referencedFiles: <ts.FileReference[]>[],
101                    typeReferenceDirectives: [],
102                    libReferenceDirectives: [],
103                    importedFiles: <ts.FileReference[]>[],
104                    ambientExternalModules: undefined,
105                    isLibFile: false
106                });
107        });
108
109        it("Do not return import path because of invalid import syntax", () => {
110            test("import i1 require(\"r1.ts\"); import = require(\"r2.ts\") import i3= require(\"r3.ts\"); import i5",
111                /*readImportFile*/ true,
112                /*detectJavaScriptImports*/ false,
113                {
114                    referencedFiles: <ts.FileReference[]>[],
115                    typeReferenceDirectives: [],
116                    libReferenceDirectives: [],
117                    importedFiles: [{ fileName: "r3.ts", pos: 73, end: 78 }],
118                    ambientExternalModules: undefined,
119                    isLibFile: false
120                });
121        });
122
123        it("Correctly return referenced files and import files", () => {
124            test("///<reference path=\"refFile1.ts\" />" + "\n" + "///<reference path =\"refFile2.ts\"/>" + "\n" + "import i1 = require(\"r1.ts\"); import i2 =require(\"r2.ts\");",
125                /*readImportFile*/ true,
126                /*detectJavaScriptImports*/ false,
127                {
128                    referencedFiles: [{ fileName: "refFile1.ts", pos: 20, end: 31 }, { fileName: "refFile2.ts", pos: 57, end: 68 }],
129                    typeReferenceDirectives: [],
130                    libReferenceDirectives: [],
131                    importedFiles: [{ fileName: "r1.ts", pos: 92, end: 97 }, { fileName: "r2.ts", pos: 121, end: 126 }],
132                    ambientExternalModules: undefined,
133                    isLibFile: false
134                });
135        });
136
137        it("Correctly return referenced files and import files even with some invalid syntax", () => {
138            test("///<reference path=\"refFile1.ts\" />" + "\n" + "///<reference path \"refFile2.ts\"/>" + "\n" + "import i1 = require(\"r1.ts\"); import = require(\"r2.ts\"); import i2 = require(\"r3.ts\");",
139                /*readImportFile*/ true,
140                /*detectJavaScriptImports*/ false,
141                {
142                    referencedFiles: [{ fileName: "refFile1.ts", pos: 20, end: 31 }],
143                    typeReferenceDirectives: [],
144                    libReferenceDirectives: [],
145                    importedFiles: [{ fileName: "r1.ts", pos: 91, end: 96 }, { fileName: "r3.ts", pos: 148, end: 153 }],
146                    ambientExternalModules: undefined,
147                    isLibFile: false
148                });
149        });
150
151        it("Correctly return ES6 imports", () => {
152            test("import * as ns from \"m1\";" + "\n" +
153                "import def, * as ns from \"m2\";" + "\n" +
154                "import def from \"m3\";" + "\n" +
155                "import {a} from \"m4\";" + "\n" +
156                "import {a as A} from \"m5\";" + "\n" +
157                "import {a as A, b, c as C} from \"m6\";" + "\n" +
158                "import def , {a, b, c as C} from \"m7\";" + "\n",
159            /*readImportFile*/ true,
160            /*detectJavaScriptImports*/ false,
161            {
162                referencedFiles: [],
163                typeReferenceDirectives: [],
164                libReferenceDirectives: [],
165                importedFiles: [
166                    { fileName: "m1", pos: 20, end: 22 },
167                    { fileName: "m2", pos: 51, end: 53 },
168                    { fileName: "m3", pos: 73, end: 75 },
169                    { fileName: "m4", pos: 95, end: 97 },
170                    { fileName: "m5", pos: 122, end: 124 },
171                    { fileName: "m6", pos: 160, end: 162 },
172                    { fileName: "m7", pos: 199, end: 201 }
173                ],
174                ambientExternalModules: undefined,
175                isLibFile: false
176            });
177        });
178
179        it("Correctly return ES6 exports", () => {
180            test("export * from \"m1\";" + "\n" +
181                "export {a} from \"m2\";" + "\n" +
182                "export {a as A} from \"m3\";" + "\n" +
183                "export {a as A, b, c as C} from \"m4\";" + "\n",
184            /*readImportFile*/ true,
185            /*detectJavaScriptImports*/ false,
186            {
187                referencedFiles: [],
188                typeReferenceDirectives: [],
189                libReferenceDirectives: [],
190                importedFiles: [
191                    { fileName: "m1", pos: 14, end: 16 },
192                    { fileName: "m2", pos: 36, end: 38 },
193                    { fileName: "m3", pos: 63, end: 65 },
194                    { fileName: "m4", pos: 101, end: 103 },
195                ],
196                ambientExternalModules: undefined,
197                isLibFile: false
198            });
199        });
200
201        it("Correctly handles import types", () => {
202            test("import type * as ns from \"m1\";" + "\n" +
203                "import type def, * as ns from \"m2\";" + "\n" +
204                "import type def from \"m3\";" + "\n" +
205                "import type {a} from \"m4\";" + "\n" +
206                "import type {a as A} from \"m5\";" + "\n" +
207                "import type {a as A, b, c as C} from \"m6\";" + "\n" +
208                "import type def , {a, b, c as C} from \"m7\";" + "\n" +
209                "import type from \"m8\";" + "\n" +
210                "import type T = require(\"m9\");" + "\n" +
211                "import type = require(\"m10\");" + "\n" +
212                "export import type T = require(\"m11\");" + "\n" +
213                "export import type = require(\"m12\");" + "\n",
214            /*readImportFile*/ true,
215            /*detectJavaScriptImports*/ false,
216            {
217                referencedFiles: <ts.FileReference[]>[],
218                typeReferenceDirectives: [],
219                libReferenceDirectives: [],
220                importedFiles: [
221                    { fileName: "m1", pos: 25, end: 27 },
222                    { fileName: "m2", pos: 61, end: 63 },
223                    { fileName: "m3", pos: 88, end: 90 },
224                    { fileName: "m4", pos: 115, end: 117 },
225                    { fileName: "m5", pos: 147, end: 149 },
226                    { fileName: "m6", pos: 190, end: 192 },
227                    { fileName: "m7", pos: 234, end: 236 },
228                    { fileName: "m8", pos: 257, end: 259 },
229                    { fileName: "m9", pos: 287, end: 289 },
230                    { fileName: "m10", pos: 316, end: 319 },
231                    { fileName: "m11", pos: 355, end: 358 },
232                    { fileName: "m12", pos: 392, end: 395 },
233                ],
234                ambientExternalModules: undefined,
235                isLibFile: false
236            });
237        });
238
239        it("Correctly handles export types", () => {
240            test("export type * from \"m1\";" + "\n" +
241                "export type {a} from \"m2\";" + "\n" +
242                "export type {a as A} from \"m3\";" + "\n" +
243                "export type {a as A, b, c as C} from \"m4\";" + "\n",
244            /*readImportFile*/ true,
245            /*detectJavaScriptImports*/ false,
246            {
247                referencedFiles: <ts.FileReference[]>[],
248                typeReferenceDirectives: [],
249                libReferenceDirectives: [],
250                importedFiles: [
251                    { fileName: "m1", pos: 19, end: 21 },
252                    { fileName: "m2", pos: 46, end: 48 },
253                    { fileName: "m3", pos: 78, end: 80 },
254                    { fileName: "m4", pos: 121, end: 123 },
255                ],
256                ambientExternalModules: undefined,
257                isLibFile: false
258            });
259        });
260
261        it("Correctly handles import type node", () => {
262            test("const x: import(\"m1\") = { x: 0, y: 0 };" + "\n" +
263                "let y: import(\"m2\").Bar.I = { a: \"\", b: 0 };" + "\n" +
264                "let shim: typeof import(\"m3\") = { Bar: Bar2 };" + "\n",
265            /*readImportFile*/ true,
266            /*detectJavaScriptImports*/ false,
267            {
268                referencedFiles: [],
269                typeReferenceDirectives: [],
270                libReferenceDirectives: [],
271                importedFiles: [
272                    { fileName: "m1", pos: 16, end: 18 },
273                    { fileName: "m2", pos: 54, end: 56 },
274                    { fileName: "m3", pos: 109, end: 111 },
275                ],
276                ambientExternalModules: undefined,
277                isLibFile: false
278            });
279        });
280
281        it("Correctly return ambient external modules", () => {
282            test(`
283               declare module A {}
284               declare module "B" {}
285               function foo() {
286               }
287               `,
288            /*readImportFile*/ true,
289            /*detectJavaScriptImports*/ false,
290            {
291                referencedFiles: [],
292                typeReferenceDirectives: [],
293                libReferenceDirectives: [],
294                importedFiles: [],
295                ambientExternalModules: ["B"],
296                isLibFile: false
297            });
298        });
299
300        it("Correctly handles export import declarations", () => {
301            test("export import a = require(\"m1\");",
302                /*readImportFile*/ true,
303                /*detectJavaScriptImports*/ false,
304                {
305                    referencedFiles: [],
306                    typeReferenceDirectives: [],
307                    libReferenceDirectives: [],
308                    importedFiles: [
309                        { fileName: "m1", pos: 26, end: 28 }
310                    ],
311                    ambientExternalModules: undefined,
312                    isLibFile: false
313                });
314        });
315        it("Correctly handles export require calls in JavaScript files", () => {
316            test(`
317            export import a = require("m1");
318            var x = require('m2');
319            foo(require('m3'));
320            var z = { f: require('m4') }
321            `,
322            /*readImportFile*/ true,
323            /*detectJavaScriptImports*/ true,
324            {
325                referencedFiles: [],
326                typeReferenceDirectives: [],
327                libReferenceDirectives: [],
328                importedFiles: [
329                    { fileName: "m1", pos: 39, end: 41 },
330                    { fileName: "m2", pos: 74, end: 76 },
331                    { fileName: "m3", pos: 105, end: 107 },
332                    { fileName: "m4", pos: 146, end: 148 },
333                ],
334                ambientExternalModules: undefined,
335                isLibFile: false
336            });
337        });
338        it("Correctly handles dependency lists in define([deplist]) calls in JavaScript files", () => {
339            test(`
340            define(["mod1", "mod2"], (m1, m2) => {
341            });
342            `,
343            /*readImportFile*/ true,
344            /*detectJavaScriptImports*/ true,
345            {
346                referencedFiles: [],
347                typeReferenceDirectives: [],
348                libReferenceDirectives: [],
349                importedFiles: [
350                    { fileName: "mod1", pos: 21, end: 25 },
351                    { fileName: "mod2", pos: 29, end: 33 },
352                ],
353                ambientExternalModules: undefined,
354                isLibFile: false
355            });
356        });
357
358        it("Correctly handles dependency lists in define(modName, [deplist]) calls in JavaScript files", () => {
359            test(`
360            define("mod", ["mod1", "mod2"], (m1, m2) => {
361            });
362            `,
363            /*readImportFile*/ true,
364            /*detectJavaScriptImports*/ true,
365            {
366                referencedFiles: [],
367                typeReferenceDirectives: [],
368                libReferenceDirectives: [],
369                importedFiles: [
370                    { fileName: "mod1", pos: 28, end: 32 },
371                    { fileName: "mod2", pos: 36, end: 40 },
372                ],
373                ambientExternalModules: undefined,
374                isLibFile: false
375            });
376        });
377
378        it("correctly handles augmentations in external modules - 1", () => {
379            test(`
380            declare module "../Observable" {
381                interface I {}
382            }
383
384            export {}
385            `,
386            /*readImportFile*/ true,
387            /*detectJavaScriptImports*/ false,
388            {
389                referencedFiles: [],
390                typeReferenceDirectives: [],
391                libReferenceDirectives: [],
392                importedFiles: [
393                    { fileName: "../Observable", pos: 28, end: 41 }
394                ],
395                ambientExternalModules: undefined,
396                isLibFile: false
397            });
398        });
399        it("correctly handles augmentations in external modules - 2", () => {
400            test(`
401            declare module "../Observable" {
402                interface I {}
403            }
404
405            import * as x from "m";
406            `,
407            /*readImportFile*/ true,
408            /*detectJavaScriptImports*/ false,
409            {
410                referencedFiles: [],
411                typeReferenceDirectives: [],
412                libReferenceDirectives: [],
413                importedFiles: [
414                    { fileName: "m", pos: 123, end: 124 },
415                    { fileName: "../Observable", pos: 28, end: 41 }
416                ],
417                ambientExternalModules: undefined,
418                isLibFile: false
419            });
420        });
421        it("correctly handles augmentations in external modules - 3", () => {
422            test(`
423            declare module "../Observable" {
424                interface I {}
425            }
426
427            import m = require("m");
428            `,
429            /*readImportFile*/ true,
430            /*detectJavaScriptImports*/ false,
431            {
432                referencedFiles: [],
433                typeReferenceDirectives: [],
434                libReferenceDirectives: [],
435                importedFiles: [
436                    { fileName: "m", pos: 123, end: 124 },
437                    { fileName: "../Observable", pos: 28, end: 41 }
438                ],
439                ambientExternalModules: undefined,
440                isLibFile: false
441            });
442        });
443        it("correctly handles augmentations in external modules - 4", () => {
444            test(`
445            declare module "../Observable" {
446                interface I {}
447            }
448            namespace N {}
449            export = N;
450            `,
451            /*readImportFile*/ true,
452            /*detectJavaScriptImports*/ false,
453            {
454                referencedFiles: [],
455                typeReferenceDirectives: [],
456                libReferenceDirectives: [],
457                importedFiles: [
458                    { fileName: "../Observable", pos: 28, end: 41 }
459                ],
460                ambientExternalModules: undefined,
461                isLibFile: false
462            });
463        });
464        it("correctly handles augmentations in external modules - 5", () => {
465            test(`
466            declare module "../Observable" {
467                interface I {}
468            }
469            namespace N {}
470            export import IN = N;
471            `,
472            /*readImportFile*/ true,
473            /*detectJavaScriptImports*/ false,
474            {
475                referencedFiles: [],
476                typeReferenceDirectives: [],
477                libReferenceDirectives: [],
478                importedFiles: [
479                    { fileName: "../Observable", pos: 28, end: 41 }
480                ],
481                ambientExternalModules: undefined,
482                isLibFile: false
483            });
484        });
485        it("correctly handles augmentations in external modules - 6", () => {
486            test(`
487            declare module "../Observable" {
488                interface I {}
489            }
490            export let x = 1;
491            `,
492            /*readImportFile*/ true,
493            /*detectJavaScriptImports*/ false,
494            {
495                referencedFiles: [],
496                typeReferenceDirectives: [],
497                libReferenceDirectives: [],
498                importedFiles: [
499                    { fileName: "../Observable", pos: 28, end: 41 }
500                ],
501                ambientExternalModules: undefined,
502                isLibFile: false
503            });
504        });
505        it ("correctly handles augmentations in ambient external modules - 1", () => {
506            test(`
507            declare module "m1" {
508                export * from "m2";
509                declare module "augmentation" {
510                    interface I {}
511                }
512            }
513            `,
514            /*readImportFile*/ true,
515            /*detectJavaScriptImports*/ false,
516            {
517                referencedFiles: [],
518                typeReferenceDirectives: [],
519                libReferenceDirectives: [],
520                importedFiles: [
521                    { fileName: "m2", pos: 65, end: 67 },
522                    { fileName: "augmentation", pos: 102, end: 114 }
523                ],
524                ambientExternalModules: ["m1"],
525                isLibFile: false
526            });
527        });
528        it ("correctly handles augmentations in ambient external modules - 2", () => {
529            test(`
530            namespace M { var x; }
531            import IM = M;
532            declare module "m1" {
533                export * from "m2";
534                declare module "augmentation" {
535                    interface I {}
536                }
537            }
538            `,
539            /*readImportFile*/ true,
540            /*detectJavaScriptImports*/ false,
541            {
542                referencedFiles: [],
543                typeReferenceDirectives: [],
544                libReferenceDirectives: [],
545                importedFiles: [
546                    { fileName: "m2", pos: 127, end: 129 },
547                    { fileName: "augmentation", pos: 164, end: 176 }
548                ],
549                ambientExternalModules: ["m1"],
550                isLibFile: false
551            });
552        });
553        it ("correctly recognizes type reference directives", () => {
554            test(`
555            /// <reference path="a"/>
556            /// <reference types="a1"/>
557            /// <reference path="a2"/>
558            /// <reference types="a3"/>
559            `,
560            /*readImportFile*/ true,
561            /*detectJavaScriptImports*/ false,
562            {
563                referencedFiles: [
564                    { pos: 34, end: 35, fileName: "a" },
565                    { pos: 112, end: 114, fileName: "a2" }
566                ],
567                typeReferenceDirectives: [
568                    { pos: 73, end: 75, fileName: "a1" },
569                    { pos: 152, end: 154, fileName: "a3" }
570                ],
571                libReferenceDirectives: [],
572                importedFiles: [],
573                ambientExternalModules: undefined,
574                isLibFile: false
575            });
576        });
577        it ("correctly recognizes lib reference directives", () => {
578            test(`
579            /// <reference path="a"/>
580            /// <reference lib="a1"/>
581            /// <reference path="a2"/>
582            /// <reference lib="a3"/>
583            `,
584            /*readImportFile*/ true,
585            /*detectJavaScriptImports*/ false,
586            {
587                referencedFiles: [
588                    { pos: 34, end: 35, fileName: "a" },
589                    { pos: 110, end: 112, fileName: "a2" }
590                ],
591                typeReferenceDirectives: [
592                ],
593                libReferenceDirectives: [
594                    { pos: 71, end: 73, fileName: "a1" },
595                    { pos: 148, end: 150, fileName: "a3" }
596                ],
597                importedFiles: [],
598                ambientExternalModules: undefined,
599                isLibFile: false
600            });
601        });
602
603        it("Correctly handles dynamic imports with template literals", () => {
604            test("const m1 = import('mod1');" + "\n" +
605            "const m2 = import(`mod2`);" + "\n" +
606            "Promise.all([import('mod3'), import(`mod4`)]);" + "\n" +
607            "import(/* webpackChunkName: 'module5' */ `mod5`);" + "\n",
608            /*readImportFile*/ true,
609            /*detectJavaScriptImports*/ false,
610            {
611                referencedFiles: [],
612                typeReferenceDirectives: [],
613                libReferenceDirectives: [],
614                importedFiles: [
615                    { fileName: "mod1", pos: 18, end: 22 },
616                    { fileName: "mod2", pos: 45, end: 49 },
617                    { fileName: "mod3", pos: 74, end: 78 },
618                    { fileName: "mod4", pos: 90, end: 94 },
619                    { fileName: "mod5", pos: 142, end: 146 }
620                ],
621                ambientExternalModules: undefined,
622                isLibFile: false
623            });
624        });
625
626        it("Correctly handles require calls with template literals in JS files", () => {
627            test("const m1 = require(`mod1`);" + "\n" +
628            "f(require(`mod2`));" + "\n" +
629            "const a = { x: require(`mod3`) };" + "\n",
630            /*readImportFile*/ true,
631            /*detectJavaScriptImports*/ true,
632            {
633                referencedFiles: [],
634                typeReferenceDirectives: [],
635                libReferenceDirectives: [],
636                importedFiles: [
637                    { fileName: "mod1", pos: 19, end: 23 },
638                    { fileName: "mod2", pos: 38, end: 42 },
639                    { fileName: "mod3", pos: 71, end: 75 }
640                ],
641                ambientExternalModules: undefined,
642                isLibFile: false
643            });
644        });
645
646        it("Correctly handles dependency lists in define(modName, [deplist]) calls with template literals in JS files", () => {
647            test("define(`mod`, [`mod1`, `mod2`], (m1, m2) => {});",
648            /*readImportFile*/ true,
649            /*detectJavaScriptImports*/ true,
650            {
651                referencedFiles: [],
652                typeReferenceDirectives: [],
653                libReferenceDirectives: [],
654                importedFiles: [
655                    { fileName: "mod1", pos: 15, end: 19 },
656                    { fileName: "mod2", pos: 23, end: 27 },
657                ],
658                ambientExternalModules: undefined,
659                isLibFile: false
660            });
661        });
662    });
663});
664