| // 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:analyzer/src/diagnostic/diagnostic.dart' as diag; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| import '../rule_test_support.dart'; |
| |
| void main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(UnnecessaryStringEscapesTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class UnnecessaryStringEscapesTest extends LintRuleTest { |
| @override |
| String get lintRule => LintNames.unnecessary_string_escapes; |
| |
| test_escapedBackslash() async { |
| await assertNoDiagnostics(r''' |
| var x = '\\'; |
| '''); |
| } |
| |
| test_escapedColon() async { |
| await assertDiagnosticsFromMarkup(r''' |
| var x = '[!\!]:'; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inDoubleQuotes() async { |
| await assertNoDiagnostics(r''' |
| var x = "\""; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inSingleQuotes() async { |
| await assertDiagnosticsFromMarkup(r''' |
| var x = '[!\!]"'; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inSingleQuotes_raw() async { |
| await assertNoDiagnostics(r''' |
| var x = r'\"'; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inThree_inThreeDoubleQuotes() async { |
| await assertNoDiagnostics(r''' |
| var x = """text"\""text"""; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inThreeDoubleQuotes() async { |
| await assertDiagnosticsFromMarkup(r''' |
| var x = """[!\!]"text"""; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inThreeDoubleQuotes_atEnd() async { |
| await assertNoDiagnostics(r''' |
| var x = """text\""""; |
| '''); |
| } |
| |
| test_escapedDoubleQuotes_inThreeSingleQuotes() async { |
| await assertDiagnosticsFromMarkup(r""" |
| var x = '''[!\!]"'''; |
| """); |
| } |
| |
| test_escapedLowerA() async { |
| await assertDiagnosticsFromMarkup(r''' |
| var x = '[!\!]a'; |
| '''); |
| } |
| |
| test_escapedLowerDollar() async { |
| await assertNoDiagnostics(r''' |
| var x = '\$'; |
| '''); |
| } |
| |
| test_escapedLowerN() async { |
| await assertNoDiagnostics(r''' |
| var x = '\n'; |
| '''); |
| } |
| |
| test_escapedLowerR() async { |
| await assertNoDiagnostics(r''' |
| var x = '\r'; |
| '''); |
| } |
| |
| test_escapedLowerT() async { |
| await assertNoDiagnostics(r''' |
| var x = '\t'; |
| '''); |
| } |
| |
| test_escapedSingleQuote_inDoubleQuotes() async { |
| await assertDiagnosticsFromMarkup(r''' |
| var x = "[!\!]'"; |
| '''); |
| } |
| |
| test_escapedSingleQuote_inDoubleQuotes_raw() async { |
| await assertNoDiagnostics(r''' |
| var x = r"\'"; |
| '''); |
| } |
| |
| test_escapedSingleQuote_inSingleQuotes() async { |
| await assertNoDiagnostics(r''' |
| var x = '\''; |
| '''); |
| } |
| |
| test_escapedSingleQuote_inThree_inThreeSingleQuotes() async { |
| await assertNoDiagnostics(r""" |
| var x = '''text'\''text'''; |
| """); |
| } |
| |
| test_escapedSingleQuote_inThreeDoubleQuotes() async { |
| await assertDiagnosticsFromMarkup(r''' |
| var x = """[!\!]'"""; |
| '''); |
| } |
| |
| test_escapedSingleQuote_inThreeSingleQuotes() async { |
| await assertDiagnosticsFromMarkup(r""" |
| var x = '''[!\!]'text'''; |
| """); |
| } |
| |
| test_escapedSingleQuote_inThreeSingleQuotes_atEnd() async { |
| await assertNoDiagnostics(r""" |
| var x = '''text\''''; |
| """); |
| } |
| |
| test_escapedUtfHex() async { |
| await assertNoDiagnostics(r''' |
| var x = '\uFFFF'; |
| '''); |
| } |
| |
| test_escapedXHex() async { |
| await assertNoDiagnostics(r''' |
| var x = '\x00'; |
| '''); |
| } |
| |
| test_moreThanThreeEscapedDoubleQuotes_inThreeDoubleQuotes() async { |
| await assertNoDiagnostics(r''' |
| var x = """text\"\"\"\"\"\"text"""; |
| '''); |
| } |
| |
| test_moreThanThreeEscapedSingleQuote_inThreeSingleQuotes() async { |
| await assertNoDiagnostics(r""" |
| var x = '''text\'\'\'\'\'\'text'''; |
| """); |
| } |
| |
| test_threeEscapedDoubleQuote_inThreeDoubleQuotes() async { |
| await assertNoDiagnostics(r''' |
| var x = """text\"\"\"text"""; |
| '''); |
| } |
| |
| test_threeEscapedSingleQuote_inThreeSingleQuotes() async { |
| await assertNoDiagnostics(r""" |
| var x = '''text\'\'\'text'''; |
| """); |
| } |
| |
| test_unterminatedStringLiteral() async { |
| // Note that putting `''` on the new line is important to get a token |
| // with `'\` with no closing quote. |
| await assertDiagnostics( |
| r''' |
| String unclosedQuote() => '\ |
| ''; |
| ''', |
| [ |
| // Ensure linter does not crash. |
| error(diag.invalidUnicodeEscapeStarted, 27, 1), |
| error(diag.unterminatedStringLiteral, 27, 1), |
| ], |
| ); |
| } |
| } |