Skip to content

Commit e01cd81

Browse files
committed
Restore RFW to 100% coverage
Fixes flutter/flutter#106205 by regenerating goldens.
1 parent 2a508cb commit e01cd81

File tree

9 files changed

+262
-51
lines changed

9 files changed

+262
-51
lines changed

packages/rfw/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## NEXT
2+
3+
* Adds more testing to restore coverage to 100%.
4+
* Removes some dead code.
5+
16
## 1.0.11
27

38
* Adds more documentation in the README.md file!

packages/rfw/lib/src/dart/text.dart

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -738,13 +738,12 @@ enum _TokenizerMode {
738738
quoteEscapeUnicode2,
739739
quoteEscapeUnicode3,
740740
quoteEscapeUnicode4,
741-
endQuote,
742741
doubleQuoteEscape,
743742
doubleQuoteEscapeUnicode1,
744743
doubleQuoteEscapeUnicode2,
745744
doubleQuoteEscapeUnicode3,
746745
doubleQuoteEscapeUnicode4,
747-
endDoubleQuote,
746+
endQuote,
748747
slash,
749748
comment,
750749
}
@@ -1821,36 +1820,6 @@ Iterable<_Token> _tokenize(String file) sync* {
18211820
}
18221821
break;
18231822

1824-
case _TokenizerMode.endQuote:
1825-
switch (current) {
1826-
case -1:
1827-
yield _EofToken(line, column);
1828-
return;
1829-
case 0x0A: // U+000A LINE FEED (LF)
1830-
case 0x20: // U+0020 SPACE character
1831-
mode = _TokenizerMode.main;
1832-
break;
1833-
case 0x28: // U+0028 LEFT PARENTHESIS character (()
1834-
case 0x29: // U+0029 RIGHT PARENTHESIS character ())
1835-
case 0x2C: // U+002C COMMA character (,)
1836-
case 0x3A: // U+003A COLON character (:)
1837-
case 0x3B: // U+003B SEMICOLON character (;)
1838-
case 0x3D: // U+003D EQUALS SIGN character (=)
1839-
case 0x5B: // U+005B LEFT SQUARE BRACKET character ([)
1840-
case 0x5D: // U+005D RIGHT SQUARE BRACKET character (])
1841-
case 0x7B: // U+007B LEFT CURLY BRACKET character ({)
1842-
case 0x7D: // U+007D RIGHT CURLY BRACKET character (})
1843-
yield _SymbolToken(current, line, column);
1844-
mode = _TokenizerMode.main;
1845-
break;
1846-
case 0x2E: // U+002E FULL STOP character (.)
1847-
mode = _TokenizerMode.dot1;
1848-
break;
1849-
default:
1850-
throw ParserException('Unexpected character ${_describeRune(current)} after end quote', line, column);
1851-
}
1852-
break;
1853-
18541823
case _TokenizerMode.doubleQuote:
18551824
switch (current) {
18561825
case -1:
@@ -2048,7 +2017,7 @@ Iterable<_Token> _tokenize(String file) sync* {
20482017
}
20492018
break;
20502019

2051-
case _TokenizerMode.endDoubleQuote:
2020+
case _TokenizerMode.endQuote:
20522021
switch (current) {
20532022
case -1:
20542023
yield _EofToken(line, column);
@@ -2074,7 +2043,7 @@ Iterable<_Token> _tokenize(String file) sync* {
20742043
mode = _TokenizerMode.dot1;
20752044
break;
20762045
default:
2077-
throw ParserException('Unexpected character ${_describeRune(current)} after end doublequote', line, column);
2046+
throw ParserException('Unexpected character ${_describeRune(current)} after end quote', line, column);
20782047
}
20792048
break;
20802049

packages/rfw/test/argument_decoders_test.dart

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@
55
// This file is hand-formatted.
66

77
import 'dart:io' show Platform;
8+
import 'dart:ui' as ui;
89

910
import 'package:flutter/material.dart';
1011
import 'package:flutter_test/flutter_test.dart';
1112
import 'package:rfw/formats.dart' show parseLibraryFile;
1213
import 'package:rfw/rfw.dart';
1314

15+
final bool masterChannel =
16+
!Platform.environment.containsKey('CHANNEL') ||
17+
Platform.environment['CHANNEL'] == 'master';
18+
1419
// See Contributing section of README.md file.
15-
final bool runGoldens = Platform.isLinux &&
16-
(!Platform.environment.containsKey('CHANNEL') ||
17-
Platform.environment['CHANNEL'] == 'master');
20+
final bool runGoldens = Platform.isLinux && masterChannel;
1821

1922
void main() {
2023
testWidgets('String example', (WidgetTester tester) async {
@@ -238,13 +241,17 @@ void main() {
238241
..update(const LibraryName(<String>['core']), createCoreWidgets())
239242
..update(const LibraryName(<String>['test']), parseLibraryFile('import core; widget root = SizedBox();'));
240243
final DynamicContent data = DynamicContent();
244+
final List<String> eventLog = <String>[];
241245
await tester.pumpWidget(
242246
Directionality(
243247
textDirection: TextDirection.rtl,
244248
child: RemoteWidget(
245249
runtime: runtime,
246250
data: data,
247251
widget: const FullyQualifiedWidgetName(LibraryName(<String>['test']), 'root'),
252+
onEvent: (String eventName, DynamicMap eventArguments) {
253+
eventLog.add('$eventName $eventArguments');
254+
},
248255
),
249256
),
250257
);
@@ -256,6 +263,20 @@ void main() {
256263
insets: ArgumentDecoders.edgeInsets(source, <Object>['insets']) ?? EdgeInsets.zero,
257264
);
258265
};
266+
ArgumentDecoders.gradientDecoders['custom'] = (DataSource source, List<Object> key) {
267+
return const RadialGradient(
268+
center: Alignment(0.7, -0.6),
269+
radius: 0.2,
270+
colors: <Color>[ Color(0xFFFFFF00), Color(0xFF0099FF) ],
271+
stops: <double>[0.4, 1.0],
272+
);
273+
};
274+
ArgumentDecoders.shapeBorderDecoders['custom'] = (DataSource source, List<Object> key) {
275+
return StarBorder(
276+
side: ArgumentDecoders.borderSide(source, <Object>[...key, 'side']) ?? const BorderSide(width: 2.0, color: Color(0xFFFFFFFF)),
277+
points: source.v<double>(<Object>[...key, 'points']) ?? 5.0,
278+
);
279+
};
259280

260281
runtime.update(const LibraryName(<String>['test']), parseLibraryFile('''
261282
import core;
@@ -297,6 +318,7 @@ void main() {
297318
color: 0xFF8811FF,
298319
blendMode: "xor",
299320
},
321+
onError: event 'image-error-event' { },
300322
},
301323
gradient: {
302324
type: 'linear',
@@ -338,7 +360,7 @@ void main() {
338360
{ type: 'continuous', borderRadius: [ { x: 60.0 }, { x: 80.0 }, { x: 0.0 }, { x: 20.0, y: 50.0 } ], side: { width: 10.0, color: 0xFFEEFF33 } },
339361
{ type: 'rounded', borderRadius: [ { x: 20.0 } ], side: { width: 10.0, color: 0xFF00CCFF } },
340362
{ type: 'stadium', side: { width: 10.0, color: 0xFF00FFFF } },
341-
{ type: 'custom', side: { width: 100.0, color: 0xFFFF0000 } }, // should not render
363+
{ type: 'custom', side: { width: 5.0, color: 0xFFFFFF00 }, points: 6 }, // star
342364
],
343365
gradient: {
344366
type: 'radial',
@@ -349,10 +371,13 @@ void main() {
349371
);
350372
'''));
351373
await tester.pump();
374+
expect(eventLog, hasLength(1));
375+
expect(eventLog.first, startsWith('image-error-event {exception: HTTP request failed, statusCode: 400, x-invalid:'));
376+
eventLog.clear();
352377
await expectLater(
353378
find.byType(RemoteWidget),
354379
matchesGoldenFile('goldens/argument_decoders_test.containers.png'),
355-
skip: 'https://github.com/flutter/flutter/issues/106205'
380+
skip: !runGoldens,
356381
);
357382
expect(find.byType(DecoratedBox), findsNWidgets(6));
358383
expect(
@@ -368,6 +393,16 @@ void main() {
368393
'opacity 1.0, FilterQuality.low)',
369394
);
370395

396+
ArgumentDecoders.colorFilterDecoders['custom'] = (DataSource source, List<Object> key) {
397+
return const ColorFilter.mode(Color(0x12345678), BlendMode.xor);
398+
};
399+
ArgumentDecoders.maskFilterDecoders['custom'] = (DataSource source, List<Object> key) {
400+
return const MaskFilter.blur(BlurStyle.outer, 0.5);
401+
};
402+
ArgumentDecoders.shaderDecoders['custom'] = (DataSource source, List<Object> key) {
403+
return ui.Gradient.linear(Offset.zero, const Offset(100.0, 100.0), const <Color>[Color(0xFFFFFF00), Color(0xFF00FFFF)]);
404+
};
405+
371406
runtime.update(const LibraryName(<String>['test']), parseLibraryFile('''
372407
import core;
373408
widget root = Column(
@@ -428,7 +463,7 @@ void main() {
428463
await expectLater(
429464
find.byType(RemoteWidget),
430465
matchesGoldenFile('goldens/argument_decoders_test.text.png'),
431-
skip: 'https://github.com/flutter/flutter/issues/106205'
466+
skip: !runGoldens,
432467
);
433468

434469
runtime.update(const LibraryName(<String>['test']), parseLibraryFile('''
@@ -451,7 +486,7 @@ void main() {
451486
await expectLater(
452487
find.byType(RemoteWidget),
453488
matchesGoldenFile('goldens/argument_decoders_test.gridview.fixed.png'),
454-
skip: 'https://github.com/flutter/flutter/issues/106205'
489+
skip: !runGoldens,
455490
);
456491

457492
runtime.update(const LibraryName(<String>['test']), parseLibraryFile('''
@@ -474,7 +509,7 @@ void main() {
474509
await expectLater(
475510
find.byType(RemoteWidget),
476511
matchesGoldenFile('goldens/argument_decoders_test.gridview.max.png'),
477-
skip: 'https://github.com/flutter/flutter/issues/106205'
512+
skip: !runGoldens,
478513
);
479514

480515
int sawGridDelegateDecoder = 0;
@@ -504,7 +539,9 @@ void main() {
504539
await expectLater(
505540
find.byType(RemoteWidget),
506541
matchesGoldenFile('goldens/argument_decoders_test.gridview.custom.png'),
507-
skip: 'https://github.com/flutter/flutter/issues/106205'
542+
skip: !runGoldens,
508543
);
509-
}, skip: !runGoldens);
544+
545+
expect(eventLog, isEmpty);
546+
}, skip: !masterChannel); // https://github.com/flutter/flutter/pull/129851
510547
}
35 KB
Loading
11 Bytes
Loading
3.31 KB
Loading

packages/rfw/test/material_widgets_test.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,15 @@ void main() {
140140
await expectLater(
141141
find.byType(RemoteWidget),
142142
matchesGoldenFile('goldens/material_test.scaffold.png'),
143+
skip: !runGoldens,
143144
);
144145
await tester.tapAt(const Offset(20.0, 20.0));
145146
await tester.pump();
146147
await tester.pump(const Duration(seconds: 1));
147148
await expectLater(
148149
find.byType(RemoteWidget),
149150
matchesGoldenFile('goldens/material_test.drawer.png'),
151+
skip: !runGoldens,
150152
);
151-
}, skip: !runGoldens);
153+
});
152154
}

0 commit comments

Comments
 (0)