/
no-extraneous-class.test.ts
148 lines (143 loc) · 2.62 KB
/
no-extraneous-class.test.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
import rule from '../../src/rules/no-extraneous-class';
import { RuleTester } from '../RuleTester';
const empty = {
messageId: 'empty' as const,
};
const onlyStatic = {
messageId: 'onlyStatic' as const,
};
const onlyConstructor = {
messageId: 'onlyConstructor' as const,
};
const ruleTester = new RuleTester({
parser: '@typescript-eslint/parser',
});
ruleTester.run('no-extraneous-class', rule, {
valid: [
`
class Foo {
public prop = 1;
constructor() {}
}
`,
`
export class CClass extends BaseClass {
public static helper(): void {}
private static privateHelper(): boolean {
return true;
}
constructor() {}
}
`,
`
class Foo {
constructor(
public bar: string
) {}
}
`,
{
code: 'class Foo {}',
options: [{ allowEmpty: true }],
},
{
code: `
class Foo {
constructor() {}
}
`,
options: [{ allowConstructorOnly: true }],
},
{
code: `
export class Bar {
public static helper(): void {}
private static privateHelper(): boolean {
return true;
}
}
`,
options: [{ allowStaticOnly: true }],
},
// https://github.com/typescript-eslint/typescript-eslint/issues/170
'export default class { hello() { return "I am foo!"; } }',
{
code: `
@FooDecorator
class Foo {}
`,
options: [{ allowWithDecorator: true }],
},
],
invalid: [
{
code: 'class Foo {}',
errors: [empty],
},
{
code: `
class Foo {
public prop = 1;
constructor() {
class Bar {
static PROP = 2;
}
}
}
export class Bar {
public static helper(): void {}
private static privateHelper(): boolean {
return true;
}
}
`,
errors: [onlyStatic, onlyStatic],
},
{
code: `
class Foo {
constructor() {}
}
`,
errors: [onlyConstructor],
},
{
code: `
export class AClass {
public static helper(): void {}
private static privateHelper(): boolean {
return true;
}
constructor() {
class nestedClass {
}
}
}
`,
errors: [onlyStatic, empty],
},
{
// https://github.com/typescript-eslint/typescript-eslint/issues/170
code: 'export default class { static hello() {} }',
errors: [
{
...onlyStatic,
type: AST_NODE_TYPES.ClassDeclaration,
},
],
},
{
code: `
@FooDecorator
class Foo {}
`,
options: [{ allowWithDecorator: false }],
errors: [
{
messageId: 'empty',
},
],
},
],
});