use raw strings to avoid escaping (#50322)
This commit is contained in:
parent
8735ab1e35
commit
b953c3e5a8
@ -49,7 +49,7 @@ void main() {
|
|||||||
'test/analyze-test-input/root/packages/foo/deprecation.dart:41: Deprecation notice does not match required pattern.\n'
|
'test/analyze-test-input/root/packages/foo/deprecation.dart:41: Deprecation notice does not match required pattern.\n'
|
||||||
'test/analyze-test-input/root/packages/foo/deprecation.dart:48: End of deprecation notice does not match required pattern.\n'
|
'test/analyze-test-input/root/packages/foo/deprecation.dart:48: End of deprecation notice does not match required pattern.\n'
|
||||||
'test/analyze-test-input/root/packages/foo/deprecation.dart:51: Unexpected deprecation notice indent.\n'
|
'test/analyze-test-input/root/packages/foo/deprecation.dart:51: Unexpected deprecation notice indent.\n'
|
||||||
.replaceAll('/', Platform.isWindows ? '\\' : '/')
|
.replaceAll('/', Platform.isWindows ? r'\' : '/')
|
||||||
)
|
)
|
||||||
+
|
+
|
||||||
'See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes\n'
|
'See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes\n'
|
||||||
@ -65,7 +65,7 @@ void main() {
|
|||||||
(
|
(
|
||||||
'The following 1 file does not have the right license header:\n'
|
'The following 1 file does not have the right license header:\n'
|
||||||
'test/analyze-test-input/root/packages/foo/foo.dart\n'
|
'test/analyze-test-input/root/packages/foo/foo.dart\n'
|
||||||
.replaceAll('/', Platform.isWindows ? '\\' : '/')
|
.replaceAll('/', Platform.isWindows ? r'\' : '/')
|
||||||
)
|
)
|
||||||
+
|
+
|
||||||
'The expected license header is:\n'
|
'The expected license header is:\n'
|
||||||
@ -85,7 +85,7 @@ void main() {
|
|||||||
(
|
(
|
||||||
'test/analyze-test-input/root/packages/foo/spaces.txt:5: trailing U+0020 space character\n'
|
'test/analyze-test-input/root/packages/foo/spaces.txt:5: trailing U+0020 space character\n'
|
||||||
'test/analyze-test-input/root/packages/foo/spaces.txt:9: trailing blank line\n'
|
'test/analyze-test-input/root/packages/foo/spaces.txt:9: trailing blank line\n'
|
||||||
.replaceAll('/', Platform.isWindows ? '\\' : '/')
|
.replaceAll('/', Platform.isWindows ? r'\' : '/')
|
||||||
)
|
)
|
||||||
+
|
+
|
||||||
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
|
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
|
||||||
|
@ -73,7 +73,7 @@ Future<void> main() async {
|
|||||||
|
|
||||||
section('Override settings.gradle V2');
|
section('Override settings.gradle V2');
|
||||||
|
|
||||||
const String deprecatedFileContentV2 = '''
|
const String deprecatedFileContentV2 = r'''
|
||||||
include ':app'
|
include ':app'
|
||||||
|
|
||||||
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
|
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
|
||||||
@ -86,8 +86,8 @@ if (pluginsFile.exists()) {
|
|||||||
|
|
||||||
plugins.each { name, path ->
|
plugins.each { name, path ->
|
||||||
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
|
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
|
||||||
include ":\$name"
|
include ":$name"
|
||||||
project(":\$name").projectDir = pluginDirectory
|
project(":$name").projectDir = pluginDirectory
|
||||||
}
|
}
|
||||||
''';
|
''';
|
||||||
settingsGradle.writeAsStringSync(deprecatedFileContentV2, flush: true);
|
settingsGradle.writeAsStringSync(deprecatedFileContentV2, flush: true);
|
||||||
|
@ -588,7 +588,7 @@ String extractCloudAuthTokenArg(List<String> rawArgs) {
|
|||||||
|
|
||||||
final RegExp _obsRegExp =
|
final RegExp _obsRegExp =
|
||||||
RegExp('An Observatory debugger .* is available at: ');
|
RegExp('An Observatory debugger .* is available at: ');
|
||||||
final RegExp _obsPortRegExp = RegExp('(\\S+:(\\d+)/\\S*)\$');
|
final RegExp _obsPortRegExp = RegExp(r'(\S+:(\d+)/\S*)$');
|
||||||
final RegExp _obsUriRegExp = RegExp(r'((http|//)[a-zA-Z0-9:/=_\-\.\[\]]+)');
|
final RegExp _obsUriRegExp = RegExp(r'((http|//)[a-zA-Z0-9:/=_\-\.\[\]]+)');
|
||||||
|
|
||||||
/// Tries to extract a port from the string.
|
/// Tries to extract a port from the string.
|
||||||
|
@ -777,7 +777,7 @@ class ListStatistics {
|
|||||||
|
|
||||||
class _UnzipListEntry {
|
class _UnzipListEntry {
|
||||||
factory _UnzipListEntry.fromLine(String line) {
|
factory _UnzipListEntry.fromLine(String line) {
|
||||||
final List<String> data = line.trim().split(RegExp('\\s+'));
|
final List<String> data = line.trim().split(RegExp(r'\s+'));
|
||||||
assert(data.length == 8);
|
assert(data.length == 8);
|
||||||
return _UnzipListEntry._(
|
return _UnzipListEntry._(
|
||||||
uncompressedSize: int.parse(data[0]),
|
uncompressedSize: int.parse(data[0]),
|
||||||
|
@ -64,7 +64,7 @@ main() {
|
|||||||
test('generates application snippets', () async {
|
test('generates application snippets', () async {
|
||||||
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
..writeAsStringSync('''
|
..writeAsStringSync(r'''
|
||||||
A description of the snippet.
|
A description of the snippet.
|
||||||
|
|
||||||
On several lines.
|
On several lines.
|
||||||
@ -75,7 +75,7 @@ const String name = 'snippet';
|
|||||||
|
|
||||||
```dart
|
```dart
|
||||||
void main() {
|
void main() {
|
||||||
print('The actual \$name.');
|
print('The actual $name.');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
''');
|
''');
|
||||||
@ -93,7 +93,7 @@ void main() {
|
|||||||
);
|
);
|
||||||
expect(html, contains('<div>HTML Bits</div>'));
|
expect(html, contains('<div>HTML Bits</div>'));
|
||||||
expect(html, contains('<div>More HTML Bits</div>'));
|
expect(html, contains('<div>More HTML Bits</div>'));
|
||||||
expect(html, contains('print('The actual \$name.');'));
|
expect(html, contains(r'print('The actual $name.');'));
|
||||||
expect(html, contains('A description of the snippet.\n'));
|
expect(html, contains('A description of the snippet.\n'));
|
||||||
expect(
|
expect(
|
||||||
html,
|
html,
|
||||||
@ -112,14 +112,14 @@ void main() {
|
|||||||
test('generates sample snippets', () async {
|
test('generates sample snippets', () async {
|
||||||
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
..writeAsStringSync('''
|
..writeAsStringSync(r'''
|
||||||
A description of the snippet.
|
A description of the snippet.
|
||||||
|
|
||||||
On several lines.
|
On several lines.
|
||||||
|
|
||||||
```code
|
```code
|
||||||
void main() {
|
void main() {
|
||||||
print('The actual \$name.');
|
print('The actual $name.');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
''');
|
''');
|
||||||
@ -131,7 +131,7 @@ void main() {
|
|||||||
);
|
);
|
||||||
expect(html, contains('<div>HTML Bits</div>'));
|
expect(html, contains('<div>HTML Bits</div>'));
|
||||||
expect(html, contains('<div>More HTML Bits</div>'));
|
expect(html, contains('<div>More HTML Bits</div>'));
|
||||||
expect(html, contains(' print('The actual \$name.');'));
|
expect(html, contains(r' print('The actual $name.');'));
|
||||||
expect(html, contains('<div class="snippet-description">{@end-inject-html}A description of the snippet.\n\n'
|
expect(html, contains('<div class="snippet-description">{@end-inject-html}A description of the snippet.\n\n'
|
||||||
'On several lines.{@inject-html}</div>\n'));
|
'On several lines.{@inject-html}</div>\n'));
|
||||||
expect(html, contains('main() {'));
|
expect(html, contains('main() {'));
|
||||||
@ -140,14 +140,14 @@ void main() {
|
|||||||
test('generates dartpad snippets', () async {
|
test('generates dartpad snippets', () async {
|
||||||
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
..writeAsStringSync('''
|
..writeAsStringSync(r'''
|
||||||
A description of the snippet.
|
A description of the snippet.
|
||||||
|
|
||||||
On several lines.
|
On several lines.
|
||||||
|
|
||||||
```code
|
```code
|
||||||
void main() {
|
void main() {
|
||||||
print('The actual \$name.');
|
print('The actual $name.');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
''');
|
''');
|
||||||
@ -167,14 +167,14 @@ void main() {
|
|||||||
test('generates snippet application metadata', () async {
|
test('generates snippet application metadata', () async {
|
||||||
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
||||||
..createSync(recursive: true)
|
..createSync(recursive: true)
|
||||||
..writeAsStringSync('''
|
..writeAsStringSync(r'''
|
||||||
A description of the snippet.
|
A description of the snippet.
|
||||||
|
|
||||||
On several lines.
|
On several lines.
|
||||||
|
|
||||||
```code
|
```code
|
||||||
void main() {
|
void main() {
|
||||||
print('The actual \$name.');
|
print('The actual $name.');
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
''');
|
''');
|
||||||
|
@ -433,9 +433,9 @@ void main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Platform.isWindows) {
|
if (Platform.isWindows) {
|
||||||
expect(generator.arbPathStrings.first, 'lib\\l10n\\app_en_US.arb');
|
expect(generator.arbPathStrings.first, r'lib\l10n\app_en_US.arb');
|
||||||
expect(generator.arbPathStrings.elementAt(1), 'lib\\l10n\\app_es.arb');
|
expect(generator.arbPathStrings.elementAt(1), r'lib\l10n\app_es.arb');
|
||||||
expect(generator.arbPathStrings.elementAt(2), 'lib\\l10n\\app_zh.arb');
|
expect(generator.arbPathStrings.elementAt(2), r'lib\l10n\app_zh.arb');
|
||||||
} else {
|
} else {
|
||||||
expect(generator.arbPathStrings.first, 'lib/l10n/app_en_US.arb');
|
expect(generator.arbPathStrings.first, 'lib/l10n/app_en_US.arb');
|
||||||
expect(generator.arbPathStrings.elementAt(1), 'lib/l10n/app_es.arb');
|
expect(generator.arbPathStrings.elementAt(1), 'lib/l10n/app_es.arb');
|
||||||
@ -610,7 +610,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String get title {
|
'''
|
||||||
|
String get title {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
'Title',
|
'Title',
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
@ -655,9 +656,10 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String itemNumber(Object value) {
|
r'''
|
||||||
|
String itemNumber(Object value) {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
'Item \${value}',
|
'Item ${value}',
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'itemNumber',
|
name: 'itemNumber',
|
||||||
desc: 'Item placement in list.',
|
desc: 'Item placement in list.',
|
||||||
@ -704,13 +706,14 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String springBegins(DateTime springStartDate) {
|
r'''
|
||||||
|
String springBegins(DateTime springStartDate) {
|
||||||
final DateFormat springStartDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
final DateFormat springStartDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
||||||
final String springStartDateString = springStartDateDateFormat.format(springStartDate);
|
final String springStartDateString = springStartDateDateFormat.format(springStartDate);
|
||||||
|
|
||||||
String springBegins(Object springStartDate) {
|
String springBegins(Object springStartDate) {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
'Spring begins on \${springStartDate}',
|
'Spring begins on ${springStartDate}',
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'springBegins',
|
name: 'springBegins',
|
||||||
desc: 'The first day of spring',
|
desc: 'The first day of spring',
|
||||||
@ -831,13 +834,14 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String springGreetings(DateTime springStartDate, Object helloWorld) {
|
r'''
|
||||||
|
String springGreetings(DateTime springStartDate, Object helloWorld) {
|
||||||
final DateFormat springStartDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
final DateFormat springStartDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
||||||
final String springStartDateString = springStartDateDateFormat.format(springStartDate);
|
final String springStartDateString = springStartDateDateFormat.format(springStartDate);
|
||||||
|
|
||||||
String springGreetings(Object springStartDate, Object helloWorld) {
|
String springGreetings(Object springStartDate, Object helloWorld) {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
"Since it's \${springStartDate}, it's finally spring! \${helloWorld}!",
|
"Since it's ${springStartDate}, it's finally spring! ${helloWorld}!",
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'springGreetings',
|
name: 'springGreetings',
|
||||||
desc: "A realization that it's finally the spring season, followed by a greeting.",
|
desc: "A realization that it's finally the spring season, followed by a greeting.",
|
||||||
@ -888,7 +892,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String springRange(DateTime springStartDate, DateTime springEndDate) {
|
'''
|
||||||
|
String springRange(DateTime springStartDate, DateTime springEndDate) {
|
||||||
final DateFormat springStartDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
final DateFormat springStartDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
||||||
final String springStartDateString = springStartDateDateFormat.format(springStartDate);
|
final String springStartDateString = springStartDateDateFormat.format(springStartDate);
|
||||||
|
|
||||||
@ -944,7 +949,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String helloWorlds(int count, DateTime currentDate) {
|
r'''
|
||||||
|
String helloWorlds(int count, DateTime currentDate) {
|
||||||
final DateFormat currentDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
final DateFormat currentDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
||||||
final String currentDateString = currentDateDateFormat.format(currentDate);
|
final String currentDateString = currentDateDateFormat.format(currentDate);
|
||||||
|
|
||||||
@ -954,10 +960,10 @@ void main() {
|
|||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'helloWorlds',
|
name: 'helloWorlds',
|
||||||
args: <Object>[count, currentDate],
|
args: <Object>[count, currentDate],
|
||||||
one: 'Hello World, today is \${currentDateString}',
|
one: 'Hello World, today is ${currentDateString}',
|
||||||
two: 'Hello two worlds, today is \${currentDateString}',
|
two: 'Hello two worlds, today is ${currentDateString}',
|
||||||
many: 'Hello all \${count} worlds, today is \${currentDateString}',
|
many: 'Hello all ${count} worlds, today is ${currentDateString}',
|
||||||
other: 'Hello other \${count} worlds, today is \${currentDateString}'
|
other: 'Hello other ${count} worlds, today is ${currentDateString}'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return helloWorlds(count, currentDateString);
|
return helloWorlds(count, currentDateString);
|
||||||
@ -1001,7 +1007,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String courseCompletion(double progress) {
|
r'''
|
||||||
|
String courseCompletion(double progress) {
|
||||||
final NumberFormat progressNumberFormat = NumberFormat.compact(
|
final NumberFormat progressNumberFormat = NumberFormat.compact(
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
);
|
);
|
||||||
@ -1009,7 +1016,7 @@ void main() {
|
|||||||
|
|
||||||
String courseCompletion(Object progress) {
|
String courseCompletion(Object progress) {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
'You have completed \${progress} of the course.',
|
'You have completed ${progress} of the course.',
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'courseCompletion',
|
name: 'courseCompletion',
|
||||||
desc: 'The amount of progress the student has made in their class.',
|
desc: 'The amount of progress the student has made in their class.',
|
||||||
@ -1070,7 +1077,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String courseCompletion(double progress) {
|
'''
|
||||||
|
String courseCompletion(double progress) {
|
||||||
final NumberFormat progressNumberFormat = NumberFormat.$numberFormat(
|
final NumberFormat progressNumberFormat = NumberFormat.$numberFormat(
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
decimalDigits: 2,
|
decimalDigits: 2,
|
||||||
@ -1133,7 +1141,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String courseCompletion(double progress) {
|
'''
|
||||||
|
String courseCompletion(double progress) {
|
||||||
final NumberFormat progressNumberFormat = NumberFormat.$numberFormat(_localeName);
|
final NumberFormat progressNumberFormat = NumberFormat.$numberFormat(_localeName);
|
||||||
final String progressString = progressNumberFormat.format(progress);
|
final String progressString = progressNumberFormat.format(progress);
|
||||||
|
|
||||||
@ -1223,7 +1232,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String helloWorlds(int count) {
|
r'''
|
||||||
|
String helloWorlds(int count) {
|
||||||
return Intl.plural(
|
return Intl.plural(
|
||||||
count,
|
count,
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
@ -1232,9 +1242,9 @@ void main() {
|
|||||||
zero: 'Hello',
|
zero: 'Hello',
|
||||||
one: 'Hello World',
|
one: 'Hello World',
|
||||||
two: 'Hello two worlds',
|
two: 'Hello two worlds',
|
||||||
few: 'Hello \${count} worlds',
|
few: 'Hello ${count} worlds',
|
||||||
many: 'Hello all \${count} worlds',
|
many: 'Hello all ${count} worlds',
|
||||||
other: 'Hello other \${count} worlds'
|
other: 'Hello other ${count} worlds'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
@ -1273,18 +1283,19 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String helloWorlds(int count, Object adjective) {
|
r'''
|
||||||
|
String helloWorlds(int count, Object adjective) {
|
||||||
return Intl.plural(
|
return Intl.plural(
|
||||||
count,
|
count,
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'helloWorlds',
|
name: 'helloWorlds',
|
||||||
args: <Object>[count, adjective],
|
args: <Object>[count, adjective],
|
||||||
zero: 'Hello',
|
zero: 'Hello',
|
||||||
one: 'Hello \${adjective} World',
|
one: 'Hello ${adjective} World',
|
||||||
two: 'Hello two \${adjective} worlds',
|
two: 'Hello two ${adjective} worlds',
|
||||||
few: 'Hello \${count} \${adjective} worlds',
|
few: 'Hello ${count} ${adjective} worlds',
|
||||||
many: 'Hello all \${count} \${adjective} worlds',
|
many: 'Hello all ${count} ${adjective} worlds',
|
||||||
other: 'Hello other \${count} \${adjective} worlds'
|
other: 'Hello other ${count} ${adjective} worlds'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
'''
|
'''
|
||||||
@ -1326,7 +1337,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String helloWorlds(int count, DateTime currentDate) {
|
r'''
|
||||||
|
String helloWorlds(int count, DateTime currentDate) {
|
||||||
final DateFormat currentDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
final DateFormat currentDateDateFormat = DateFormat.yMMMMEEEEd(_localeName);
|
||||||
final String currentDateString = currentDateDateFormat.format(currentDate);
|
final String currentDateString = currentDateDateFormat.format(currentDate);
|
||||||
|
|
||||||
@ -1336,10 +1348,10 @@ void main() {
|
|||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'helloWorlds',
|
name: 'helloWorlds',
|
||||||
args: <Object>[count, currentDate],
|
args: <Object>[count, currentDate],
|
||||||
one: 'Hello World, today is \${currentDateString}',
|
one: 'Hello World, today is ${currentDateString}',
|
||||||
two: 'Hello two worlds, today is \${currentDateString}',
|
two: 'Hello two worlds, today is ${currentDateString}',
|
||||||
many: 'Hello all \${count} worlds, today is \${currentDateString}',
|
many: 'Hello all ${count} worlds, today is ${currentDateString}',
|
||||||
other: 'Hello other \${count} worlds, today is \${currentDateString}'
|
other: 'Hello other ${count} worlds, today is ${currentDateString}'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return helloWorlds(count, currentDateString);
|
return helloWorlds(count, currentDateString);
|
||||||
@ -1383,7 +1395,8 @@ void main() {
|
|||||||
expect(generator.classMethods, isNotEmpty);
|
expect(generator.classMethods, isNotEmpty);
|
||||||
expect(
|
expect(
|
||||||
generator.classMethods.first,
|
generator.classMethods.first,
|
||||||
''' String helloWorlds(int count, int population) {
|
r'''
|
||||||
|
String helloWorlds(int count, int population) {
|
||||||
final NumberFormat populationNumberFormat = NumberFormat.compactLong(
|
final NumberFormat populationNumberFormat = NumberFormat.compactLong(
|
||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
);
|
);
|
||||||
@ -1395,10 +1408,10 @@ void main() {
|
|||||||
locale: _localeName,
|
locale: _localeName,
|
||||||
name: 'helloWorlds',
|
name: 'helloWorlds',
|
||||||
args: <Object>[count, population],
|
args: <Object>[count, population],
|
||||||
one: 'Hello World of \${populationString} citizens',
|
one: 'Hello World of ${populationString} citizens',
|
||||||
two: 'Hello two worlds with \${populationString} total citizens',
|
two: 'Hello two worlds with ${populationString} total citizens',
|
||||||
many: 'Hello all \${count} worlds, with a total of \${populationString} citizens',
|
many: 'Hello all ${count} worlds, with a total of ${populationString} citizens',
|
||||||
other: 'Hello other \${count} worlds, with a total of \${populationString} citizens'
|
other: 'Hello other ${count} worlds, with a total of ${populationString} citizens'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return helloWorlds(count, populationString);
|
return helloWorlds(count, populationString);
|
||||||
|
@ -460,7 +460,7 @@ class _Transform {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const String _transformCommandAtom = ' *([^(]+)\\(([^)]*)\\)';
|
const String _transformCommandAtom = r' *([^(]+)\(([^)]*)\)';
|
||||||
final RegExp _transformValidator = RegExp('^($_transformCommandAtom)*\$');
|
final RegExp _transformValidator = RegExp('^($_transformCommandAtom)*\$');
|
||||||
final RegExp _transformCommand = RegExp(_transformCommandAtom);
|
final RegExp _transformCommand = RegExp(_transformCommandAtom);
|
||||||
|
|
||||||
@ -522,7 +522,7 @@ Matrix3 _matrix(double a, double b, double c, double d, double e, double f) {
|
|||||||
|
|
||||||
// Matches a pixels expression e.g "14px".
|
// Matches a pixels expression e.g "14px".
|
||||||
// First group is just the number.
|
// First group is just the number.
|
||||||
final RegExp _pixelsExp = RegExp('^([0-9]+)px\$');
|
final RegExp _pixelsExp = RegExp(r'^([0-9]+)px$');
|
||||||
|
|
||||||
/// Parses a pixel expression, e.g "14px", and returns the number.
|
/// Parses a pixel expression, e.g "14px", and returns the number.
|
||||||
/// Throws an [ArgumentError] if the given string doesn't match the pattern.
|
/// Throws an [ArgumentError] if the given string doesn't match the pattern.
|
||||||
|
@ -559,7 +559,7 @@ void main() {
|
|||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
expect(animation.toDart('_AnimatedIconData', '_\$data1'),
|
expect(animation.toDart('_AnimatedIconData', r'_$data1'),
|
||||||
'const _AnimatedIconData _\$data1 = const _AnimatedIconData(\n'
|
'const _AnimatedIconData _\$data1 = const _AnimatedIconData(\n'
|
||||||
' const Size(48.0, 48.0),\n'
|
' const Size(48.0, 48.0),\n'
|
||||||
' const <_PathFrames>[\n'
|
' const <_PathFrames>[\n'
|
||||||
|
@ -250,7 +250,7 @@ class TextFormFieldDemoState extends State<TextFormFieldDemo> {
|
|||||||
decoration: const InputDecoration(
|
decoration: const InputDecoration(
|
||||||
border: OutlineInputBorder(),
|
border: OutlineInputBorder(),
|
||||||
labelText: 'Salary',
|
labelText: 'Salary',
|
||||||
prefixText: '\$',
|
prefixText: r'$',
|
||||||
suffixText: 'USD',
|
suffixText: 'USD',
|
||||||
suffixStyle: TextStyle(color: Colors.green),
|
suffixStyle: TextStyle(color: Colors.green),
|
||||||
),
|
),
|
||||||
|
@ -1819,7 +1819,7 @@ class StringProperty extends DiagnosticsProperty<String> {
|
|||||||
// Escape linebreaks in multiline strings to avoid confusing output when
|
// Escape linebreaks in multiline strings to avoid confusing output when
|
||||||
// the parent of this node is trying to display all properties on the same
|
// the parent of this node is trying to display all properties on the same
|
||||||
// line.
|
// line.
|
||||||
text = text.replaceAll('\n', '\\n');
|
text = text.replaceAll('\n', r'\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quoted && text != null) {
|
if (quoted && text != null) {
|
||||||
|
@ -70,22 +70,22 @@ Future<void> main() async {
|
|||||||
},
|
},
|
||||||
));
|
));
|
||||||
expect(console.join('\n'), matches(
|
expect(console.join('\n'), matches(
|
||||||
'^══╡ EXCEPTION CAUGHT BY ERROR HANDLING TEST ╞═══════════════════════════════════════════════════════\n'
|
r'^══╡ EXCEPTION CAUGHT BY ERROR HANDLING TEST ╞═══════════════════════════════════════════════════════\n'
|
||||||
'The following assertion was thrown testing the error handling logic:\n'
|
r'The following assertion was thrown testing the error handling logic:\n'
|
||||||
'Message goes here\\.\n'
|
r'Message goes here\.\n'
|
||||||
'\'[^\']+flutter/test/foundation/error_reporting_test\\.dart\':\n'
|
r"'[^']+flutter/test/foundation/error_reporting_test\.dart':\n"
|
||||||
'Failed assertion: line [0-9]+ pos [0-9]+: \'false\'\n'
|
r"Failed assertion: line [0-9]+ pos [0-9]+: 'false'\n"
|
||||||
'\n'
|
r'\n'
|
||||||
'When the exception was thrown, this was the stack:\n'
|
r'When the exception was thrown, this was the stack:\n'
|
||||||
'#0 getSampleStack\\.<anonymous closure> \\([^)]+flutter/test/foundation/error_reporting_test\\.dart:[0-9]+:[0-9]+\\)\n'
|
r'#0 getSampleStack\.<anonymous closure> \([^)]+flutter/test/foundation/error_reporting_test\.dart:[0-9]+:[0-9]+\)\n'
|
||||||
'#2 getSampleStack \\([^)]+flutter/test/foundation/error_reporting_test\\.dart:[0-9]+:[0-9]+\\)\n'
|
r'#2 getSampleStack \([^)]+flutter/test/foundation/error_reporting_test\.dart:[0-9]+:[0-9]+\)\n'
|
||||||
'#3 main \\([^)]+flutter/test/foundation/error_reporting_test\\.dart:[0-9]+:[0-9]+\\)\n'
|
r'#3 main \([^)]+flutter/test/foundation/error_reporting_test\.dart:[0-9]+:[0-9]+\)\n'
|
||||||
'(.+\n)+' // TODO(ianh): when fixing #4021, also filter out frames from the test infrastructure below the first call to our main()
|
r'(.+\n)+' // TODO(ianh): when fixing #4021, also filter out frames from the test infrastructure below the first call to our main()
|
||||||
'\\(elided [0-9]+ frames from class _RawReceivePortImpl and dart:async\\)\n'
|
r'\(elided [0-9]+ frames from class _RawReceivePortImpl and dart:async\)\n'
|
||||||
'\n'
|
r'\n'
|
||||||
'line 1 of extra information\n'
|
r'line 1 of extra information\n'
|
||||||
'line 2 of extra information\n'
|
r'line 2 of extra information\n'
|
||||||
'════════════════════════════════════════════════════════════════════════════════════════════════════\$',
|
r'════════════════════════════════════════════════════════════════════════════════════════════════════$',
|
||||||
));
|
));
|
||||||
console.clear();
|
console.clear();
|
||||||
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
||||||
@ -102,16 +102,16 @@ Future<void> main() async {
|
|||||||
exception: getAssertionErrorWithLongMessage(),
|
exception: getAssertionErrorWithLongMessage(),
|
||||||
));
|
));
|
||||||
expect(console.join('\n'), matches(
|
expect(console.join('\n'), matches(
|
||||||
'^══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════\n'
|
r'^══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════\n'
|
||||||
'The following assertion was thrown:\n'
|
r'The following assertion was thrown:\n'
|
||||||
'word word word word word word word word word word word word word word word word word word word word\n'
|
r'word word word word word word word word word word word word word word word word word word word word\n'
|
||||||
'word word word word word word word word word word word word word word word word word word word word\n'
|
r'word word word word word word word word word word word word word word word word word word word word\n'
|
||||||
'word word word word word word word word word word word word word word word word word word word word\n'
|
r'word word word word word word word word word word word word word word word word word word word word\n'
|
||||||
'word word word word word word word word word word word word word word word word word word word word\n'
|
r'word word word word word word word word word word word word word word word word word word word word\n'
|
||||||
'word word word word word word word word word word word word word word word word word word word word\n'
|
r'word word word word word word word word word word word word word word word word word word word word\n'
|
||||||
'\'[^\']+flutter/test/foundation/error_reporting_test\\.dart\':\n'
|
r"'[^']+flutter/test/foundation/error_reporting_test\.dart':\n"
|
||||||
'Failed assertion: line [0-9]+ pos [0-9]+: \'false\'\n'
|
r"Failed assertion: line [0-9]+ pos [0-9]+: 'false'\n"
|
||||||
'════════════════════════════════════════════════════════════════════════════════════════════════════\$',
|
r'════════════════════════════════════════════════════════════════════════════════════════════════════$',
|
||||||
));
|
));
|
||||||
console.clear();
|
console.clear();
|
||||||
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
||||||
@ -143,21 +143,21 @@ Future<void> main() async {
|
|||||||
},
|
},
|
||||||
));
|
));
|
||||||
expect(console.join('\n'), matches(
|
expect(console.join('\n'), matches(
|
||||||
'^══╡ EXCEPTION CAUGHT BY ERROR HANDLING TEST ╞═══════════════════════════════════════════════════════\n'
|
r'^══╡ EXCEPTION CAUGHT BY ERROR HANDLING TEST ╞═══════════════════════════════════════════════════════\n'
|
||||||
'The following assertion was thrown testing the error handling logic:\n'
|
r'The following assertion was thrown testing the error handling logic:\n'
|
||||||
'\'[^\']+flutter/test/foundation/error_reporting_test\\.dart\':[\n ]'
|
r"'[^']+flutter/test/foundation/error_reporting_test\.dart':[\n ]"
|
||||||
'Failed[\n ]assertion:[\n ]line[\n ][0-9]+[\n ]pos[\n ][0-9]+:[\n ]\'false\':[\n ]is[\n ]not[\n ]true\\.\n'
|
r"Failed[\n ]assertion:[\n ]line[\n ][0-9]+[\n ]pos[\n ][0-9]+:[\n ]'false':[\n ]is[\n ]not[\n ]true\.\n"
|
||||||
'\n'
|
r'\n'
|
||||||
'When the exception was thrown, this was the stack:\n'
|
r'When the exception was thrown, this was the stack:\n'
|
||||||
'#0 getSampleStack\\.<anonymous closure> \\([^)]+flutter/test/foundation/error_reporting_test\\.dart:[0-9]+:[0-9]+\\)\n'
|
r'#0 getSampleStack\.<anonymous closure> \([^)]+flutter/test/foundation/error_reporting_test\.dart:[0-9]+:[0-9]+\)\n'
|
||||||
'#2 getSampleStack \\([^)]+flutter/test/foundation/error_reporting_test\\.dart:[0-9]+:[0-9]+\\)\n'
|
r'#2 getSampleStack \([^)]+flutter/test/foundation/error_reporting_test\.dart:[0-9]+:[0-9]+\)\n'
|
||||||
'#3 main \\([^)]+flutter/test/foundation/error_reporting_test\\.dart:[0-9]+:[0-9]+\\)\n'
|
r'#3 main \([^)]+flutter/test/foundation/error_reporting_test\.dart:[0-9]+:[0-9]+\)\n'
|
||||||
'(.+\n)+' // TODO(ianh): when fixing #4021, also filter out frames from the test infrastructure below the first call to our main()
|
r'(.+\n)+' // TODO(ianh): when fixing #4021, also filter out frames from the test infrastructure below the first call to our main()
|
||||||
'\\(elided [0-9]+ frames from class _RawReceivePortImpl and dart:async\\)\n'
|
r'\(elided [0-9]+ frames from class _RawReceivePortImpl and dart:async\)\n'
|
||||||
'\n'
|
r'\n'
|
||||||
'line 1 of extra information\n'
|
r'line 1 of extra information\n'
|
||||||
'line 2 of extra information\n'
|
r'line 2 of extra information\n'
|
||||||
'════════════════════════════════════════════════════════════════════════════════════════════════════\$',
|
r'════════════════════════════════════════════════════════════════════════════════════════════════════$',
|
||||||
));
|
));
|
||||||
console.clear();
|
console.clear();
|
||||||
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
||||||
@ -175,11 +175,11 @@ Future<void> main() async {
|
|||||||
exception: exception,
|
exception: exception,
|
||||||
));
|
));
|
||||||
expect(console.join('\n'), matches(
|
expect(console.join('\n'), matches(
|
||||||
'^══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════\n'
|
r'^══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════\n'
|
||||||
'The following NoSuchMethodError was thrown:\n'
|
r'The following NoSuchMethodError was thrown:\n'
|
||||||
'Receiver: 5\n'
|
r'Receiver: 5\n'
|
||||||
'Tried calling: foo = 2, 4\n'
|
r'Tried calling: foo = 2, 4\n'
|
||||||
'════════════════════════════════════════════════════════════════════════════════════════════════════\$',
|
r'════════════════════════════════════════════════════════════════════════════════════════════════════$',
|
||||||
));
|
));
|
||||||
console.clear();
|
console.clear();
|
||||||
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
FlutterError.dumpErrorToConsole(FlutterErrorDetails(
|
||||||
@ -196,10 +196,10 @@ Future<void> main() async {
|
|||||||
exception: 'hello',
|
exception: 'hello',
|
||||||
));
|
));
|
||||||
expect(console.join('\n'), matches(
|
expect(console.join('\n'), matches(
|
||||||
'^══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════\n'
|
r'^══╡ EXCEPTION CAUGHT BY FLUTTER FRAMEWORK ╞═════════════════════════════════════════════════════════\n'
|
||||||
'The following message was thrown:\n'
|
r'The following message was thrown:\n'
|
||||||
'hello\n'
|
r'hello\n'
|
||||||
'════════════════════════════════════════════════════════════════════════════════════════════════════\$',
|
r'════════════════════════════════════════════════════════════════════════════════════════════════════$',
|
||||||
));
|
));
|
||||||
console.clear();
|
console.clear();
|
||||||
FlutterError.dumpErrorToConsole(const FlutterErrorDetails(
|
FlutterError.dumpErrorToConsole(const FlutterErrorDetails(
|
||||||
|
@ -165,7 +165,7 @@ void main() {
|
|||||||
final SemanticsTester semantics = SemanticsTester(tester);
|
final SemanticsTester semantics = SemanticsTester(tester);
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
const Text(
|
const Text(
|
||||||
'\$\$',
|
r'$$',
|
||||||
semanticsLabel: 'Double dollars',
|
semanticsLabel: 'Double dollars',
|
||||||
textDirection: TextDirection.ltr,
|
textDirection: TextDirection.ltr,
|
||||||
)
|
)
|
||||||
@ -191,7 +191,7 @@ void main() {
|
|||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
const Directionality(
|
const Directionality(
|
||||||
textDirection: TextDirection.ltr,
|
textDirection: TextDirection.ltr,
|
||||||
child: Text('\$\$', semanticsLabel: 'Double dollars')),
|
child: Text(r'$$', semanticsLabel: 'Double dollars')),
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
|
@ -212,17 +212,18 @@ class FlutterWebConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
result = await waitFor<dynamic>(() => _driver.execute('r'
|
result = await waitFor<dynamic>(
|
||||||
'eturn \$flutterDriverResult', <String>[]),
|
() => _driver.execute(r'return $flutterDriverResult', <String>[]),
|
||||||
matcher: isNotNull,
|
matcher: isNotNull,
|
||||||
timeout: duration ?? const Duration(days: 30));
|
timeout: duration ?? const Duration(days: 30),
|
||||||
|
);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
// Returns null if exception thrown.
|
// Returns null if exception thrown.
|
||||||
return null;
|
return null;
|
||||||
} finally {
|
} finally {
|
||||||
// Resets the result.
|
// Resets the result.
|
||||||
_driver.execute('''
|
_driver.execute(r'''
|
||||||
\$flutterDriverResult = null
|
$flutterDriverResult = null
|
||||||
''', <void>[]);
|
''', <void>[]);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -243,7 +244,7 @@ class FlutterWebConnection {
|
|||||||
/// Waits until extension is installed.
|
/// Waits until extension is installed.
|
||||||
Future<void> waitUntilExtensionInstalled(sync_io.WebDriver driver, Duration timeout) async {
|
Future<void> waitUntilExtensionInstalled(sync_io.WebDriver driver, Duration timeout) async {
|
||||||
await waitFor<void>(() =>
|
await waitFor<void>(() =>
|
||||||
driver.execute('return typeof(window.\$flutterDriver)', <String>[]),
|
driver.execute(r'return typeof(window.$flutterDriver)', <String>[]),
|
||||||
matcher: 'function',
|
matcher: 'function',
|
||||||
timeout: timeout ?? const Duration(days: 365));
|
timeout: timeout ?? const Duration(days: 365));
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,12 @@ import 'dart:js_util' as js_util;
|
|||||||
///
|
///
|
||||||
/// * [_extension_io.dart], which has the dart:io implementation
|
/// * [_extension_io.dart], which has the dart:io implementation
|
||||||
void registerWebServiceExtension(Future<Map<String, dynamic>> Function(Map<String, String>) call) {
|
void registerWebServiceExtension(Future<Map<String, dynamic>> Function(Map<String, String>) call) {
|
||||||
js_util.setProperty(html.window, '\$flutterDriver', allowInterop((dynamic message) async {
|
js_util.setProperty(html.window, r'$flutterDriver', allowInterop((dynamic message) async {
|
||||||
// ignore: undefined_function, undefined_identifier
|
// ignore: undefined_function, undefined_identifier
|
||||||
final Map<String, String> params = Map<String, String>.from(
|
final Map<String, String> params = Map<String, String>.from(
|
||||||
jsonDecode(message as String) as Map<String, dynamic>);
|
jsonDecode(message as String) as Map<String, dynamic>);
|
||||||
final Map<String, dynamic> result = Map<String, dynamic>.from(
|
final Map<String, dynamic> result = Map<String, dynamic>.from(
|
||||||
await call(params));
|
await call(params));
|
||||||
context['\$flutterDriverResult'] = json.encode(result);
|
context[r'$flutterDriverResult'] = json.encode(result);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ void main() {
|
|||||||
test('web_extension should register a function', () {
|
test('web_extension should register a function', () {
|
||||||
expect(() => registerWebServiceExtension(call),
|
expect(() => registerWebServiceExtension(call),
|
||||||
returnsNormally);
|
returnsNormally);
|
||||||
expect(js.context.hasProperty('\$flutterDriver'), true);
|
expect(js.context.hasProperty(r'$flutterDriver'), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -114,7 +114,7 @@ class FileSystemUtils {
|
|||||||
///
|
///
|
||||||
/// On Windows it replaces all '\' with '\\'. On other platforms, it returns the
|
/// On Windows it replaces all '\' with '\\'. On other platforms, it returns the
|
||||||
/// path unchanged.
|
/// path unchanged.
|
||||||
String escapePath(String path) => _platform.isWindows ? path.replaceAll('\\', '\\\\') : path;
|
String escapePath(String path) => _platform.isWindows ? path.replaceAll(r'\', r'\\') : path;
|
||||||
|
|
||||||
/// Returns true if the file system [entity] has not been modified since the
|
/// Returns true if the file system [entity] has not been modified since the
|
||||||
/// latest modification to [referenceFile].
|
/// latest modification to [referenceFile].
|
||||||
|
@ -409,7 +409,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject {
|
|||||||
} on FileNotFoundException {
|
} on FileNotFoundException {
|
||||||
// iOS tooling not found; likely not running OSX; let [fromPlist] be null
|
// iOS tooling not found; likely not running OSX; let [fromPlist] be null
|
||||||
}
|
}
|
||||||
if (fromPlist != null && !fromPlist.contains('\$')) {
|
if (fromPlist != null && !fromPlist.contains(r'$')) {
|
||||||
// Info.plist has no build variables in product bundle ID.
|
// Info.plist has no build variables in product bundle ID.
|
||||||
return fromPlist;
|
return fromPlist;
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ class VsCode {
|
|||||||
|
|
||||||
if (localAppData != null) {
|
if (localAppData != null) {
|
||||||
searchLocations.add(_VsCodeInstallLocation(
|
searchLocations.add(_VsCodeInstallLocation(
|
||||||
globals.fs.path.join(localAppData, 'Programs\\Microsoft VS Code'),
|
globals.fs.path.join(localAppData, r'Programs\Microsoft VS Code'),
|
||||||
'.vscode',
|
'.vscode',
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -179,7 +179,7 @@ class VsCode {
|
|||||||
));
|
));
|
||||||
if (localAppData != null) {
|
if (localAppData != null) {
|
||||||
searchLocations.add(_VsCodeInstallLocation(
|
searchLocations.add(_VsCodeInstallLocation(
|
||||||
globals.fs.path.join(localAppData, 'Programs\\Microsoft VS Code Insiders'),
|
globals.fs.path.join(localAppData, r'Programs\Microsoft VS Code Insiders'),
|
||||||
'.vscode-insiders',
|
'.vscode-insiders',
|
||||||
isInsiders: true,
|
isInsiders: true,
|
||||||
));
|
));
|
||||||
|
@ -100,7 +100,7 @@ class ChromeDevice extends Device {
|
|||||||
String version = 'unknown';
|
String version = 'unknown';
|
||||||
if (globals.platform.isWindows) {
|
if (globals.platform.isWindows) {
|
||||||
final ProcessResult result = await globals.processManager.run(<String>[
|
final ProcessResult result = await globals.processManager.run(<String>[
|
||||||
r'reg', 'query', 'HKEY_CURRENT_USER\\Software\\Google\\Chrome\\BLBeacon', '/v', 'version',
|
r'reg', 'query', r'HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon', '/v', 'version',
|
||||||
]);
|
]);
|
||||||
if (result.exitCode == 0) {
|
if (result.exitCode == 0) {
|
||||||
final List<String> parts = (result.stdout as String).split(RegExp(r'\s+'));
|
final List<String> parts = (result.stdout as String).split(RegExp(r'\s+'));
|
||||||
|
@ -37,7 +37,7 @@ void main() {
|
|||||||
if (globals.platform.isWindows) {
|
if (globals.platform.isWindows) {
|
||||||
flutterRootUri
|
flutterRootUri
|
||||||
..write('/')
|
..write('/')
|
||||||
..write(canonicalizedFlutterRootPath.replaceAll('\\', '/'));
|
..write(canonicalizedFlutterRootPath.replaceAll(r'\', '/'));
|
||||||
} else {
|
} else {
|
||||||
flutterRootUri.write(canonicalizedFlutterRootPath);
|
flutterRootUri.write(canonicalizedFlutterRootPath);
|
||||||
}
|
}
|
||||||
|
@ -40,15 +40,15 @@ void main() {
|
|||||||
|
|
||||||
group('network errors', () {
|
group('network errors', () {
|
||||||
testUsingContext('retries if gradle fails while downloading', () async {
|
testUsingContext('retries if gradle fails while downloading', () async {
|
||||||
const String errorMessage = '''
|
const String errorMessage = r'''
|
||||||
Exception in thread "main" java.io.FileNotFoundException: https://downloads.gradle.org/distributions/gradle-4.1.1-all.zip
|
Exception in thread "main" java.io.FileNotFoundException: https://downloads.gradle.org/distributions/gradle-4.1.1-all.zip
|
||||||
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1872)
|
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1872)
|
||||||
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
|
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
|
||||||
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
|
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
|
||||||
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
||||||
at org.gradle.wrapper.Download.download(Download.java:44)
|
at org.gradle.wrapper.Download.download(Download.java:44)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:61)
|
at org.gradle.wrapper.Install$1.call(Install.java:61)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:48)
|
at org.gradle.wrapper.Install$1.call(Install.java:48)
|
||||||
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
||||||
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
||||||
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
||||||
@ -66,7 +66,7 @@ at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)''';
|
|||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('retries if gradle fails downloading with proxy error', () async {
|
testUsingContext('retries if gradle fails downloading with proxy error', () async {
|
||||||
const String errorMessage = '''
|
const String errorMessage = r'''
|
||||||
Exception in thread "main" java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"
|
Exception in thread "main" java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"
|
||||||
at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2124)
|
at sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2124)
|
||||||
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183)
|
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183)
|
||||||
@ -75,8 +75,8 @@ at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.
|
|||||||
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
|
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
|
||||||
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
||||||
at org.gradle.wrapper.Download.download(Download.java:44)
|
at org.gradle.wrapper.Download.download(Download.java:44)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:61)
|
at org.gradle.wrapper.Install$1.call(Install.java:61)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:48)
|
at org.gradle.wrapper.Install$1.call(Install.java:48)
|
||||||
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
||||||
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
||||||
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
||||||
@ -113,7 +113,7 @@ Exception in thread "main" java.lang.RuntimeException: Timeout of 120000 reached
|
|||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('retries if remote host closes connection', () async {
|
testUsingContext('retries if remote host closes connection', () async {
|
||||||
const String errorMessage = '''
|
const String errorMessage = r'''
|
||||||
Downloading https://services.gradle.org/distributions/gradle-5.6.2-all.zip
|
Downloading https://services.gradle.org/distributions/gradle-5.6.2-all.zip
|
||||||
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
|
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
|
||||||
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)
|
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)
|
||||||
@ -129,8 +129,8 @@ Exception in thread "main" javax.net.ssl.SSLHandshakeException: Remote host clos
|
|||||||
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
|
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
|
||||||
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
||||||
at org.gradle.wrapper.Download.download(Download.java:44)
|
at org.gradle.wrapper.Download.download(Download.java:44)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:61)
|
at org.gradle.wrapper.Install$1.call(Install.java:61)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:48)
|
at org.gradle.wrapper.Install$1.call(Install.java:48)
|
||||||
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
||||||
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
||||||
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
||||||
@ -175,7 +175,7 @@ Exception in thread "main" java.io.FileNotFoundException: https://downloads.grad
|
|||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('retries if the connection is reset', () async {
|
testUsingContext('retries if the connection is reset', () async {
|
||||||
const String errorMessage = '''
|
const String errorMessage = r'''
|
||||||
Downloading https://services.gradle.org/distributions/gradle-5.6.2-all.zip
|
Downloading https://services.gradle.org/distributions/gradle-5.6.2-all.zip
|
||||||
Exception in thread "main" java.net.SocketException: Connection reset
|
Exception in thread "main" java.net.SocketException: Connection reset
|
||||||
at java.net.SocketInputStream.read(SocketInputStream.java:210)
|
at java.net.SocketInputStream.read(SocketInputStream.java:210)
|
||||||
@ -194,8 +194,8 @@ Exception in thread "main" java.net.SocketException: Connection reset
|
|||||||
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
|
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
|
||||||
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
at org.gradle.wrapper.Download.downloadInternal(Download.java:58)
|
||||||
at org.gradle.wrapper.Download.download(Download.java:44)
|
at org.gradle.wrapper.Download.download(Download.java:44)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:61)
|
at org.gradle.wrapper.Install$1.call(Install.java:61)
|
||||||
at org.gradle.wrapper.Install\$1.call(Install.java:48)
|
at org.gradle.wrapper.Install$1.call(Install.java:48)
|
||||||
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:65)
|
||||||
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
at org.gradle.wrapper.Install.createDist(Install.java:48)
|
||||||
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:128)
|
||||||
|
@ -457,7 +457,7 @@ void main() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('create settings_aar.gradle when current settings.gradle loads plugins', () {
|
testUsingContext('create settings_aar.gradle when current settings.gradle loads plugins', () {
|
||||||
const String currentSettingsGradle = '''
|
const String currentSettingsGradle = r'''
|
||||||
include ':app'
|
include ':app'
|
||||||
|
|
||||||
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
|
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
|
||||||
@ -470,8 +470,8 @@ if (pluginsFile.exists()) {
|
|||||||
|
|
||||||
plugins.each { name, path ->
|
plugins.each { name, path ->
|
||||||
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
|
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
|
||||||
include ":\$name"
|
include ":$name"
|
||||||
project(":\$name").projectDir = pluginDirectory
|
project(":$name").projectDir = pluginDirectory
|
||||||
}
|
}
|
||||||
''';
|
''';
|
||||||
|
|
||||||
|
@ -105,8 +105,8 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
platform: FakePlatform(operatingSystem: 'windows'),
|
platform: FakePlatform(operatingSystem: 'windows'),
|
||||||
);
|
);
|
||||||
expect(fsUtils.escapePath('C:\\foo\\bar\\cool.dart'), 'C:\\\\foo\\\\bar\\\\cool.dart');
|
expect(fsUtils.escapePath(r'C:\foo\bar\cool.dart'), r'C:\\foo\\bar\\cool.dart');
|
||||||
expect(fsUtils.escapePath('foo\\bar\\cool.dart'), 'foo\\\\bar\\\\cool.dart');
|
expect(fsUtils.escapePath(r'foo\bar\cool.dart'), r'foo\\bar\\cool.dart');
|
||||||
expect(fsUtils.escapePath('C:/foo/bar/cool.dart'), 'C:/foo/bar/cool.dart');
|
expect(fsUtils.escapePath('C:/foo/bar/cool.dart'), 'C:/foo/bar/cool.dart');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ void main() {
|
|||||||
);
|
);
|
||||||
expect(fsUtils.escapePath('/foo/bar/cool.dart'), '/foo/bar/cool.dart');
|
expect(fsUtils.escapePath('/foo/bar/cool.dart'), '/foo/bar/cool.dart');
|
||||||
expect(fsUtils.escapePath('foo/bar/cool.dart'), 'foo/bar/cool.dart');
|
expect(fsUtils.escapePath('foo/bar/cool.dart'), 'foo/bar/cool.dart');
|
||||||
expect(fsUtils.escapePath('foo\\cool.dart'), 'foo\\cool.dart');
|
expect(fsUtils.escapePath(r'foo\cool.dart'), r'foo\cool.dart');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -282,7 +282,7 @@ void main() {
|
|||||||
);
|
);
|
||||||
logger.printStatus('Rude Interrupting Cow');
|
logger.printStatus('Rude Interrupting Cow');
|
||||||
status.stop();
|
status.stop();
|
||||||
final String a = currentPlatform().isWindows ? '\\' : '⣽';
|
final String a = currentPlatform().isWindows ? r'\' : '⣽';
|
||||||
final String b = currentPlatform().isWindows ? '|' : '⣻';
|
final String b = currentPlatform().isWindows ? '|' : '⣻';
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
|
@ -126,13 +126,13 @@ void main() {
|
|||||||
await _recompile(streamController, generator, mockFrontendServerStdIn,
|
await _recompile(streamController, generator, mockFrontendServerStdIn,
|
||||||
'result abc\nline1\nline2\nabc\nabc /path/to/main.dart.dill 0\n');
|
'result abc\nline1\nline2\nabc\nabc /path/to/main.dart.dill 0\n');
|
||||||
|
|
||||||
await _accept(streamController, generator, mockFrontendServerStdIn, '^accept\\n\$');
|
await _accept(streamController, generator, mockFrontendServerStdIn, r'^accept\n$');
|
||||||
|
|
||||||
await _recompile(streamController, generator, mockFrontendServerStdIn,
|
await _recompile(streamController, generator, mockFrontendServerStdIn,
|
||||||
'result abc\nline1\nline2\nabc\nabc /path/to/main.dart.dill 0\n');
|
'result abc\nline1\nline2\nabc\nabc /path/to/main.dart.dill 0\n');
|
||||||
// No sources returned from reject command.
|
// No sources returned from reject command.
|
||||||
await _reject(streamController, generator, mockFrontendServerStdIn, 'result abc\nabc\n',
|
await _reject(streamController, generator, mockFrontendServerStdIn, 'result abc\nabc\n',
|
||||||
'^reject\\n\$');
|
r'^reject\n$');
|
||||||
verifyNoMoreInteractions(mockFrontendServerStdIn);
|
verifyNoMoreInteractions(mockFrontendServerStdIn);
|
||||||
expect(mockFrontendServerStdIn.getAndClear(), isEmpty);
|
expect(mockFrontendServerStdIn.getAndClear(), isEmpty);
|
||||||
expect(testLogger.errorText, equals(
|
expect(testLogger.errorText, equals(
|
||||||
@ -193,7 +193,7 @@ Future<void> _recompile(
|
|||||||
);
|
);
|
||||||
expect(output.outputFilename, equals('/path/to/main.dart.dill'));
|
expect(output.outputFilename, equals('/path/to/main.dart.dill'));
|
||||||
final String commands = mockFrontendServerStdIn.getAndClear();
|
final String commands = mockFrontendServerStdIn.getAndClear();
|
||||||
final RegExp re = RegExp('^recompile (.*)\\n/path/to/main.dart\\n(.*)\\n\$');
|
final RegExp re = RegExp(r'^recompile (.*)\n/path/to/main.dart\n(.*)\n$');
|
||||||
expect(commands, matches(re));
|
expect(commands, matches(re));
|
||||||
final Match match = re.firstMatch(commands);
|
final Match match = re.firstMatch(commands);
|
||||||
expect(match[1] == match[2], isTrue);
|
expect(match[1] == match[2], isTrue);
|
||||||
|
@ -388,7 +388,7 @@ apply plugin: 'kotlin-android'
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
when(mockPlistUtils.getValueFromFile(any, any)).thenReturn('\$(PRODUCT_BUNDLE_IDENTIFIER)');
|
when(mockPlistUtils.getValueFromFile(any, any)).thenReturn(r'$(PRODUCT_BUNDLE_IDENTIFIER)');
|
||||||
expect(await project.ios.productBundleIdentifier, 'io.flutter.someProject');
|
expect(await project.ios.productBundleIdentifier, 'io.flutter.someProject');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -403,7 +403,7 @@ apply plugin: 'kotlin-android'
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
when(mockPlistUtils.getValueFromFile(any, any)).thenReturn('\$(PRODUCT_BUNDLE_IDENTIFIER).\$(SUFFIX)');
|
when(mockPlistUtils.getValueFromFile(any, any)).thenReturn(r'$(PRODUCT_BUNDLE_IDENTIFIER).$(SUFFIX)');
|
||||||
expect(await project.ios.productBundleIdentifier, 'io.flutter.someProject.suffix');
|
expect(await project.ios.productBundleIdentifier, 'io.flutter.someProject.suffix');
|
||||||
});
|
});
|
||||||
testWithMocks('empty surrounded by quotes', () async {
|
testWithMocks('empty surrounded by quotes', () async {
|
||||||
|
@ -117,7 +117,7 @@ void main() {
|
|||||||
when(mockProcessManager.run(<String>[
|
when(mockProcessManager.run(<String>[
|
||||||
'reg',
|
'reg',
|
||||||
'query',
|
'query',
|
||||||
'HKEY_CURRENT_USER\\Software\\Google\\Chrome\\BLBeacon',
|
r'HKEY_CURRENT_USER\Software\Google\Chrome\BLBeacon',
|
||||||
'/v',
|
'/v',
|
||||||
'version',
|
'version',
|
||||||
])).thenAnswer((Invocation invocation) async {
|
])).thenAnswer((Invocation invocation) async {
|
||||||
|
@ -196,7 +196,7 @@ class FuchsiaRemoteConnection {
|
|||||||
sshConfigPath ??= Platform.environment['FUCHSIA_SSH_CONFIG'];
|
sshConfigPath ??= Platform.environment['FUCHSIA_SSH_CONFIG'];
|
||||||
if (address == null) {
|
if (address == null) {
|
||||||
throw FuchsiaRemoteConnectionError(
|
throw FuchsiaRemoteConnectionError(
|
||||||
'No address supplied, and \$FUCHSIA_DEVICE_URL not found.');
|
r'No address supplied, and $FUCHSIA_DEVICE_URL not found.');
|
||||||
}
|
}
|
||||||
const String interfaceDelimiter = '%';
|
const String interfaceDelimiter = '%';
|
||||||
if (address.contains(interfaceDelimiter)) {
|
if (address.contains(interfaceDelimiter)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user