From 41db0954d6369036fa79f1414b6d5353a1c73c41 Mon Sep 17 00:00:00 2001 From: Juan Tugores Date: Wed, 6 Mar 2024 09:34:52 -0800 Subject: [PATCH] Improve runtime coverage --- packages/rfw/coverage/lcov.info | 549 +++++++++++----------- packages/rfw/lib/src/flutter/runtime.dart | 4 - packages/rfw/test/runtime_test.dart | 70 ++- 3 files changed, 341 insertions(+), 282 deletions(-) diff --git a/packages/rfw/coverage/lcov.info b/packages/rfw/coverage/lcov.info index 146ff806c659..0522ddd7fccf 100644 --- a/packages/rfw/coverage/lcov.info +++ b/packages/rfw/coverage/lcov.info @@ -3204,320 +3204,317 @@ DA:842,2 DA:843,1 DA:845,2 DA:847,7 -DA:848,2 -DA:849,0 -DA:850,0 +DA:848,4 +DA:850,7 +DA:851,2 DA:852,4 -DA:854,7 -DA:855,2 -DA:856,4 -DA:857,2 +DA:853,2 +DA:856,2 +DA:859,7 DA:860,2 -DA:863,7 -DA:864,2 -DA:865,2 -DA:866,1 -DA:868,3 -DA:870,7 -DA:871,2 -DA:872,4 -DA:873,4 +DA:861,2 +DA:862,1 +DA:864,3 +DA:866,7 +DA:867,2 +DA:868,4 +DA:869,4 +DA:872,2 +DA:875,7 DA:876,2 -DA:879,7 -DA:880,2 -DA:881,2 -DA:887,4 -DA:889,2 -DA:896,14 -DA:899,6 -DA:900,5 -DA:901,5 -DA:902,10 -DA:904,6 -DA:905,1 -DA:906,1 -DA:907,2 -DA:912,7 -DA:913,14 -DA:916,14 -DA:919,12 +DA:877,2 +DA:883,4 +DA:885,2 +DA:892,14 +DA:895,6 +DA:896,5 +DA:897,5 +DA:898,10 +DA:900,6 +DA:901,1 +DA:902,1 +DA:903,2 +DA:908,7 +DA:909,14 +DA:912,14 +DA:915,12 +DA:916,6 +DA:917,12 DA:920,6 -DA:921,12 -DA:924,6 +DA:922,6 DA:926,6 -DA:930,6 -DA:932,2 -DA:933,2 -DA:934,2 -DA:937,6 -DA:939,12 -DA:940,12 -DA:941,12 -DA:945,5 -DA:951,5 -DA:952,9 -DA:953,4 -DA:955,8 -DA:958,4 -DA:959,3 -DA:960,1 +DA:928,2 +DA:929,2 +DA:930,2 +DA:933,6 +DA:935,12 +DA:936,12 +DA:937,12 +DA:941,5 +DA:947,5 +DA:948,9 +DA:949,4 +DA:951,8 +DA:954,4 +DA:955,3 +DA:956,1 +DA:958,1 DA:962,1 -DA:966,1 -DA:967,1 -DA:969,2 -DA:970,2 -DA:977,1 -DA:978,1 -DA:979,3 -DA:982,4 -DA:983,1 -DA:989,7 +DA:963,1 +DA:965,2 +DA:966,2 +DA:973,1 +DA:974,1 +DA:975,3 +DA:978,4 +DA:979,1 +DA:985,7 +DA:992,14 +DA:993,7 +DA:994,10 DA:996,14 -DA:997,7 -DA:998,10 -DA:1000,14 -DA:1001,14 -DA:1002,14 -DA:1006,7 -DA:1012,7 -DA:1015,14 -DA:1032,1 -DA:1033,4 -DA:1037,7 -DA:1042,7 -DA:1044,3 -DA:1045,3 -DA:1047,6 -DA:1055,7 -DA:1066,14 -DA:1071,1 +DA:997,14 +DA:998,14 +DA:1002,7 +DA:1008,7 +DA:1011,14 +DA:1028,1 +DA:1029,4 +DA:1033,7 +DA:1038,7 +DA:1040,3 +DA:1041,3 +DA:1043,6 +DA:1051,7 +DA:1062,14 +DA:1067,1 +DA:1073,1 DA:1077,1 -DA:1081,1 -DA:1092,2 -DA:1095,1 -DA:1096,3 -DA:1100,2 +DA:1088,2 +DA:1091,1 +DA:1092,3 +DA:1096,2 +DA:1102,2 DA:1106,2 -DA:1110,2 -DA:1121,2 -DA:1122,2 -DA:1128,2 -DA:1129,2 +DA:1117,2 +DA:1118,2 +DA:1124,2 +DA:1125,2 +DA:1127,3 +DA:1130,1 DA:1131,3 -DA:1134,1 -DA:1135,3 -DA:1139,7 -DA:1157,7 -DA:1158,7 -DA:1166,7 -DA:1168,7 -DA:1169,7 +DA:1135,7 +DA:1153,7 +DA:1154,7 +DA:1162,7 +DA:1164,7 +DA:1165,7 +DA:1168,6 +DA:1170,6 +DA:1171,24 DA:1172,6 -DA:1174,6 -DA:1175,24 -DA:1176,6 -DA:1178,48 -DA:1179,6 -DA:1183,7 +DA:1174,48 +DA:1175,6 +DA:1179,7 +DA:1181,7 +DA:1182,7 DA:1185,7 -DA:1186,7 -DA:1189,7 -DA:1190,35 +DA:1186,35 +DA:1187,7 +DA:1188,4 +DA:1189,6 DA:1191,7 -DA:1192,4 -DA:1193,6 -DA:1195,7 -DA:1197,21 -DA:1198,7 -DA:1199,8 +DA:1193,21 +DA:1194,7 +DA:1195,8 +DA:1199,1 +DA:1200,3 DA:1203,1 -DA:1204,3 +DA:1204,2 +DA:1205,1 DA:1207,1 DA:1208,2 DA:1209,1 +DA:1210,1 DA:1211,1 -DA:1212,2 -DA:1213,1 +DA:1212,3 DA:1214,1 -DA:1215,1 -DA:1216,3 +DA:1215,3 +DA:1217,3 DA:1218,1 -DA:1219,3 -DA:1221,3 +DA:1220,2 DA:1222,1 -DA:1224,2 -DA:1226,1 -DA:1227,1 -DA:1228,3 -DA:1230,3 -DA:1231,3 -DA:1233,3 -DA:1234,1 -DA:1236,1 +DA:1223,1 +DA:1224,3 +DA:1226,3 +DA:1227,3 +DA:1229,3 +DA:1230,1 +DA:1232,1 +DA:1235,3 +DA:1237,1 DA:1239,3 -DA:1241,1 -DA:1243,3 -DA:1251,7 -DA:1252,16 -DA:1253,2 -DA:1255,14 -DA:1256,14 +DA:1247,7 +DA:1248,16 +DA:1249,2 +DA:1251,14 +DA:1252,14 +DA:1255,7 +DA:1257,33 +DA:1258,7 DA:1259,7 -DA:1261,33 -DA:1262,7 -DA:1263,7 +DA:1262,3 +DA:1264,3 +DA:1265,3 DA:1266,3 -DA:1268,3 -DA:1269,3 -DA:1270,3 +DA:1269,5 +DA:1271,5 +DA:1272,5 DA:1273,5 +DA:1274,10 DA:1275,5 -DA:1276,5 -DA:1277,5 -DA:1278,10 -DA:1279,5 +DA:1278,6 DA:1282,6 -DA:1286,6 -DA:1288,6 -DA:1289,6 -DA:1292,5 +DA:1284,6 +DA:1285,6 +DA:1288,5 +DA:1290,5 +DA:1291,5 +DA:1292,32 DA:1294,5 -DA:1295,5 -DA:1296,32 -DA:1298,5 -DA:1301,7 -DA:1303,7 -DA:1304,7 -DA:1305,48 -DA:1310,4 +DA:1297,7 +DA:1299,7 +DA:1300,7 +DA:1301,48 +DA:1306,4 +DA:1308,4 +DA:1309,4 +DA:1310,8 +DA:1311,8 DA:1312,4 DA:1313,4 -DA:1314,8 -DA:1315,8 +DA:1314,4 +DA:1315,4 DA:1316,4 -DA:1317,4 -DA:1318,4 -DA:1319,4 -DA:1320,4 -DA:1321,28 -DA:1323,5 -DA:1327,3 -DA:1330,1 -DA:1331,5 -DA:1335,1 -DA:1337,1 -DA:1340,0 -DA:1342,0 -DA:1345,1 +DA:1317,28 +DA:1319,5 +DA:1323,3 +DA:1326,1 +DA:1327,5 +DA:1331,1 +DA:1333,1 +DA:1336,1 +DA:1338,1 +DA:1341,1 +DA:1346,1 +DA:1347,1 +DA:1348,1 +DA:1349,1 DA:1350,1 -DA:1351,1 -DA:1352,1 -DA:1353,1 -DA:1354,1 -DA:1355,2 -DA:1356,2 -DA:1357,2 -DA:1362,0 -DA:1365,6 -DA:1367,19 -DA:1370,6 -DA:1372,6 -DA:1373,6 -DA:1374,5 -DA:1375,5 -DA:1376,2 -DA:1378,6 -DA:1379,10 -DA:1380,5 -DA:1381,9 -DA:1382,8 -DA:1383,4 -DA:1384,4 -DA:1386,12 -DA:1388,16 -DA:1389,1 -DA:1390,3 -DA:1391,6 -DA:1406,7 -DA:1407,7 +DA:1351,2 +DA:1352,2 +DA:1353,2 +DA:1358,5 +DA:1361,6 +DA:1363,19 +DA:1366,6 +DA:1368,6 +DA:1369,6 +DA:1370,5 +DA:1371,5 +DA:1372,2 +DA:1374,6 +DA:1375,10 +DA:1376,5 +DA:1377,9 +DA:1378,8 +DA:1379,4 +DA:1380,4 +DA:1382,12 +DA:1384,16 +DA:1385,1 +DA:1386,3 +DA:1387,6 +DA:1402,7 +DA:1403,7 +DA:1404,14 +DA:1405,4 DA:1408,14 -DA:1409,4 -DA:1412,14 +DA:1410,7 +DA:1411,21 +DA:1413,7 DA:1414,7 -DA:1415,21 -DA:1417,7 -DA:1418,7 -DA:1419,7 -DA:1422,9 -DA:1423,2 -DA:1425,14 -DA:1428,14 -DA:1429,7 -DA:1433,4 -DA:1434,8 -DA:1435,12 -DA:1439,2 -DA:1440,2 -DA:1442,4 -DA:1443,6 +DA:1415,7 +DA:1418,9 +DA:1419,2 +DA:1421,14 +DA:1424,14 +DA:1425,7 +DA:1429,4 +DA:1430,8 +DA:1431,12 +DA:1435,2 +DA:1436,2 +DA:1438,4 +DA:1439,6 +DA:1440,4 +DA:1442,2 DA:1444,4 -DA:1446,2 -DA:1448,4 -DA:1449,2 -DA:1452,1 -DA:1453,1 -DA:1454,3 +DA:1445,2 +DA:1448,1 +DA:1449,1 +DA:1450,3 +DA:1451,2 DA:1455,2 -DA:1459,2 +DA:1456,1 +DA:1459,1 DA:1460,1 -DA:1463,1 -DA:1464,1 -DA:1466,2 -DA:1467,3 -DA:1470,3 -DA:1474,1 +DA:1462,2 +DA:1463,3 +DA:1466,3 +DA:1470,1 +DA:1471,2 +DA:1473,2 DA:1475,2 -DA:1477,2 +DA:1476,1 DA:1479,2 -DA:1480,1 -DA:1483,2 -DA:1484,4 -DA:1485,3 -DA:1486,2 -DA:1491,7 -DA:1494,21 -DA:1497,14 -DA:1498,14 -DA:1499,7 -DA:1500,7 -DA:1501,7 -DA:1502,7 -DA:1506,1 -DA:1508,1 -DA:1509,6 -DA:1519,14 -DA:1521,7 -DA:1522,28 -DA:1528,4 -DA:1530,4 -DA:1531,12 -DA:1532,12 -DA:1535,7 -DA:1536,28 -DA:1540,2 -DA:1541,10 -DA:1549,4 -DA:1552,2 -DA:1553,6 -DA:1554,2 +DA:1480,4 +DA:1481,3 +DA:1482,2 +DA:1487,7 +DA:1490,21 +DA:1493,14 +DA:1494,14 +DA:1495,7 +DA:1496,7 +DA:1497,7 +DA:1498,7 +DA:1502,1 +DA:1504,1 +DA:1505,6 +DA:1515,14 +DA:1517,7 +DA:1518,28 +DA:1524,4 +DA:1526,4 +DA:1527,12 +DA:1528,12 +DA:1531,7 +DA:1532,28 +DA:1536,2 +DA:1537,10 +DA:1545,4 +DA:1548,2 +DA:1549,6 +DA:1550,2 +DA:1553,2 +DA:1554,4 DA:1557,2 -DA:1558,4 -DA:1561,2 -DA:1562,8 -DA:1566,3 -DA:1567,6 -DA:1569,3 -DA:1572,3 -LF:576 -LH:571 +DA:1558,8 +DA:1562,3 +DA:1563,6 +DA:1565,3 +DA:1568,3 +LF:573 +LH:573 end_of_record diff --git a/packages/rfw/lib/src/flutter/runtime.dart b/packages/rfw/lib/src/flutter/runtime.dart index cfcca7208b59..f66b7cd22547 100644 --- a/packages/rfw/lib/src/flutter/runtime.dart +++ b/packages/rfw/lib/src/flutter/runtime.dart @@ -845,10 +845,6 @@ abstract class _CurriedWidget extends BlobNode { current = dataResolver(current.parts); continue; } else if (current is WidgetBuilderArgReference) { - if (index < parts.length) { - current = current.constructReference(parts.sublist(index)); - index = parts.length; - } current = widgetBuilderArgResolver([current.argumentName, ...current.parts]); continue; } else if (current is BoundArgsReference) { diff --git a/packages/rfw/test/runtime_test.dart b/packages/rfw/test/runtime_test.dart index 6c30a7fa5ec6..b368607aceb2 100644 --- a/packages/rfw/test/runtime_test.dart +++ b/packages/rfw/test/runtime_test.dart @@ -1089,12 +1089,47 @@ void main() { expect(log, ['leaf: 2', 'root: {a: [2, 3], b: [q, r]}', 'root: {a: [2, 3], b: [q, r], c: test}']); }); - testWidgets('Widget builders - work when scope is not used', (WidgetTester tester) async { + testWidgets('Data source - optional builder works', (WidgetTester tester) async { const LibraryName coreLibraryName = LibraryName(['core']); const LibraryName localLibraryName = LibraryName(['local']); const LibraryName remoteLibraryName = LibraryName(['remote']); final Runtime runtime = Runtime(); final DynamicContent data = DynamicContent(); + runtime.update(coreLibraryName, createCoreWidgets()); + runtime.update(localLibraryName, LocalWidgetLibrary( { + 'Builder': (BuildContext context, DataSource source) { + final Widget? builder = source.optionalBuilder(['builder'], {}); + return builder ?? Text('Hello World!', textDirection: TextDirection.ltr); + }, + })); + runtime.update(remoteLibraryName, parseLibraryFile(''' + import core; + import local; + + widget test = Builder( + builder: Text(text: 'Not a builder :/'), + ); + ''')); + await tester.pumpWidget(RemoteWidget( + runtime: runtime, + data: data, + widget: const FullyQualifiedWidgetName(remoteLibraryName, 'test'), + )); + + + final Finder textFinder = find.byType(Text); + expect(textFinder, findsOneWidget); + expect(tester.widget(textFinder).data, 'Hello World!'); + }); + + testWidgets('Data source - builder returns an error widget', (WidgetTester tester) async { + const LibraryName coreLibraryName = LibraryName(['core']); + const LibraryName localLibraryName = LibraryName(['local']); + const LibraryName remoteLibraryName = LibraryName(['remote']); + final Runtime runtime = Runtime(); + final DynamicContent data = DynamicContent(); + const expectedErrorMessage = 'Not a builder at [builder] (got core:Text {} {text: Not a builder :/}) for local:Builder.'; + runtime.update(coreLibraryName, createCoreWidgets()); runtime.update(localLibraryName, LocalWidgetLibrary( { 'Builder': (BuildContext context, DataSource source) { @@ -1106,7 +1141,7 @@ void main() { import local; widget test = Builder( - builder: (scope) => Text(text: 'Hello World!', textDirection: 'ltr'), + builder: Text(text: 'Not a builder :/'), ); ''')); await tester.pumpWidget(RemoteWidget( @@ -1115,8 +1150,39 @@ void main() { widget: const FullyQualifiedWidgetName(remoteLibraryName, 'test'), )); + expect(tester.takeException().toString(), contains(expectedErrorMessage)); + expect(find.byType(ErrorWidget), findsOneWidget); + expect(tester.widget(find.byType(ErrorWidget)).message, expectedErrorMessage); + }); + testWidgets('Widget builders - work when scope is not used', (WidgetTester tester) async { + const LibraryName coreLibraryName = LibraryName(['core']); + const LibraryName localLibraryName = LibraryName(['local']); + const LibraryName remoteLibraryName = LibraryName(['remote']); + final Runtime runtime = Runtime(); + final DynamicContent data = DynamicContent(); final Finder textFinder = find.byType(Text); + + runtime.update(coreLibraryName, createCoreWidgets()); + runtime.update(localLibraryName, LocalWidgetLibrary( { + 'Builder': (BuildContext context, DataSource source) { + return source.builder(['builder'], {}); + }, + })); + runtime.update(remoteLibraryName, parseLibraryFile(''' + import core; + import local; + + widget test = Builder( + builder: (scope) => Text(text: 'Hello World!', textDirection: 'ltr'), + ); + ''')); + await tester.pumpWidget(RemoteWidget( + runtime: runtime, + data: data, + widget: const FullyQualifiedWidgetName(remoteLibraryName, 'test'), + )); + expect(textFinder, findsOneWidget); expect(tester.widget(textFinder).data, 'Hello World!'); });