UNPKG

5.64 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var Lint = require("tslint");
4var fs = require("fs");
5var chai = require("chai");
6var ts = require("typescript");
7var ErrorTolerantWalker_1 = require("../utils/ErrorTolerantWalker");
8var 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//# sourceMappingURL=TestHelper.js.map
\No newline at end of file