Skip to content

Commit bbd9ea4

Browse files
solid-illiaaihistovIllia Aihistov
andauthored
refactor: use AutoTestLintOffsets in remaining AnalysisRuleTest suites (#311)
* refactor: use AutoTestLintOffsets in remaining AnalysisRuleTest suites * refactor: revert test files movement back to test/lints --------- Co-authored-by: Illia Aihistov <illia.aihistov-us@solid.software>
1 parent 824547f commit bbd9ea4

25 files changed

Lines changed: 627 additions & 973 deletions

lib/main.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@ import 'package:solid_lints/src/lints/avoid_final_with_getter/fixes/avoid_final_
77
import 'package:solid_lints/src/lints/avoid_global_state/avoid_global_state_rule.dart';
88
import 'package:solid_lints/src/lints/avoid_non_null_assertion/avoid_non_null_assertion_rule.dart';
99
import 'package:solid_lints/src/lints/avoid_returning_widgets/avoid_returning_widgets_rule.dart';
10+
import 'package:solid_lints/src/lints/avoid_unnecessary_return_variable/avoid_unnecessary_return_variable_rule.dart';
11+
import 'package:solid_lints/src/lints/avoid_unnecessary_setstate/avoid_unnecessary_set_state_rule.dart';
1012
import 'package:solid_lints/src/lints/avoid_unnecessary_type_assertions/avoid_unnecessary_type_assertions_rule.dart';
1113
import 'package:solid_lints/src/lints/avoid_unnecessary_type_assertions/fixes/avoid_unnecessary_type_assertions_fix.dart';
14+
import 'package:solid_lints/src/lints/avoid_unrelated_type_assertions/avoid_unrelated_type_assertions_rule.dart';
1215
import 'package:solid_lints/src/lints/avoid_unused_parameters/avoid_unused_parameters_rule.dart';
1316
import 'package:solid_lints/src/lints/cyclomatic_complexity/cyclomatic_complexity_rule.dart';
1417
import 'package:solid_lints/src/lints/double_literal_format/double_literal_format_rule.dart';
@@ -17,11 +20,14 @@ import 'package:solid_lints/src/lints/function_lines_of_code/function_lines_of_c
1720
import 'package:solid_lints/src/lints/member_ordering/member_ordering_rule.dart';
1821
import 'package:solid_lints/src/lints/named_parameters_ordering/fixes/named_parameters_ordering_fix.dart';
1922
import 'package:solid_lints/src/lints/named_parameters_ordering/named_parameters_ordering_rule.dart';
23+
import 'package:solid_lints/src/lints/newline_before_return/newline_before_return_rule.dart';
2024
import 'package:solid_lints/src/lints/no_empty_block/no_empty_block_rule.dart';
25+
import 'package:solid_lints/src/lints/no_equal_then_else/no_equal_then_else_rule.dart';
2126
import 'package:solid_lints/src/lints/no_magic_number/no_magic_number_rule.dart';
2227
import 'package:solid_lints/src/lints/number_of_parameters/number_of_parameters_rule.dart';
2328
import 'package:solid_lints/src/lints/prefer_conditional_expressions/fixes/prefer_conditional_expressions_fix.dart';
2429
import 'package:solid_lints/src/lints/prefer_conditional_expressions/prefer_conditional_expressions_rule.dart';
30+
import 'package:solid_lints/src/lints/prefer_early_return/prefer_early_return_rule.dart';
2531
import 'package:solid_lints/src/lints/prefer_first/fixes/prefer_first_fix.dart';
2632
import 'package:solid_lints/src/lints/prefer_first/prefer_first_rule.dart';
2733
import 'package:solid_lints/src/lints/prefer_last/fixes/prefer_last_fix.dart';
@@ -81,6 +87,12 @@ class SolidLintsPlugin extends Plugin {
8187
// TODO: Add more lint rules and use analysisLoader
8288
// for rules that need parameters
8389
// For example: `CyclomaticComplexityRule(analysisLoader)`
90+
AvoidUnnecessaryReturnVariableRule(),
91+
AvoidUnnecessarySetStateRule(),
92+
AvoidUnrelatedTypeAssertionsRule(),
93+
NewlineBeforeReturnRule(),
94+
NoEqualThenElseRule(),
95+
PreferEarlyReturnRule(),
8496
];
8597

8698
for (final lintRule in lintRules) {

test/lints/auto_test_lint_offsets.dart

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
22
import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
33
import 'package:collection/collection.dart';
44

5+
import '../src/utils/auto_lint_data.dart';
6+
57
mixin AutoTestLintOffsets on AnalysisRuleTest {
68
int _nextPlaceholderId = 0;
7-
final Map<String, String> _placeholderToCode = {};
9+
final Map<String, AutoLintData> _placeholderToData = {};
810

911
Future<void> assertAutoDiagnostics(String source) async {
1012
try {
11-
final placeholders = _placeholderToCode.entries
13+
final placeholders = _placeholderToData.entries
1214
.map(
1315
(entry) => (
1416
placeholder: entry.key,
15-
code: entry.value,
17+
data: entry.value,
1618
index: source.indexOf(entry.key),
1719
),
1820
)
@@ -29,27 +31,46 @@ mixin AutoTestLintOffsets on AnalysisRuleTest {
2931
}
3032

3133
expectedDiagnostics.add(
32-
lint(match.index + replacedPlaceholdersDelta, match.code.length),
34+
lint(
35+
match.index + replacedPlaceholdersDelta,
36+
match.data.code.length,
37+
correctionContains: match.data.correctionContains,
38+
messageContainsAll: match.data.messageContainsAll,
39+
name: match.data.name,
40+
contextMessages: match.data.contextMessages,
41+
),
3342
);
3443
replacedPlaceholdersDelta +=
35-
match.code.length - match.placeholder.length;
44+
match.data.code.length - match.placeholder.length;
3645
}
3746

38-
final resolvedSource = _placeholderToCode.entries.fold(
47+
final resolvedSource = _placeholderToData.entries.fold(
3948
source,
40-
(resolved, entry) => resolved.replaceFirst(entry.key, entry.value),
49+
(resolved, entry) => resolved.replaceFirst(entry.key, entry.value.code),
4150
);
4251

4352
await assertDiagnostics(resolvedSource, expectedDiagnostics);
4453
} finally {
4554
_nextPlaceholderId = 0;
46-
_placeholderToCode.clear();
55+
_placeholderToData.clear();
4756
}
4857
}
4958

50-
String expectLint(String code) {
59+
String expectLint(
60+
String code, {
61+
Pattern? correctionContains,
62+
List<Pattern> messageContainsAll = const [],
63+
String? name,
64+
List<ExpectedContextMessage>? contextMessages,
65+
}) {
5166
final placeholder = '__AUTO_TEST_LINT_${_nextPlaceholderId++}__';
52-
_placeholderToCode[placeholder] = code;
67+
_placeholderToData[placeholder] = AutoLintData(
68+
code: code,
69+
correctionContains: correctionContains,
70+
messageContainsAll: messageContainsAll,
71+
name: name,
72+
contextMessages: contextMessages,
73+
);
5374
return placeholder;
5475
}
5576
}

test/lints/avoid_debug_print_in_release/avoid_debug_print_in_release_rule_test.dart

Lines changed: 45 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ import 'package:analyzer_testing/analysis_rule/analysis_rule.dart';
22
import 'package:solid_lints/src/lints/avoid_debug_print_in_release/avoid_debug_print_in_release_rule.dart';
33
import 'package:test_reflective_loader/test_reflective_loader.dart';
44

5+
import '../auto_test_lint_offsets.dart';
6+
57
void main() {
68
defineReflectiveSuite(() {
79
defineReflectiveTests(AvoidDebugPrintInReleaseRuleTest);
810
});
911
}
1012

1113
@reflectiveTest
12-
class AvoidDebugPrintInReleaseRuleTest extends AnalysisRuleTest {
14+
class AvoidDebugPrintInReleaseRuleTest extends AnalysisRuleTest
15+
with AutoTestLintOffsets {
1316
@override
1417
void setUp() {
1518
final flutter = newPackage('flutter');
@@ -33,154 +36,121 @@ export 'package:flutter/foundation.dart';
3336
super.setUp();
3437
}
3538

36-
@override
37-
String get analysisRule => AvoidDebugPrintInReleaseRule.lintName;
38-
39-
void test_reports_debug_print_with_package_import() async {
40-
await assertDiagnostics(
41-
r'''
39+
Future<void> test_reports_debug_print_with_package_import() async {
40+
await assertAutoDiagnostics('''
4241
import 'package:flutter/foundation.dart';
4342
4443
void test() {
45-
debugPrint('This should be flagged');
44+
${expectLint('debugPrint')}('This should be flagged');
4645
}
47-
''',
48-
[lint(59, 10)],
49-
);
46+
''');
5047
}
5148

52-
void test_reports_aliased_debug_print_from_package() async {
53-
await assertDiagnostics(
54-
r'''
49+
Future<void> test_reports_aliased_debug_print_from_package() async {
50+
await assertAutoDiagnostics('''
5551
import 'package:flutter/foundation.dart' as f;
5652
5753
void test() {
58-
f.debugPrint('This should be flagged');
54+
f.${expectLint('debugPrint')}('This should be flagged');
5955
}
60-
''',
61-
[lint(66, 10)],
62-
);
56+
''');
6357
}
6458

65-
void test_reports_debug_print_as_callback() async {
66-
await assertDiagnostics(
67-
r'''
59+
Future<void> test_reports_debug_print_as_callback() async {
60+
await assertAutoDiagnostics('''
6861
import 'package:flutter/foundation.dart';
6962
7063
void test() {
71-
['a'].forEach(debugPrint);
64+
['a'].forEach(${expectLint('debugPrint')});
7265
}
73-
''',
74-
[lint(73, 10)],
75-
);
66+
''');
7667
}
7768

78-
void test_reports_inside_kReleaseMode_guard() async {
79-
await assertDiagnostics(
80-
r'''
69+
Future<void> test_reports_inside_kReleaseMode_guard() async {
70+
await assertAutoDiagnostics('''
8171
import 'package:flutter/foundation.dart';
8272
8373
void test() {
8474
if (kReleaseMode) {
85-
debugPrint('This should be flagged');
75+
${expectLint('debugPrint')}('This should be flagged');
8676
}
8777
}
88-
''',
89-
[lint(83, 10)],
90-
);
78+
''');
9179
}
9280

93-
void test_reports_inside_not_kDebugMode_guard() async {
94-
await assertDiagnostics(
95-
r'''
81+
Future<void> test_reports_inside_not_kDebugMode_guard() async {
82+
await assertAutoDiagnostics('''
9683
import 'package:flutter/foundation.dart';
9784
9885
void test() {
9986
if (!kDebugMode) {
100-
debugPrint('Should still be flagged');
87+
${expectLint('debugPrint')}('Should still be flagged');
10188
}
10289
}
103-
''',
104-
[lint(82, 10)],
105-
);
90+
''');
10691
}
10792

108-
void test_does_not_report_inside_not_kReleaseMode() async {
109-
await assertNoDiagnostics(
110-
r'''
93+
Future<void> test_does_not_report_inside_not_kReleaseMode() async {
94+
await assertNoDiagnostics(r'''
11195
import 'package:flutter/foundation.dart';
11296
11397
void test() {
11498
if (!kReleaseMode) {
11599
debugPrint('Safe');
116100
}
117101
}
118-
''',
119-
);
102+
''');
120103
}
121104

122-
void test_does_not_report_inside_kDebugMode() async {
123-
await assertNoDiagnostics(
124-
r'''
105+
Future<void> test_does_not_report_inside_kDebugMode() async {
106+
await assertNoDiagnostics(r'''
125107
import 'package:flutter/foundation.dart';
126108
127109
void test() {
128110
if (kDebugMode) {
129111
debugPrint('Safe');
130112
}
131113
}
132-
''',
133-
);
114+
''');
134115
}
135116

136-
void test_no_report_when_debugPrint_is_not_from_foundation() async {
137-
await assertNoDiagnostics(
138-
r'''
117+
Future<void> test_no_report_when_debugPrint_is_not_from_foundation() async {
118+
await assertNoDiagnostics(r'''
139119
void debugPrint(String message) {}
140120
141121
void test() {
142122
debugPrint('Not a flutter call');
143123
}
144-
''',
145-
);
124+
''');
146125
}
147126

148-
void test_reports_when_imported_via_material() async {
149-
await assertDiagnostics(
150-
r'''
127+
Future<void> test_reports_when_imported_via_material() async {
128+
await assertAutoDiagnostics('''
151129
import 'package:flutter/material.dart';
152130
153131
void test() {
154-
debugPrint('Flagged via material');
132+
${expectLint('debugPrint')}('Flagged via material');
155133
}
156-
''',
157-
[lint(57, 10)],
158-
);
134+
''');
159135
}
160136

161-
void test_reports_when_imported_via_cupertino() async {
162-
await assertDiagnostics(
163-
r'''
137+
Future<void> test_reports_when_imported_via_cupertino() async {
138+
await assertAutoDiagnostics('''
164139
import 'package:flutter/cupertino.dart';
165140
166141
void test() {
167-
debugPrint('Flagged via cupertino');
142+
${expectLint('debugPrint')}('Flagged via cupertino');
168143
}
169-
''',
170-
[lint(58, 10)],
171-
);
144+
''');
172145
}
173146

174-
void test_reports_debug_print_call_method() async {
175-
await assertDiagnostics(
176-
r'''
147+
Future<void> test_reports_debug_print_call_method() async {
148+
await assertAutoDiagnostics('''
177149
import 'package:flutter/foundation.dart';
178150
179151
void test() {
180-
debugPrint.call('This should be flagged');
152+
${expectLint('debugPrint')}.call('This should be flagged');
181153
}
182-
''',
183-
[lint(59, 10)],
184-
);
154+
''');
185155
}
186156
}

0 commit comments

Comments
 (0)