Skip to content

Commit 046b213

Browse files
committed
update: unit test
1 parent 907c026 commit 046b213

File tree

1 file changed

+169
-3
lines changed

1 file changed

+169
-3
lines changed

test/sliver_observer_test.dart

Lines changed: 169 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,8 @@ void main() {
560560
GlobalKey nestedScrollViewKey = GlobalKey();
561561
NestedScrollUtil? nestedScrollUtil;
562562
Map<BuildContext, ObserveModel> resultMap = {};
563+
int sliverListItemCount = 30;
564+
int sliverGridItemCount = 150;
563565

564566
Widget _buildSliverGridView() {
565567
return SliverGrid(
@@ -582,7 +584,7 @@ void main() {
582584
),
583585
);
584586
},
585-
childCount: 150,
587+
childCount: sliverGridItemCount,
586588
),
587589
);
588590
}
@@ -606,7 +608,7 @@ void main() {
606608
),
607609
);
608610
},
609-
childCount: 30,
611+
childCount: sliverListItemCount,
610612
),
611613
);
612614
}
@@ -673,7 +675,12 @@ void main() {
673675
);
674676
}
675677

676-
Widget resetAll() {
678+
Widget resetAll({
679+
int listItemCount = 30,
680+
int gridItemCount = 150,
681+
}) {
682+
sliverListItemCount = listItemCount;
683+
sliverGridItemCount = gridItemCount;
677684
resultMap = {};
678685
nestedScrollUtil = NestedScrollUtil();
679686
outerScrollController = ScrollController();
@@ -956,6 +963,165 @@ void main() {
956963
);
957964
},
958965
);
966+
967+
testWidgets('Check animateTo Future completion', (tester) async {
968+
resetAll();
969+
await tester.pumpWidget(widget);
970+
971+
bool isFutureCompleted = false;
972+
const Duration duration = Duration(seconds: 2);
973+
974+
// Start to scroll
975+
Future future = nestedScrollUtil!.animateTo(
976+
nestedScrollViewKey: nestedScrollViewKey,
977+
observerController: observerController,
978+
sliverContext: _sliverBodyListCtx,
979+
position: NestedScrollUtilPosition.body,
980+
index: 5,
981+
duration: duration,
982+
curve: Curves.linear,
983+
);
984+
985+
future.whenComplete(() {
986+
isFutureCompleted = true;
987+
});
988+
989+
// Wait for scroll to start
990+
await tester.pump();
991+
992+
// Verify scroll hasn't completed
993+
expect(isFutureCompleted, false);
994+
995+
// Wait for scroll to complete
996+
const intervalDuration = Duration(milliseconds: 100);
997+
int intervalTime = 0;
998+
while (tester.binding.hasScheduledFrame) {
999+
await tester.pump(intervalDuration);
1000+
intervalTime++;
1001+
}
1002+
// Make sure the scroll executes and completes correctly.
1003+
expect(
1004+
intervalTime,
1005+
greaterThanOrEqualTo(
1006+
duration.inMilliseconds ~/ intervalDuration.inMilliseconds,
1007+
),
1008+
);
1009+
expect(isFutureCompleted, true);
1010+
1011+
// Scroll back to index 0
1012+
isFutureCompleted = false;
1013+
intervalTime = 0;
1014+
future = nestedScrollUtil!.animateTo(
1015+
nestedScrollViewKey: nestedScrollViewKey,
1016+
observerController: observerController,
1017+
sliverContext: _sliverBodyListCtx,
1018+
position: NestedScrollUtilPosition.body,
1019+
index: 0,
1020+
duration: duration,
1021+
curve: Curves.easeInOut,
1022+
);
1023+
1024+
future.whenComplete(() {
1025+
isFutureCompleted = true;
1026+
});
1027+
1028+
// Wait for scroll to start
1029+
await tester.pump();
1030+
1031+
// Verify scroll hasn't completed
1032+
expect(isFutureCompleted, false);
1033+
1034+
// Wait for scroll to complete
1035+
while (tester.binding.hasScheduledFrame) {
1036+
await tester.pump(intervalDuration);
1037+
intervalTime++;
1038+
}
1039+
// Make sure the scroll executes and completes correctly.
1040+
expect(
1041+
intervalTime,
1042+
greaterThanOrEqualTo(
1043+
duration.inMilliseconds ~/ intervalDuration.inMilliseconds,
1044+
),
1045+
);
1046+
expect(isFutureCompleted, true);
1047+
});
1048+
1049+
testWidgets('Check jumpTo Future completion', (tester) async {
1050+
int listItemCount = 100;
1051+
resetAll(
1052+
listItemCount: listItemCount,
1053+
);
1054+
await tester.pumpWidget(widget);
1055+
1056+
bool isFutureCompleted = false;
1057+
1058+
// Start to scroll
1059+
Future future = nestedScrollUtil!.jumpTo(
1060+
nestedScrollViewKey: nestedScrollViewKey,
1061+
observerController: observerController,
1062+
sliverContext: _sliverBodyListCtx,
1063+
position: NestedScrollUtilPosition.body,
1064+
// Need to use an unrendered item's index to force paging to find it.
1065+
index: listItemCount - 1,
1066+
);
1067+
1068+
future.whenComplete(() {
1069+
isFutureCompleted = true;
1070+
});
1071+
1072+
// Wait for scroll to start
1073+
await tester.pump();
1074+
1075+
// Verify scroll hasn't completed
1076+
expect(isFutureCompleted, false);
1077+
1078+
// Wait for scroll to complete
1079+
const intervalDuration = Duration(milliseconds: 100);
1080+
int intervalTime = 0;
1081+
while (tester.binding.hasScheduledFrame) {
1082+
await tester.pump(intervalDuration);
1083+
intervalTime++;
1084+
}
1085+
// Make sure the scroll executes and completes correctly.
1086+
expect(
1087+
intervalTime,
1088+
greaterThanOrEqualTo(0),
1089+
);
1090+
expect(isFutureCompleted, true);
1091+
1092+
// Scroll back to index 0
1093+
isFutureCompleted = false;
1094+
intervalTime = 0;
1095+
future = nestedScrollUtil!.jumpTo(
1096+
nestedScrollViewKey: nestedScrollViewKey,
1097+
observerController: observerController,
1098+
sliverContext: _sliverBodyListCtx,
1099+
position: NestedScrollUtilPosition.body,
1100+
index: 0,
1101+
);
1102+
1103+
future.whenComplete(() {
1104+
isFutureCompleted = true;
1105+
});
1106+
1107+
// Wait for scroll to start
1108+
await tester.pump();
1109+
1110+
// Verify scroll hasn't completed
1111+
expect(isFutureCompleted, false);
1112+
1113+
// Wait for scroll to complete
1114+
while (tester.binding.hasScheduledFrame) {
1115+
await tester.pump(intervalDuration);
1116+
intervalTime++;
1117+
}
1118+
// Make sure the scroll executes and completes correctly.
1119+
expect(
1120+
intervalTime,
1121+
greaterThanOrEqualTo(0),
1122+
);
1123+
expect(isFutureCompleted, true);
1124+
});
9591125
},
9601126
);
9611127

0 commit comments

Comments
 (0)