diff --git a/test/rules/all.dart b/test/rules/all.dart index 7c4be803b..8b87d6328 100644 --- a/test/rules/all.dart +++ b/test/rules/all.dart @@ -67,6 +67,8 @@ import 'hash_and_equals_test.dart' as hash_and_equals; import 'implicit_reopen_test.dart' as implicit_reopen; import 'invalid_case_patterns_test.dart' as invalid_case_patterns; import 'join_return_with_assignment_test.dart' as join_return_with_assignment; +import 'leading_newlines_in_multiline_strings_test.dart' + as leading_newlines_in_multiline_strings; import 'library_annotations_test.dart' as library_annotations; import 'library_names_test.dart' as library_names; import 'library_private_types_in_public_api_test.dart' @@ -265,6 +267,7 @@ void main() { implicit_reopen.main(); invalid_case_patterns.main(); join_return_with_assignment.main(); + leading_newlines_in_multiline_strings.main(); library_annotations.main(); library_names.main(); library_private_types_in_public_api.main(); diff --git a/test/rules/leading_newlines_in_multiline_strings_test.dart b/test/rules/leading_newlines_in_multiline_strings_test.dart new file mode 100644 index 000000000..7070fad2d --- /dev/null +++ b/test/rules/leading_newlines_in_multiline_strings_test.dart @@ -0,0 +1,85 @@ +// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:test_reflective_loader/test_reflective_loader.dart'; + +import '../rule_test_support.dart'; + +main() { + defineReflectiveSuite(() { + defineReflectiveTests(LeadingNewlinesInMultilineStringsTest); + }); +} + +@reflectiveTest +class LeadingNewlinesInMultilineStringsTest extends LintRuleTest { + @override + String get lintRule => 'leading_newlines_in_multiline_strings'; + + test_emptyString() async { + await assertNoDiagnostics(r""" +var x = ''''''; +"""); + } + + test_leadingNewline() async { + await assertNoDiagnostics(r""" +var x = ''' +this is a multiline string'''; +"""); + } + + test_leadingNewline_withInterpolation() async { + await assertNoDiagnostics(r""" +var a = 'a'; +var x = ''' +this is a multiline string $a'''; +"""); + } + + test_noNewline() async { + await assertNoDiagnostics(r""" +var x = '''this is a multiline string'''; +"""); + } + + test_noNewline_doubleQuotes() async { + await assertNoDiagnostics(r''' +var x = """uses double quotes"""; +'''); + } + + test_noNewline_interpolation() async { + await assertNoDiagnostics(r""" +var a = 'a'; +var x = '''$a'''; +"""); + } + + test_noNewline_withInterpolation() async { + await assertNoDiagnostics(r""" +var a = 'a'; +var x = '''this is a multiline string $a'''; +"""); + } + + test_textBeforeNewline() async { + await assertDiagnostics(r""" +var x = '''this + is a multiline string'''; +""", [ + lint(8, 33), + ]); + } + + test_textBeforeNewline_withInterpolation() async { + await assertDiagnostics(r""" +var a = 'a'; +var x = '''this + is a multiline string$a'''; +""", [ + lint(21, 35), + ]); + } +} diff --git a/test_data/rules/leading_newlines_in_multiline_strings.dart b/test_data/rules/leading_newlines_in_multiline_strings.dart deleted file mode 100644 index 860d13640..000000000 --- a/test_data/rules/leading_newlines_in_multiline_strings.dart +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -// test w/ `dart test -N leading_newlines_in_multiline_strings` - -f(o) { - f(''''''); // OK - f('''this is a multiline string'''); // OK - f('''$o'''); // OK - f("""uses double quotes"""); // OK - // OK - f(''' -this is a multiline string'''); - // LINT [+1] - f('''this - is a multiline string'''); - - f('''this is a multiline string $f'''); // OK - // OK - f(''' -this is a multiline string $f'''); - // LINT [+1] - f('''this - is a multiline string$f'''); -}