1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var Lint = require("tslint");
|
4 | var fs = require("fs");
|
5 | var chai = require("chai");
|
6 | var ts = require("typescript");
|
7 | var ErrorTolerantWalker_1 = require("../utils/ErrorTolerantWalker");
|
8 | var TestHelper;
|
9 | (function (TestHelper) {
|
10 | var program;
|
11 | TestHelper.RULES_DIRECTORY = 'dist/src/';
|
12 | TestHelper.FORMATTER_DIRECTORY = 'customFormatters/';
|
13 | TestHelper.FILE_ENCODING = 'utf8';
|
14 | function assertNoViolation(ruleName, inputFileOrScript, useTypeChecker) {
|
15 | if (useTypeChecker === void 0) { useTypeChecker = false; }
|
16 | runRuleAndEnforceAssertions(ruleName, null, inputFileOrScript, [], useTypeChecker);
|
17 | }
|
18 | TestHelper.assertNoViolation = assertNoViolation;
|
19 | function assertNoViolationWithOptions(ruleName, options, inputFileOrScript, useTypeChecker) {
|
20 | if (useTypeChecker === void 0) { useTypeChecker = false; }
|
21 | runRuleAndEnforceAssertions(ruleName, options, inputFileOrScript, [], useTypeChecker);
|
22 | }
|
23 | TestHelper.assertNoViolationWithOptions = assertNoViolationWithOptions;
|
24 | function assertViolationsWithOptions(ruleName, options, inputFileOrScript, expectedFailures, useTypeChecker) {
|
25 | if (useTypeChecker === void 0) { useTypeChecker = false; }
|
26 | runRuleAndEnforceAssertions(ruleName, options, inputFileOrScript, expectedFailures, useTypeChecker);
|
27 | }
|
28 | TestHelper.assertViolationsWithOptions = assertViolationsWithOptions;
|
29 | function assertViolations(ruleName, inputFileOrScript, expectedFailures, useTypeChecker) {
|
30 | if (useTypeChecker === void 0) { useTypeChecker = false; }
|
31 | runRuleAndEnforceAssertions(ruleName, null, inputFileOrScript, expectedFailures, useTypeChecker);
|
32 | }
|
33 | TestHelper.assertViolations = assertViolations;
|
34 | function assertViolationsWithTypeChecker(ruleName, inputFileOrScript, expectedFailures) {
|
35 | runRuleAndEnforceAssertions(ruleName, null, inputFileOrScript, expectedFailures, true);
|
36 | }
|
37 | TestHelper.assertViolationsWithTypeChecker = assertViolationsWithTypeChecker;
|
38 | function runRule(ruleName, userOptions, inputFileOrScript, useTypeChecker) {
|
39 | if (useTypeChecker === void 0) { useTypeChecker = false; }
|
40 | var configuration = {
|
41 | extends: [],
|
42 | jsRules: new Map(),
|
43 | linterOptions: {},
|
44 | rules: new Map(),
|
45 | rulesDirectory: []
|
46 | };
|
47 | if (userOptions != null && userOptions.length > 0) {
|
48 | configuration.rules.set(ruleName, {
|
49 | ruleName: ruleName,
|
50 | ruleArguments: userOptions
|
51 | });
|
52 | }
|
53 | else {
|
54 | configuration.rules.set(ruleName, {
|
55 | ruleName: ruleName
|
56 | });
|
57 | }
|
58 | var options = {
|
59 | formatter: 'json',
|
60 | fix: false,
|
61 | rulesDirectory: TestHelper.RULES_DIRECTORY,
|
62 | formattersDirectory: TestHelper.FORMATTER_DIRECTORY
|
63 | };
|
64 | var debug = ErrorTolerantWalker_1.ErrorTolerantWalker.DEBUG;
|
65 | ErrorTolerantWalker_1.ErrorTolerantWalker.DEBUG = true;
|
66 | var result;
|
67 | if (useTypeChecker) {
|
68 | program = ts.createProgram([inputFileOrScript], {});
|
69 | }
|
70 | if (inputFileOrScript.match(/.*\.ts(x)?$/)) {
|
71 | var contents = fs.readFileSync(inputFileOrScript, TestHelper.FILE_ENCODING);
|
72 | var linter = new Lint.Linter(options, useTypeChecker ? program : undefined);
|
73 | linter.lint(inputFileOrScript, contents, configuration);
|
74 | result = linter.getResult();
|
75 | }
|
76 | else {
|
77 | var filename = void 0;
|
78 | if (inputFileOrScript.indexOf('import React') > -1) {
|
79 | filename = 'file.tsx';
|
80 | }
|
81 | else {
|
82 | filename = 'file.ts';
|
83 | }
|
84 | var linter = new Lint.Linter(options, useTypeChecker ? program : undefined);
|
85 | linter.lint(filename, inputFileOrScript, configuration);
|
86 | result = linter.getResult();
|
87 | }
|
88 | ErrorTolerantWalker_1.ErrorTolerantWalker.DEBUG = debug;
|
89 | return result;
|
90 | }
|
91 | TestHelper.runRule = runRule;
|
92 | function runRuleAndEnforceAssertions(ruleName, userOptions, inputFileOrScript, expectedFailures, useTypeChecker) {
|
93 | if (useTypeChecker === void 0) { useTypeChecker = false; }
|
94 | var lintResult = runRule(ruleName, userOptions, inputFileOrScript, useTypeChecker);
|
95 | var actualFailures = JSON.parse(lintResult.output);
|
96 | actualFailures.forEach(function (actual) {
|
97 | delete actual.startPosition.position;
|
98 | delete actual.endPosition;
|
99 | actual.startPosition.line = actual.startPosition.line + 1;
|
100 | actual.startPosition.character = actual.startPosition.character + 1;
|
101 | });
|
102 | expectedFailures.forEach(function (expected) {
|
103 | delete expected.startPosition.position;
|
104 | delete expected.endPosition;
|
105 | if (!expected.ruleSeverity) {
|
106 | expected.ruleSeverity = 'ERROR';
|
107 | }
|
108 | });
|
109 | var errorMessage = "Wrong # of failures: \n" + JSON.stringify(actualFailures, null, 2);
|
110 | chai.assert.equal(actualFailures.length, expectedFailures.length, errorMessage);
|
111 | expectedFailures.forEach(function (expected, index) {
|
112 | var actual = actualFailures[index];
|
113 | chai.assert.deepEqual(actual, expected);
|
114 | });
|
115 | }
|
116 | })(TestHelper = exports.TestHelper || (exports.TestHelper = {}));
|
117 |
|
\ | No newline at end of file |