]>
git.proxmox.com Git - pve-eslint.git/blob - eslint/tests/lib/rules/utils/fix-tracker.js
2 * @fileoverview Tests for FixTracker.
7 //------------------------------------------------------------------------------
9 //------------------------------------------------------------------------------
11 const assert
= require("chai").assert
,
12 espree
= require("espree"),
13 FixTracker
= require("../../../../lib/rules/utils/fix-tracker"),
14 ruleFixer
= require("../../../../lib/linter/rule-fixer"),
15 { SourceCode
} = require("../../../../lib/source-code"),
16 Traverser
= require("../../../../lib/shared/traverser");
18 //------------------------------------------------------------------------------
20 //------------------------------------------------------------------------------
22 const DEFAULT_CONFIG
= {
31 * Create a SourceCode instance from the given code. Also add parent pointers in
32 * the AST so that parent traversals will work.
33 * @param {string} text The text of the code.
34 * @returns {SourceCode} The SourceCode.
36 function createSourceCode(text
) {
37 const ast
= espree
.parse(text
, DEFAULT_CONFIG
);
39 Traverser
.traverse(ast
, {
45 return new SourceCode(text
, ast
);
48 //------------------------------------------------------------------------------
50 //------------------------------------------------------------------------------
52 describe("FixTracker", () => {
53 describe("replaceTextRange", () => {
54 it("should expand to include an explicitly retained range", () => {
55 const sourceCode
= createSourceCode("var foo = +bar;");
56 const result
= new FixTracker(ruleFixer
, sourceCode
)
58 .replaceTextRange([10, 11], "-");
60 assert
.deepStrictEqual(result
, {
66 it("ignores a retained range that's smaller than the replaced range", () => {
67 const sourceCode
= createSourceCode("abcdefghij");
68 const result
= new FixTracker(ruleFixer
, sourceCode
)
70 .replaceTextRange([4, 8], "123");
72 assert
.deepStrictEqual(result
, {
78 it("allows an unspecified retained range", () => {
79 const sourceCode
= createSourceCode("abcdefghij");
80 const result
= new FixTracker(ruleFixer
, sourceCode
)
81 .replaceTextRange([4, 8], "123");
83 assert
.deepStrictEqual(result
, {
90 describe("remove", () => {
91 it("should expand to include an explicitly retained range", () => {
92 const sourceCode
= createSourceCode("a = b + +c");
93 const result
= new FixTracker(ruleFixer
, sourceCode
)
95 .remove(sourceCode
.ast
.tokens
[4]);
97 assert
.deepStrictEqual(result
, {
104 describe("retainEnclosingFunction", () => {
105 it("handles a normal enclosing function", () => {
106 const sourceCode
= createSourceCode("f = function() { return x; }");
107 const xNode
= sourceCode
.ast
.body
[0].expression
.right
.body
.body
[0].argument
;
108 const result
= new FixTracker(ruleFixer
, sourceCode
)
109 .retainEnclosingFunction(xNode
)
110 .replaceTextRange(xNode
.range
, "y");
112 assert
.deepStrictEqual(result
, {
114 text
: "function() { return y; }"
118 it("handles the case when there is no enclosing function", () => {
119 const sourceCode
= createSourceCode("const a = b;");
120 const bNode
= sourceCode
.ast
.body
[0].declarations
[0].init
;
121 const result
= new FixTracker(ruleFixer
, sourceCode
)
122 .retainEnclosingFunction(bNode
)
123 .replaceTextRange(bNode
.range
, "c");
125 assert
.deepStrictEqual(result
, {
132 describe("retainSurroundingTokens", () => {
133 it("handles a change to a binary operator", () => {
134 const sourceCode
= createSourceCode("const i = j + k;");
135 const plusToken
= sourceCode
.ast
.tokens
[4];
136 const result
= new FixTracker(ruleFixer
, sourceCode
)
137 .retainSurroundingTokens(plusToken
)
138 .replaceTextRange(plusToken
.range
, "*");
140 assert
.deepStrictEqual(result
, {