UNPKG

5.75 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var fs = require("fs");
4var typescript_1 = require("typescript");
5var helpers = require("../util/helpers");
6var loggerDiagnostics = require("../logger/logger-diagnostics");
7var tsLogger = require("../logger/logger-typescript");
8var tsLintLogger = require("../logger/logger-tslint");
9var linter = require("./lint-factory");
10var utils = require("./lint-utils");
11describe('lint utils', function () {
12 describe('lintFile()', function () {
13 it('should return lint details', function () {
14 var filePath = 'test.ts';
15 var fileContent = "\n export const foo = 'bar';\n ";
16 var context = {
17 rootDir: ''
18 };
19 var mockLintResult = {
20 errorCount: 0,
21 warningCount: 0,
22 failures: [],
23 fixes: [],
24 format: '',
25 output: ''
26 };
27 spyOn(linter, linter.lint.name).and.returnValue(mockLintResult);
28 spyOn(linter, linter.createProgram.name).and.returnValue({});
29 spyOn(linter, linter.createLinter.name).and.returnValue({});
30 // Mock the file read
31 spyOn(helpers, helpers.readFileAsync.name).and.returnValue(Promise.resolve(fileContent));
32 spyOn(fs, 'openSync').and.returnValue(null);
33 spyOn(fs, 'readSync').and.returnValue(null);
34 spyOn(fs, 'closeSync').and.returnValue(null);
35 var mockProgram = linter.createProgram(context, '');
36 var mockLinter = linter.createLinter(context, mockProgram);
37 var mockConfig = {};
38 return utils.lintFile(mockLinter, mockConfig, filePath)
39 .then(function () {
40 expect(linter.lint)
41 .toHaveBeenCalledWith(mockLinter, mockConfig, filePath, fileContent);
42 });
43 });
44 });
45 describe('processTypeCheckDiagnostics()', function () {
46 it('should not throw an error when there are no files with errors or warnings', function () {
47 utils.processTypeCheckDiagnostics({}, []);
48 });
49 it('should throw an error when one or more file has failures', function () {
50 var knownError = new Error('Should never get here');
51 var results = [
52 {
53 file: {},
54 start: 0,
55 length: 10,
56 messageText: 'Something failed',
57 category: typescript_1.DiagnosticCategory.Warning,
58 code: 100
59 }
60 ];
61 spyOn(tsLogger, tsLogger.runTypeScriptDiagnostics.name).and.returnValue(null);
62 spyOn(loggerDiagnostics, loggerDiagnostics.printDiagnostics.name).and.returnValue(null);
63 try {
64 utils.processTypeCheckDiagnostics({}, results);
65 throw knownError;
66 }
67 catch (e) {
68 expect(loggerDiagnostics.printDiagnostics).toHaveBeenCalledTimes(1);
69 expect(e).not.toEqual(knownError);
70 }
71 });
72 });
73 describe('processLintResult()', function () {
74 it('should not throw an error when there are no files with errors or warnings', function () {
75 utils.processLintResult({}, {
76 errorCount: 0,
77 warningCount: 0,
78 failures: [],
79 fixes: [],
80 format: '',
81 output: ''
82 });
83 });
84 it('should throw an error when one or more file has failures', function () {
85 var knownError = new Error('Should never get here');
86 var result = {
87 errorCount: 1,
88 warningCount: 0,
89 failures: [
90 {
91 getFileName: function () {
92 return 'test.ts';
93 }
94 }
95 ],
96 fixes: [],
97 format: '',
98 output: ''
99 };
100 spyOn(tsLintLogger, tsLintLogger.runTsLintDiagnostics.name).and.returnValue(null);
101 spyOn(loggerDiagnostics, loggerDiagnostics.printDiagnostics.name).and.returnValue(null);
102 try {
103 utils.processLintResult({}, result);
104 throw knownError;
105 }
106 catch (ex) {
107 expect(loggerDiagnostics.printDiagnostics).toHaveBeenCalledTimes(1);
108 expect(ex).not.toEqual(knownError);
109 }
110 });
111 });
112 describe('generateErrorMessageForFiles()', function () {
113 it('should generate a string from an array of files', function () {
114 expect(utils.generateErrorMessageForFiles(['test_one.ts', 'test_two.ts'], 'Just testing:'))
115 .toEqual('Just testing:\ntest_one.ts\ntest_two.ts');
116 });
117 });
118 describe('getFileNames()', function () {
119 it('should retrieve file names from an array of RuleFailure objects', function () {
120 var ruleFailures = [
121 {
122 getFileName: function () {
123 return '/User/john/test.ts';
124 }
125 }
126 ];
127 var fileNames = utils.getFileNames({ rootDir: '/User/john' }, ruleFailures);
128 expect(fileNames)
129 .toEqual(['test.ts']);
130 });
131 });
132 describe('removeDuplicateFileNames()', function () {
133 it('should remove duplicate string entries in arrays', function () {
134 expect(utils.removeDuplicateFileNames(['test.ts', 'test.ts']))
135 .toEqual(['test.ts']);
136 });
137 });
138});