forked from palantir/tslint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
linterTests.ts
116 lines (100 loc) · 3.72 KB
/
linterTests.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* @license
* Copyright 2017 Palantir Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { assert } from "chai";
import * as fs from "fs";
import { createSourceFile, ScriptTarget } from "typescript";
import { DEFAULT_CONFIG } from "../src/configuration";
import { Replacement, RuleFailure } from "../src/language/rule/rule";
import { Linter } from "../src/linter";
import { createTempFile } from "./utils";
class TestLinter extends Linter {
public applyFixesHelper(fileName: string, source: string, ruleFailures: RuleFailure[]) {
return super.applyFixes(fileName, source, ruleFailures);
}
}
const componentDeclaration = (templateUrl: string) =>
`import { Component } from '@angular/component';
@Component({
selector: 'foo-bar',
templateUrl: '${templateUrl}'
})
class SampleComponent {}
`;
const templateDeclaration = `
<div>{{ foo }}</div>
`;
const templateDeclarationFixed = `
<div></div>
`;
const withWarningDeclaration = `
console.log("This line will not pass linting with the default rule set");
`;
describe("Linter", () => {
it("apply fixes to correct files", () => {
const linter = new TestLinter({ fix: true });
const componentFile = createTempFile("ts");
const templateFile = createTempFile("ts");
fs.writeFileSync(componentFile, componentDeclaration(templateFile));
fs.writeFileSync(templateFile, templateDeclaration);
const sourceFile = createSourceFile(
templateFile,
`${templateDeclaration}`,
ScriptTarget.ES2015,
);
const replacement = new Replacement(6, 9, "");
const failure = new RuleFailure(
sourceFile,
6,
15,
"Declaration doesn't exist",
"foo-bar",
replacement,
);
linter.applyFixesHelper(componentFile, componentDeclaration(templateFile), [failure]);
assert.equal(fs.readFileSync(templateFile, "utf-8"), templateDeclarationFixed);
});
it("shows warnings", () => {
const config = DEFAULT_CONFIG;
config.rules.set("no-console", {
ruleArguments: ["log"],
ruleName: "no-console",
ruleSeverity: "warning",
});
const linter = new TestLinter({ fix: false });
const fileToLint = createTempFile("ts");
fs.writeFileSync(fileToLint, withWarningDeclaration);
linter.lint(fileToLint, withWarningDeclaration, config);
const result = linter.getResult();
assert.equal(result.warningCount, 1);
assert.equal(result.errorCount, 0);
});
it("does not show warnings when `quiet` is `true`", () => {
const config = DEFAULT_CONFIG;
config.rules.set("no-console", {
ruleArguments: ["log"],
ruleName: "no-console",
ruleSeverity: "warning",
});
const linter = new TestLinter({ fix: false, quiet: true });
const fileToLint = createTempFile("ts");
fs.writeFileSync(fileToLint, withWarningDeclaration);
linter.lint(fileToLint, withWarningDeclaration, config);
const result = linter.getResult();
assert.equal(result.warningCount, 0);
assert.equal(result.errorCount, 0);
});
});