diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..4d6eddbe818d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..0b724080642f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..c8e9d7674bcc
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..24e268a56e04
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..dd139cba3624
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..6a30a914f831
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..c9f13e26b255
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..d56efbf55d84
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalGrid.png
new file mode 100644
index 000000000000..33ec36eaf564
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalList.png
new file mode 100644
index 000000000000..2c9ef3b2f639
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenVerticalGrid.png
new file mode 100644
index 000000000000..260974615c9e
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png
new file mode 100644
index 000000000000..9252794d4965
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalGrid.png
new file mode 100644
index 000000000000..23a65475cf68
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalList.png
new file mode 100644
index 000000000000..57ee45959fef
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenVerticalGrid.png
new file mode 100644
index 000000000000..ab175c613f0f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..c7175895aaf7
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid.png
new file mode 100644
index 000000000000..29ad915ff1d3
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalList.png
new file mode 100644
index 000000000000..2557ee7aa7c2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid.png
new file mode 100644
index 000000000000..67b4aa8e2047
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithGroupedList.png
new file mode 100644
index 000000000000..dfdc9155c4a5
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollection.png
new file mode 100644
index 000000000000..9f03ecc78ef6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid.png
new file mode 100644
index 000000000000..07d7a8446a3b
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalGrid.png
new file mode 100644
index 000000000000..d9b9e0413fc2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalList.png
new file mode 100644
index 000000000000..23208b7f3bac
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalGrid.png
new file mode 100644
index 000000000000..db64543bb3ef
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalList.png
new file mode 100644
index 000000000000..8ecd5c899b0a
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHorizontalGrid.png
new file mode 100644
index 000000000000..32e74f31fc61
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHorizontalList.png
new file mode 100644
index 000000000000..2096469c1f88
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithVerticalGrid.png
new file mode 100644
index 000000000000..c9b0d971234e
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithVerticalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithVerticalList.png
new file mode 100644
index 000000000000..cad7c957a92d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionLTRWithVerticalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalGrid.png
new file mode 100644
index 000000000000..6f49755d16e2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalList.png
new file mode 100644
index 000000000000..904131bcdde5
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenVerticalGrid.png
new file mode 100644
index 000000000000..fd0e53bfdee4
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png
new file mode 100644
index 000000000000..a3fc1c84306d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalGrid.png
new file mode 100644
index 000000000000..f2a25ca85998
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalList.png
new file mode 100644
index 000000000000..2897507ae8c2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenVerticalGrid.png
new file mode 100644
index 000000000000..863dd9b0f1a9
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..b951f1438944
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid.png
new file mode 100644
index 000000000000..faeb6449779d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalList.png
new file mode 100644
index 000000000000..d05c69a2b446
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid.png
new file mode 100644
index 000000000000..11719de2d138
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithGroupedList.png
new file mode 100644
index 000000000000..2738242ec7b0
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollection.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollection.png
new file mode 100644
index 000000000000..83b3fa2366ab
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid.png
new file mode 100644
index 000000000000..c0439b84273f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLGroupHeaderAndFooterTemplate_WithVerticalGridAndGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLGroupHeaderAndFooterTemplate_WithVerticalGridAndGroupedList.png
new file mode 100644
index 000000000000..1966addfdf62
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLGroupHeaderAndFooterTemplate_WithVerticalGridAndGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLIsGrouped_WithHorizontalGridAndGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLIsGrouped_WithHorizontalGridAndGroupedList.png
new file mode 100644
index 000000000000..9737ca15b1d2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLIsGrouped_WithHorizontalGridAndGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLIsGrouped_WithVerticalGridAndGroupedList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLIsGrouped_WithVerticalGridAndGroupedList.png
new file mode 100644
index 000000000000..bb6aa74dff97
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLIsGrouped_WithVerticalGridAndGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalGrid.png
new file mode 100644
index 000000000000..f8017acabeb5
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalList.png
new file mode 100644
index 000000000000..095c82bb27b3
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalGrid.png
new file mode 100644
index 000000000000..02615b246203
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalList.png
new file mode 100644
index 000000000000..b00885ca7119
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalGrid.png
new file mode 100644
index 000000000000..d27c5478b533
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalList.png
new file mode 100644
index 000000000000..524959155be2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalGrid.png
new file mode 100644
index 000000000000..533de38d3a8f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalList.png
new file mode 100644
index 000000000000..42c32451ea56
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalGrid.png
new file mode 100644
index 000000000000..c278aeb139a0
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalList.png
new file mode 100644
index 000000000000..3fd255af7058
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalGrid.png
new file mode 100644
index 000000000000..6c4c17675d3d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalList.png
new file mode 100644
index 000000000000..f34f7c99c31f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHorizontalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHorizontalGrid.png
new file mode 100644
index 000000000000..471b20192245
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHorizontalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHorizontalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHorizontalList.png
new file mode 100644
index 000000000000..8245ca0f999f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithHorizontalList.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithVerticalGrid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithVerticalGrid.png
new file mode 100644
index 000000000000..5a90de083467
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithVerticalGrid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithVerticalList.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithVerticalList.png
new file mode 100644
index 000000000000..922b19eae6ac
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyFlowDirectionRTLWithVerticalList.png differ
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/CollectionViewGroupingPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/CollectionViewGroupingPage.xaml
index 01cc8eb8c28f..bff0b53694ed 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/CollectionViewGroupingPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/CollectionViewGroupingPage.xaml
@@ -12,6 +12,7 @@
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/GroupingOptionsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/GroupingOptionsPage.xaml.cs
index 07a6b3e4dedc..cd1849ba366f 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/GroupingOptionsPage.xaml.cs
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewGrouping/GroupingOptionsPage.xaml.cs
@@ -185,4 +185,16 @@ private void OnItemsLayoutChanged(object sender, CheckedChangedEventArgs e)
_viewModel.ItemsLayout = new GridItemsLayout(2, ItemsLayoutOrientation.Horizontal); // 2 rows
}
}
+
+ private void OnFlowDirectionChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (FlowDirectionLeftToRight.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.LeftToRight;
+ }
+ else if (FlowDirectionRightToLeft.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.RightToLeft;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewViewModel.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewViewModel.cs
index 4f820650a33c..b66b56fe7f7d 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewViewModel.cs
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/CollectionViewViewModel.cs
@@ -50,6 +50,7 @@ public class CollectionViewViewModel : INotifyPropertyChanged
private object _emptyView;
private object _header;
private object _footer;
+ private FlowDirection _flowDirection;
private DataTemplate _emptyViewTemplate;
private DataTemplate _headerTemplate;
private DataTemplate _footerTemplate;
@@ -155,6 +156,12 @@ public object Header
set { _header = value; OnPropertyChanged(); }
}
+ public FlowDirection FlowDirection
+ {
+ get => _flowDirection;
+ set { _flowDirection = value; OnPropertyChanged(); }
+ }
+
public object Footer
{
get => _footer;
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/CollectionViewEmptyViewPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/CollectionViewEmptyViewPage.xaml
index 4e52adfbb456..d02a2a9d2baa 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/CollectionViewEmptyViewPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/CollectionViewEmptyViewPage.xaml
@@ -6,21 +6,22 @@
Title="CollectionViewFeature">
+ Clicked="NavigateToOptionsPage_Clicked"
+ AutomationId="Options"/>
-
-
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml
index 93ac2c69c63e..241a830795a2 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml
@@ -242,6 +242,26 @@
AutomationId="ItemsSourceEmptyObservableCollection"/>
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml.cs
index 4186e8905925..418f1daed905 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml.cs
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/EmptyView/EmptyViewOptionsPage.xaml.cs
@@ -41,7 +41,6 @@ private void OnEmptyViewChanged(object sender, CheckedChangedEventArgs e)
grid.Children.Add(new Label
{
Text = "No Items Available(Grid View)",
- HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
TextColor = Colors.Blue
});
@@ -60,7 +59,6 @@ private void OnEmptyViewChanged(object sender, CheckedChangedEventArgs e)
Content = new Label
{
Text = "Custom Empty View (Sized)",
- HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
}
};
@@ -140,7 +138,6 @@ private void OnEmptyViewTemplateChanged(object sender, CheckedChangedEventArgs e
grid.Children.Add(new Label
{
Text = "No Template Items Available(Grid View)",
- HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
TextColor = Colors.Blue
});
@@ -163,7 +160,6 @@ private void OnEmptyViewTemplateChanged(object sender, CheckedChangedEventArgs e
Content = new Label
{
Text = "Custom EmptyViewTemplate (Sized)",
- HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center,
}
};
@@ -266,5 +262,17 @@ private void OnItemsLayoutChanged(object sender, CheckedChangedEventArgs e)
_viewModel.ItemsLayout = new GridItemsLayout(2, ItemsLayoutOrientation.Horizontal); // 2 rows
}
}
+
+ private void OnFlowDirectionChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (FlowDirectionLeftToRight.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.LeftToRight;
+ }
+ else if (FlowDirectionRightToLeft.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.RightToLeft;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/CollectionViewScrollPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/CollectionViewScrollPage.xaml
index 603b91f350f6..bad57ff28165 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/CollectionViewScrollPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/CollectionViewScrollPage.xaml
@@ -4,29 +4,38 @@
xmlns:local="clr-namespace:Maui.Controls.Sample"
x:Class="Maui.Controls.Sample.CollectionViewScrollPage"
Title="CollectionViewScrollPage">
-
+
-
+
-
-
+
+
-
+
-
-
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml
index 3ff7fa3563dd..2bb9d73c0c10 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml
@@ -54,7 +54,7 @@
CheckedChanged="OnItemsUpdatingScrollModeChanged"
AutomationId="ItemsUpdatingKeepLastItemInView"/>
-
+
-
-
@@ -160,6 +160,26 @@
AutomationId="ItemsLayoutHorizontalGrid"/>
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml.cs
index 766394abc621..c0b9d84a32d3 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml.cs
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/ScrollingFeature/ScrollBehaviorOptionsPage.xaml.cs
@@ -86,4 +86,16 @@ private void OnItemsLayoutChanged(object sender, CheckedChangedEventArgs e)
_viewModel.ItemsLayout = new GridItemsLayout(2, ItemsLayoutOrientation.Horizontal); // 2 rows
}
}
+
+ private void OnFlowDirectionChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (FlowDirectionLeftToRight.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.LeftToRight;
+ }
+ else if (FlowDirectionRightToLeft.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.RightToLeft;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/CollectionViewSelectionPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/CollectionViewSelectionPage.xaml
index fa292dd3d0a3..5894590e384f 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/CollectionViewSelectionPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/CollectionViewSelectionPage.xaml
@@ -30,6 +30,11 @@
x:Name="collectionView"
Grid.Row="0"
Grid.ColumnSpan="2"
+ FlowDirection="{Binding FlowDirection}"
+ Header="{Binding Header}"
+ Footer="{Binding Footer}"
+ HeaderTemplate="{Binding HeaderTemplate}"
+ FooterTemplate="{Binding FooterTemplate}"
ItemsSource="{Binding ItemsSource}"
ItemTemplate="{Binding ItemTemplate}"
ItemsLayout="{Binding ItemsLayout}"
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml
index c8b72fad7638..068cb76e0d91 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml
@@ -129,6 +129,115 @@
CheckedChanged="OnItemsSourceChanged"
AutomationId="ItemsSourceGroupedList"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml.cs
index 580dd578e63a..a6001de9fa3d 100644
--- a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml.cs
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/CollectionView/Selection/SelectionOptionsPage.xaml.cs
@@ -41,6 +41,139 @@ private void OnSelectionModeButtonClicked(object sender, EventArgs e)
}
}
}
+
+ private void OnFlowDirectionChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (FlowDirectionLeftToRight.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.LeftToRight;
+ }
+ else if (FlowDirectionRightToLeft.IsChecked)
+ {
+ _viewModel.FlowDirection = FlowDirection.RightToLeft;
+ }
+ }
+
+ private void OnHeaderChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (HeaderNone.IsChecked)
+ {
+ _viewModel.Header = null;
+ }
+ else if (HeaderString.IsChecked)
+ {
+ _viewModel.Header = "CollectionView Header(String)";
+ }
+ else if (HeaderGrid.IsChecked)
+ {
+ Grid grid = new Grid
+ {
+ BackgroundColor = Colors.LightGray,
+ Padding = new Thickness(10)
+ };
+ grid.Children.Add(new Label
+ {
+ Text = "CollectionView Header(Grid View)",
+ FontSize = 18,
+ HorizontalOptions = LayoutOptions.Center,
+ VerticalOptions = LayoutOptions.Center,
+ TextColor = Colors.Blue,
+ AutomationId = "HeaderViewLabel"
+ });
+ _viewModel.Header = grid;
+ }
+ }
+
+ private void OnFooterChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (FooterNone.IsChecked)
+ {
+ _viewModel.Footer = null;
+ }
+ else if (FooterString.IsChecked)
+ {
+ _viewModel.Footer = "CollectionView Footer(String)";
+ }
+ else if (FooterGrid.IsChecked)
+ {
+ Grid grid = new Grid
+ {
+ BackgroundColor = Colors.LightGray,
+ Padding = new Thickness(10)
+ };
+ grid.Children.Add(new Label
+ {
+ Text = "CollectionView Footer(Grid View)",
+ FontSize = 18,
+ HorizontalOptions = LayoutOptions.Center,
+ VerticalOptions = LayoutOptions.Center,
+ TextColor = Colors.Red,
+ AutomationId = "FooterViewLabel"
+ });
+ _viewModel.Footer = grid;
+ }
+ }
+
+ private void OnHeaderTemplateChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (HeaderTemplateNone.IsChecked)
+ {
+ _viewModel.HeaderTemplate = null;
+ }
+ else if (HeaderTemplateGrid.IsChecked)
+ {
+ _viewModel.HeaderTemplate = new DataTemplate(() =>
+ {
+ Grid grid = new Grid
+ {
+ BackgroundColor = Colors.LightGray,
+ Padding = new Thickness(10)
+ };
+ grid.Children.Add(new Label
+ {
+ Text = "Header Template(Grid View)",
+ FontSize = 18,
+ FontAttributes = FontAttributes.Bold,
+ HorizontalOptions = LayoutOptions.Center,
+ VerticalOptions = LayoutOptions.Center,
+ TextColor = Colors.Blue,
+ AutomationId = "HeaderTemplateLabel"
+ });
+ return grid;
+ });
+ }
+ }
+
+ private void OnFooterTemplateChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (FooterTemplateNone.IsChecked)
+ {
+ _viewModel.FooterTemplate = null;
+ }
+ else if (FooterTemplateGrid.IsChecked)
+ {
+ _viewModel.FooterTemplate = new DataTemplate(() =>
+ {
+ Grid grid = new Grid
+ {
+ BackgroundColor = Colors.LightGray,
+ Padding = new Thickness(10)
+ };
+ grid.Children.Add(new Label
+ {
+ Text = "Footer Template(Grid View)",
+ FontSize = 18,
+ FontAttributes = FontAttributes.Bold,
+ HorizontalOptions = LayoutOptions.Center,
+ VerticalOptions = LayoutOptions.Center,
+ TextColor = Colors.Green,
+ AutomationId = "FooterTemplateLabel"
+ });
+ return grid;
+ });
+ }
+ }
+
private void OnIsGroupedChanged(object sender, CheckedChangedEventArgs e)
{
if (IsGroupedFalse.IsChecked)
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..370699f69a9a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..70cfb6083c20
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..4946e5ab99c0
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..466ed1ff0fa8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..f9a80f9844b5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..3548c64f14f2
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..b2b861347eae
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..aea0c90d004a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png
new file mode 100644
index 000000000000..30353267f37c
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..4e65efed14c2
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png
new file mode 100644
index 000000000000..65401cd133b9
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..761e30753d35
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_DynamicChangesFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_DynamicChangesFeatureTests.cs
index cc862bf758e9..521847366634 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_DynamicChangesFeatureTests.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_DynamicChangesFeatureTests.cs
@@ -40,7 +40,7 @@ public void ValidateDynamicItemTemplateDisplayed()
}
#if TEST_FAILS_ON_ANDROID
-//Dynamic Updates to CollectionView Header/Footer and Templates Are Not Displayed Issue Link: https://github.com/dotnet/maui/issues/28676
+ //Dynamic Updates to CollectionView Header/Footer and Templates Are Not Displayed Issue Link: https://github.com/dotnet/maui/issues/28676
[Test]
[Category(UITestCategories.CollectionView)]
public void ValidateDynamicHeaderStringDisplayed()
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_EmptyViewFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_EmptyViewFeatureTests.cs
index afbb28ff09e9..f9a01d5925b5 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_EmptyViewFeatureTests.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_EmptyViewFeatureTests.cs
@@ -183,6 +183,105 @@ public void ValidateEmptyViewStringDisplayedSetFirst_AndGroupedList()
App.WaitForNoElement("No Items Available(String)");
}
+#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_IOS && TEST_FAILS_ON_WINDOWS // Issue Link - https://github.com/dotnet/maui/issues/32404
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyEmptyViewStringDisplaysCorrectly_WithLeftToRightFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewString");
+ App.Tap("EmptyViewString");
+ App.WaitForElement("FlowDirectionLeftToRight");
+ App.Tap("FlowDirectionLeftToRight");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("No Items Available(String)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyEmptyViewStringDisplaysCorrectly_WithRightToLeftFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewString");
+ App.Tap("EmptyViewString");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("No Items Available(String)");
+ VerifyScreenshot();
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewGrid");
+ App.Tap("EmptyViewGrid");
+ App.WaitForElement("FlowDirectionLeftToRight");
+ App.Tap("FlowDirectionLeftToRight");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("No Items Available(Grid View)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewGrid");
+ App.Tap("EmptyViewGrid");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("No Items Available(Grid View)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewCustomSize");
+ App.Tap("EmptyViewCustomSize");
+ App.WaitForElement("FlowDirectionLeftToRight");
+ App.Tap("FlowDirectionLeftToRight");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("Custom Empty View (Sized)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewCustomSize");
+ App.Tap("EmptyViewCustomSize");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("Custom Empty View (Sized)");
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void ValidateCustomEmptyViewDisplayed_AndEmptyObservableCollectionSetFirst()
@@ -603,6 +702,70 @@ public void ValidateCustomSizeEmptyViewTemplateDisplayed()
App.WaitForElement("Custom EmptyViewTemplate (Sized)");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewTemplateGrid");
+ App.Tap("EmptyViewTemplateGrid");
+ App.WaitForElement("FlowDirectionLeftToRight");
+ App.Tap("FlowDirectionLeftToRight");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("No Template Items Available(Grid View)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewTemplateGrid");
+ App.Tap("EmptyViewTemplateGrid");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("No Template Items Available(Grid View)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewTemplateCustomSize");
+ App.Tap("EmptyViewTemplateCustomSize");
+ App.WaitForElement("FlowDirectionLeftToRight");
+ App.Tap("FlowDirectionLeftToRight");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("Custom EmptyViewTemplate (Sized)");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EmptyViewTemplateCustomSize");
+ App.Tap("EmptyViewTemplateCustomSize");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("Custom EmptyViewTemplate (Sized)");
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void ValidateEmptyViewTemplateDisplayed_EmptyObservableCollectionSetFirst()
@@ -1003,7 +1166,7 @@ public void ValidateEmptyViewSize()
int expectedHeight = 525;
#elif MACCATALYST
int expectedWidth = 235;
- int expectedHeight = 150;
+ int expectedHeight = 150;
#else
int expectedWidth = 300;
int expectedHeight = 200;
@@ -1041,9 +1204,9 @@ public void ValidateEmptyViewTemplateSize()
#endif
#if TEST_FAILS_ON_ANDROID
-// CollectionView Footer Becomes Scrollable When EmptyView is Active on Android. Issue Link: https://github.com/dotnet/maui/issues/28350
-// HeaderTemplate and FooterTemplate are not displayed when ItemsSource is initially set to null on Android. Issue Link: https://github.com/dotnet/maui/issues/28337
-// Header and footer are not displayed when emptyview selected first Issue Link: https://github.com/dotnet/maui/issues/28351
+ // CollectionView Footer Becomes Scrollable When EmptyView is Active on Android. Issue Link: https://github.com/dotnet/maui/issues/28350
+ // HeaderTemplate and FooterTemplate are not displayed when ItemsSource is initially set to null on Android. Issue Link: https://github.com/dotnet/maui/issues/28337
+ // Header and footer are not displayed when emptyview selected first Issue Link: https://github.com/dotnet/maui/issues/28351
[Test]
[Category(UITestCategories.CollectionView)]
public void ValidateEmptyViewStringDisplayed_AndHeaderString()
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_GroupingFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_GroupingFeatureTests.cs
index e7b3f4241e5f..970ecd86c86a 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_GroupingFeatureTests.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_GroupingFeatureTests.cs
@@ -18,7 +18,8 @@ public class CollectionView_GroupingFeatureTests : _GalleryUITest
public const string ItemsLayoutHorizontalList = "ItemsLayoutHorizontalList";
public const string ItemsLayoutHorizontalGrid = "ItemsLayoutHorizontalGrid";
public const string ItemsLayoutVerticalGrid = "ItemsLayoutVerticalGrid";
-
+ public const string FlowDirectionLTR = "FlowDirectionLeftToRight";
+ public const string FlowDirectionRTL = "FlowDirectionRightToLeft";
public override string GalleryPageName => GroupingFeatureMatrix;
public CollectionView_GroupingFeatureTests(TestDevice device)
@@ -466,6 +467,29 @@ public void VerifyIsGrouped_WithHorizontalListAndGroupedList()
App.WaitForElement("Vegetables");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLIsGrouped_WithHorizontalListAndGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Fruits");
+ App.WaitForElement("Apple");
+ App.ScrollLeft("CollectionViewControl");
+ App.WaitForElement("Carrot");
+ App.WaitForElement("Vegetables");
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyIsGrouped_WithHorizontalGridAndGroupedList()
@@ -487,6 +511,26 @@ public void VerifyIsGrouped_WithHorizontalGridAndGroupedList()
App.WaitForElement("Vegetables");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLIsGrouped_WithHorizontalGridAndGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Fruits");
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyGroupHeaderAndFooterTemplate_WithHorizontalListAndGroupedList()
@@ -506,7 +550,7 @@ public void VerifyGroupHeaderAndFooterTemplate_WithHorizontalListAndGroupedList(
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForElement("GroupHeaderTemplate");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.ScrollRight("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
App.ScrollRight("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
App.WaitForElement("Carrot");
@@ -515,6 +559,36 @@ public void VerifyGroupHeaderAndFooterTemplate_WithHorizontalListAndGroupedList(
App.WaitForElement("GroupFooterTemplate");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLGroupHeaderAndFooterTemplate_WithHorizontalListAndGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(GroupHeaderTemplateGrid);
+ App.Tap(GroupHeaderTemplateGrid);
+ App.WaitForElement(GroupFooterTemplateGrid);
+ App.Tap(GroupFooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("GroupHeaderTemplate");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ App.ScrollLeft("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.ScrollLeft("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.WaitForElement("Carrot");
+ App.ScrollLeft("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.ScrollLeft("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.WaitForElement("GroupFooterTemplate");
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyGroupHeaderAndFooterTemplate_WithHorizontalGridAndGroupedList()
@@ -534,13 +608,41 @@ public void VerifyGroupHeaderAndFooterTemplate_WithHorizontalGridAndGroupedList(
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForElement("GroupHeaderTemplate");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.ScrollRight("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
App.ScrollRight("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
App.WaitForElement("Carrot");
App.WaitForElement("GroupFooterTemplate");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLGroupHeaderAndFooterTemplate_WithHorizontalGridAndGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(GroupHeaderTemplateGrid);
+ App.Tap(GroupHeaderTemplateGrid);
+ App.WaitForElement(GroupFooterTemplateGrid);
+ App.Tap(GroupFooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("GroupHeaderTemplate");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ App.ScrollLeft("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.ScrollLeft("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.WaitForElement("Carrot");
+ App.WaitForElement("GroupFooterTemplate");
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyGroupHeaderAndFooterTemplate_WithVerticalGridAndGroupedList()
@@ -560,11 +662,35 @@ public void VerifyGroupHeaderAndFooterTemplate_WithVerticalGridAndGroupedList()
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForElement("GroupHeaderTemplate");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.WaitForElement("Carrot");
App.WaitForElement("GroupFooterTemplate");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLGroupHeaderAndFooterTemplate_WithVerticalGridAndGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(GroupHeaderTemplateGrid);
+ App.Tap(GroupHeaderTemplateGrid);
+ App.WaitForElement(GroupFooterTemplateGrid);
+ App.Tap(GroupFooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("GroupHeaderTemplate");
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyIsGrouped_WithVerticalGridAndGroupedList()
@@ -580,10 +706,30 @@ public void VerifyIsGrouped_WithVerticalGridAndGroupedList()
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForElement("Fruits");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.WaitForElement("Carrot");
App.WaitForElement("Vegetables");
}
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLIsGrouped_WithVerticalGridAndGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Fruits");
+ VerifyScreenshot();
+ }
#endif
#endif
@@ -651,7 +797,7 @@ public void VerifyIsGrouped_WithHorizontalListAndObservableCollection()
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForNoElement("Fruits");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.ScrollRight("CollectionViewControl");
App.WaitForElement("Carrot");
App.WaitForNoElement("Vegetables");
@@ -670,7 +816,7 @@ public void VerifyIsGrouped_WithHorizontalGridAndObservableCollection()
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForNoElement("Fruits");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.ScrollRight("CollectionViewControl");
App.WaitForElement("Carrot");
App.WaitForNoElement("Vegetables");
@@ -689,7 +835,7 @@ public void VerifyIsGrouped_WithVerticalGridAndObservableCollection()
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForNoElement("Fruits");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.WaitForElement("Carrot");
App.WaitForNoElement("Vegetables");
}
@@ -705,7 +851,7 @@ public void VerifyIsGrouped_WithVerticalListAndObservableCollection()
App.WaitForElement(Apply);
App.Tap(Apply);
App.WaitForNoElement("Fruits");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.WaitForElement("Carrot");
App.WaitForNoElement("Vegetables");
}
@@ -727,15 +873,13 @@ public void VerifyIsGrouped_WithGroupHeaderAndFooterTemplateAndObservableCollect
App.Tap(Apply);
App.WaitForNoElement("GroupHeaderTemplate");
App.WaitForNoElement("GroupFooterTemplate");
- App.WaitForElement("Apple");
+ App.WaitForElement("Banana"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
App.WaitForElement("Carrot");
}
#endif
-#if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS && TEST_FAILS_ON_IOS
- //CanMixGroups Set to False Still Allows Reordering Between Groups in CollectionView on Catalyst Issue Link : https://github.com/dotnet/maui/issues/28530
- //Test fails on CV2 . GroupHeader and GroupFooter template is not visible Issue Link: https://github.com/dotnet/maui/issues/28509
- //.NET MAUI CollectionView does not reorder when grouped on windows Issue Link: https://github.com/dotnet/maui/issues/13027
+#if TEST_FAILS_ON_WINDOWS //.NET MAUI CollectionView does not reorder when grouped on windows Issue Link: https://github.com/dotnet/maui/issues/13027
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyCanMixGroupsFalseWithCanReorderItems()
@@ -750,10 +894,32 @@ public void VerifyCanMixGroupsFalseWithCanReorderItems()
App.Tap(IsGroupedTrue);
App.WaitForElement(Apply);
App.Tap(Apply);
- var initialY = App.WaitForElement("Apple").GetRect().Y;
- App.DragAndDrop("Apple", "Potato");
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Carrot").GetRect().Y;
+ Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Carrot' should be greater than Banana after the drag-and-drop operation.");
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLCanMixGroupsFalseWithCanReorderItems()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement("CanReorderItemsTrue");
+ App.Tap("CanReorderItemsTrue");
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
var newY = App.WaitForElement("Carrot").GetRect().Y;
- Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Carrot' should be greater than Apple after the drag-and-drop operation.");
+ Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Carrot' should be greater than Banana after the drag-and-drop operation.");
}
[Test]
@@ -772,10 +938,34 @@ public void VerifyCanMixGroupsTrueWithCanReorderItems()
App.Tap(IsGroupedTrue);
App.WaitForElement(Apply);
App.Tap(Apply);
- var initialY = App.WaitForElement("Apple").GetRect().Y;
- App.DragAndDrop("Apple", "Potato");
- var newY = App.WaitForElement("Apple").GetRect().Y;
- Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Apple' should be greater after the drag-and-drop operation.");
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Banana").GetRect().Y;
+ Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Banana' should be greater after the drag-and-drop operation.");
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLCanMixGroupsTrueWithCanReorderItems()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement("CanMixGroupsTrue");
+ App.Tap("CanMixGroupsTrue");
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement("CanReorderItemsTrue");
+ App.Tap("CanReorderItemsTrue");
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Banana").GetRect().Y;
+ Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Banana' should be greater after the drag-and-drop operation.");
}
[Test]
@@ -794,10 +984,34 @@ public void VerifyCanReorderItemsTrueWithCanMixGroups()
App.Tap(IsGroupedTrue);
App.WaitForElement(Apply);
App.Tap(Apply);
- var initialY = App.WaitForElement("Apple").GetRect().Y;
- App.DragAndDrop("Apple", "Potato");
- var newY = App.WaitForElement("Apple").GetRect().Y;
- Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Apple' should be greater after the drag-and-drop operation.");
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Banana").GetRect().Y;
+ Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Banana' should be greater after the drag-and-drop operation.");
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLCanReorderItemsTrueWithCanMixGroups()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement("CanReorderItemsTrue");
+ App.Tap("CanReorderItemsTrue");
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement("CanMixGroupsTrue");
+ App.Tap("CanMixGroupsTrue");
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Banana").GetRect().Y;
+ Assert.That(newY, Is.GreaterThan(initialY), "The Y position of 'Banana' should be greater after the drag-and-drop operation.");
}
[Test]
@@ -814,10 +1028,32 @@ public void VerifyCanReorderItemsFalseWithCanMixGroups()
App.Tap(IsGroupedTrue);
App.WaitForElement(Apply);
App.Tap(Apply);
- var initialY = App.WaitForElement("Apple").GetRect().Y;
- App.DragAndDrop("Apple", "Potato");
- var newY = App.WaitForElement("Apple").GetRect().Y;
- Assert.That(newY, Is.EqualTo(initialY), "The Y position of 'Apple' should be Same Value after the drag-and-drop operation.");
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Banana").GetRect().Y;
+ Assert.That(newY, Is.EqualTo(initialY), "The Y position of 'Banana' should be Same Value after the drag-and-drop operation.");
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLCanReorderItemsFalseWithCanMixGroups()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceGroupedList);
+ App.Tap(ItemsSourceGroupedList);
+ App.WaitForElement("CanMixGroupsTrue");
+ App.Tap("CanMixGroupsTrue");
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ var initialY = App.WaitForElement("Banana").GetRect().Y;
+ App.DragAndDrop("Banana", "Potato"); // Changed from Apple to Banana because Appium taps, scrolls, or drags the Apple icon instead of the CollectionView Apple item.
+ var newY = App.WaitForElement("Banana").GetRect().Y;
+ Assert.That(newY, Is.EqualTo(initialY), "The Y position of 'Banana' should be Same Value after the drag-and-drop operation.");
}
#endif
}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ScrollingFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ScrollingFeatureTests.cs
index 82fc2db912c9..9191af77873c 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ScrollingFeatureTests.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_ScrollingFeatureTests.cs
@@ -24,6 +24,8 @@ public class CollectionView_ScrollingFeatureTests : _GalleryUITest
public const string ItemsLayoutVerticalList = "ItemsLayoutVerticalList";
public const string ItemsLayoutHorizontalList = "ItemsLayoutHorizontalList";
public const string AddButton = "AddButton";
+ public const string FlowDirectionLTR = "FlowDirectionLeftToRight";
+ public const string FlowDirectionRTL = "FlowDirectionRightToLeft";
public override string GalleryPageName => ScrollingFeatureMatrix;
@@ -49,6 +51,40 @@ public void VerifyMeasureAllItemsWithObservableCollection()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
#if TEST_FAILS_ON_WINDOWS // [Windows] NullReferenceException thrown When Toggling IsGrouped to True in ObservableCollection Binding Issue Link: https://github.com/dotnet/maui/issues/28824
[Test]
[Category(UITestCategories.CollectionView)]
@@ -66,6 +102,44 @@ public void VerifyMeasureAllItemsWithGroupedList()
App.Tap(Apply);
VerifyScreenshot();
}
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
#endif
#if TEST_FAILS_ON_WINDOWS && TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST
@@ -88,6 +162,40 @@ public void VerifyMeasureFirstItemsWithObservableCollection()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollection()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureFirstItem);
+ App.Tap(ItemSizingMeasureFirstItem);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollection()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureFirstItem);
+ App.Tap(ItemSizingMeasureFirstItem);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureFirstItemsWithObservableCollectionWhenVerticalGrid()
@@ -105,6 +213,44 @@ public void VerifyMeasureFirstItemsWithObservableCollectionWhenVerticalGrid()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureFirstItem);
+ App.Tap(ItemSizingMeasureFirstItem);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureFirstItemsWithObservableCollectionWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureFirstItem);
+ App.Tap(ItemSizingMeasureFirstItem);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureFirstItemsWithGroupedList()
@@ -121,6 +267,44 @@ public void VerifyMeasureFirstItemsWithGroupedList()
App.Tap(Apply);
VerifyScreenshot();
}
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureFirstItemsWithGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureFirstItem);
+ App.Tap(ItemSizingMeasureFirstItem);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureFirstItemsWithGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureFirstItem);
+ App.Tap(ItemSizingMeasureFirstItem);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
[Test]
[Category(UITestCategories.CollectionView)]
@@ -139,6 +323,44 @@ public void VerifyMeasureAllItemsWithObservableCollectionWhenHorizontalGrid()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureAllItemsWithObservableCollectionWhenHorizontalList()
@@ -156,6 +378,44 @@ public void VerifyMeasureAllItemsWithObservableCollectionWhenHorizontalList()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureAllItemsWithObservableCollectionWhenVerticalGrid()
@@ -173,6 +433,44 @@ public void VerifyMeasureAllItemsWithObservableCollectionWhenVerticalGrid()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollectionWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceObservableCollection2);
+ App.Tap(ItemsSourceObservableCollection2);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureAllItemsWithGroupedListWhenVerticalGrid()
@@ -192,6 +490,48 @@ public void VerifyMeasureAllItemsWithGroupedListWhenVerticalGrid()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureAllItemsWithGroupedListWhenHorizontalGrid()
@@ -211,6 +551,48 @@ public void VerifyMeasureAllItemsWithGroupedListWhenHorizontalGrid()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyMeasureAllItemsWithGroupedListWhenHorizontalList()
@@ -230,6 +612,48 @@ public void VerifyMeasureAllItemsWithGroupedListWhenHorizontalList()
VerifyScreenshot();
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedListWhenHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedListWhenHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemSizingMeasureAllItems);
+ App.Tap(ItemSizingMeasureAllItems);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsSourceGroupedList2);
+ App.Tap(ItemsSourceGroupedList2);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
#if TEST_FAILS_ON_ANDROID
//[Android] CollectionView with ItemSizingStrategy="MeasureFirstItem" Does Not Work as Expected for HorizontalList and HorizontalGrid Layouts Issue Link: https://github.com/dotnet/maui/issues/29192
//[Android] ItemSizingStrategy="MeasureFirstItem" does not work correctly with VerticalGrid and grouped ItemsSource Issue Link: https://github.com/dotnet/maui/issues/29191
@@ -327,8 +751,8 @@ public void VerifyMeasureFirstItemsWithGroupedListWhenHorizontalGrid()
#endif
#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST
-//[Android] KeepItemsInView and KeepScrollOffset doesn't not works as expected when new items are added in CollectionView Issue Link: https://github.com/dotnet/maui/issues/29131
-//[iOS] KeepItemsInView Does Not Show Newly Added Items After Scrolling Down in CollectionView Issue Link: https://github.com/dotnet/maui/issues/29145
+ //[Android] KeepItemsInView and KeepScrollOffset doesn't not works as expected when new items are added in CollectionView Issue Link: https://github.com/dotnet/maui/issues/29131
+ //[iOS] KeepItemsInView Does Not Show Newly Added Items After Scrolling Down in CollectionView Issue Link: https://github.com/dotnet/maui/issues/29145
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyKeepItemsInViewWithObservableList()
@@ -347,7 +771,7 @@ public void VerifyKeepItemsInViewWithObservableList()
App.WaitForElement("Passionfruit");
}
-
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyKeepItemsInViewWithGroupedList()
@@ -541,6 +965,46 @@ public void VerifyKeepLastItemInViewWithObservableListWhenVerticalGrid()
App.WaitForElement("Cabbage");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsUpdatingKeepLastItemInView);
+ App.Tap(ItemsUpdatingKeepLastItemInView);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForElement("Cabbage");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsUpdatingKeepLastItemInView);
+ App.Tap(ItemsUpdatingKeepLastItemInView);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForElement("Cabbage");
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyKeepLastItemInViewWithObservableListWhenHorizontalList()
@@ -558,6 +1022,46 @@ public void VerifyKeepLastItemInViewWithObservableListWhenHorizontalList()
App.WaitForElement("Cabbage");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsUpdatingKeepLastItemInView);
+ App.Tap(ItemsUpdatingKeepLastItemInView);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForElement("Cabbage");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsUpdatingKeepLastItemInView);
+ App.Tap(ItemsUpdatingKeepLastItemInView);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForElement("Cabbage");
+ VerifyScreenshot();
+ }
+
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyKeepLastItemInViewWithObservableListWhenHorizontalGrid()
@@ -575,6 +1079,46 @@ public void VerifyKeepLastItemInViewWithObservableListWhenHorizontalGrid()
App.WaitForElement("Cabbage");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRAndKeepLastItemInViewWithObservableListWhenHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsUpdatingKeepLastItemInView);
+ App.Tap(ItemsUpdatingKeepLastItemInView);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForElement("Cabbage");
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndKeepLastItemInViewWithObservableListWhenHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsUpdatingKeepLastItemInView);
+ App.Tap(ItemsUpdatingKeepLastItemInView);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForElement("Cabbage");
+ VerifyScreenshot();
+ }
+
#if TEST_FAILS_ON_ANDROID
//[Android] ArgumentOutOfRangeException Occurs with KeepLastItemInView for Grouped List Issue Link: https://github.com/dotnet/maui/issues/29153
[Test]
@@ -662,7 +1206,7 @@ public void VerifyKeepLastItemInViewWithGroupedListWhenHorizontalGrid()
#endif
#if TEST_FAILS_ON_ANDROID
-//[Android] KeepScrollOffset doesn't not works as expected when new items are added in CollectionView Issue Link: https://github.com/dotnet/maui/issues/29131
+ //[Android] KeepScrollOffset doesn't not works as expected when new items are added in CollectionView Issue Link: https://github.com/dotnet/maui/issues/29131
[Test]
[Category(UITestCategories.CollectionView)]
public void VerifyKeepScrollOffsetWithObservableList()
@@ -711,6 +1255,34 @@ public void VerifyKeepScrollOffsetWithGroupedList()
App.WaitForElement("Pumpkin");
}
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLAndKeepScrollOffsetWithGroupedList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(ItemsSourceGroupedList3);
+ App.Tap(ItemsSourceGroupedList3);
+ App.WaitForElement(IsGroupedTrue);
+ App.Tap(IsGroupedTrue);
+ App.WaitForElement(ItemsUpdatingKeepScrollOffset);
+ App.Tap(ItemsUpdatingKeepScrollOffset);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("CollectionViewControl");
+ App.ScrollDown("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.ScrollDown("CollectionViewControl", ScrollStrategy.Gesture, 0.9, 500);
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForNoElement("WaterMelon");
+ App.WaitForElement(AddButton);
+ App.Tap(AddButton);
+ App.WaitForNoElement("Mango");
+ App.WaitForElement("Pumpkin");
+ }
+
#if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS && TEST_FAILS_ON_IOS
//CollectionView Fails to Preserve Scroll Offset with GridItemsLayout Using KeepScrollOffset Issue Link: https://github.com/dotnet/maui/issues/29202
//CollectionView ItemsLayout does not update while switch from LinearItemsLayout to GridItemsLayout Issue Link: https://github.com/dotnet/maui/issues/27946
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_SelectionFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_SelectionFeatureTests.cs
index 478d5b436408..55b84411dfd4 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_SelectionFeatureTests.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CollectionView_SelectionFeatureTests.cs
@@ -27,9 +27,15 @@ public class CollectionView_SelectionFeatureTests : _GalleryUITest
public const string CurrentSelectionTextLabel = "CurrentSelectionTextLabel";
public const string PreviousSelectionTextLabel = "PreviousSelectionTextLabel";
public const string SelectionChangedEventCountLabel = "SelectionChangedEventCountLabel";
-
+ public const string FlowDirectionLTR = "FlowDirectionLeftToRight";
+ public const string FlowDirectionRTL = "FlowDirectionRightToLeft";
+ public const string HeaderString = "HeaderString";
+ public const string HeaderGrid = "HeaderGrid";
+ public const string FooterString = "FooterString";
+ public const string FooterGrid = "FooterGrid";
+ public const string HeaderTemplateGrid = "HeaderTemplateGrid";
+ public const string FooterTemplateGrid = "FooterTemplateGrid";
public override string GalleryPageName => SelectionFeatureMatrix;
-
public CollectionView_SelectionFeatureTests(TestDevice device)
: base(device)
{
@@ -756,4 +762,1044 @@ public void VerifySelectionModeSingleSelectionChangedEventCount()
Assert.That(App.WaitForElement(SelectionChangedEventCountLabel).GetText(), Is.EqualTo("2 times"));
Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
}
+
+#if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_IOS && TEST_FAILS_ON_WINDOWS //In iOS and Mac, related issue: https://github.com/dotnet/maui/issues/32225 and In windows, related issue: https://github.com/dotnet/maui/issues/27946
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithVerticalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(ItemsLayoutVerticalList);
+ App.Tap(ItemsLayoutVerticalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithVerticalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(ItemsLayoutVerticalList);
+ App.Tap(ItemsLayoutVerticalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(ItemsLayoutVerticalList);
+ App.Tap(ItemsLayoutVerticalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(ItemsLayoutVerticalList);
+ App.Tap(ItemsLayoutVerticalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderStringAndFooterStringAndHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderViewAndFooterViewAndHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutVerticalList);
+ App.Tap(ItemsLayoutVerticalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutVerticalList);
+ App.Tap(ItemsLayoutVerticalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalList()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutHorizontalList);
+ App.Tap(ItemsLayoutHorizontalList);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndVerticalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutVerticalGrid);
+ App.Tap(ItemsLayoutVerticalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionRTLWithHeaderTemplateAndFooterTemplateAndHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionRTL);
+ App.Tap(FlowDirectionRTL);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifyFlowDirectionLTRWithHeaderTemplateAndFooterTemplateAndHorizontalGrid()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(FlowDirectionLTR);
+ App.Tap(FlowDirectionLTR);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(ItemsLayoutHorizontalGrid);
+ App.Tap(ItemsLayoutHorizontalGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ VerifyScreenshot();
+ }
+
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithHeaderString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithHeaderString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue link: https://github.com/dotnet/maui/issues/18028
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithHeaderString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithHeaderView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithHeaderView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithHeaderView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithFooterString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithFooterString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue link: https://github.com/dotnet/maui/issues/18028
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithFooterString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithFooterView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithFooterView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithFooterView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithHeaderStringAndFooterString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithHeaderStringAndFooterString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue link: https://github.com/dotnet/maui/issues/18028
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithHeaderStringAndFooterString()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(HeaderString);
+ App.Tap(HeaderString);
+ App.WaitForElement(FooterString);
+ App.Tap(FooterString);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithHeaderViewAndFooterView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithHeaderViewAndFooterView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithHeaderViewAndFooterView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithHeaderTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithFooterTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
+
+#if TEST_FAILS_ON_ANDROID // Issue Link - https://github.com/dotnet/maui/issues/32212
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithHeaderTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithFooterTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue link: https://github.com/dotnet/maui/issues/18028
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithHeaderTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithFooterTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeMultipleWithHeaderTemplateViewAndFooterTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeMultiple);
+ App.Tap(SelectionModeMultiple);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Orange, Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("2"));
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeSingleWithHeaderTemplateViewAndFooterTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeSingle);
+ App.Tap(SelectionModeSingle);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("Banana"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("1"));
+ }
+#endif
+
+ [Test]
+ [Category(UITestCategories.CollectionView)]
+ public void VerifySelectionModeNoneWithHeaderTemplateViewAndFooterTemplateView()
+ {
+ App.WaitForElement(Options);
+ App.Tap(Options);
+ App.WaitForElement(SelectionModeNone);
+ App.Tap(SelectionModeNone);
+ App.WaitForElement(HeaderGrid);
+ App.Tap(HeaderGrid);
+ App.WaitForElement(FooterGrid);
+ App.Tap(FooterGrid);
+ App.WaitForElement(HeaderTemplateGrid);
+ App.Tap(HeaderTemplateGrid);
+ App.WaitForElement(FooterTemplateGrid);
+ App.Tap(FooterTemplateGrid);
+ App.WaitForElement(Apply);
+ App.Tap(Apply);
+ App.WaitForElement("Orange");
+ App.Tap("Orange");
+ Assert.That(App.WaitForElement(SelectedSingle).GetText(), Is.EqualTo("No items selected"));
+ Assert.That(App.WaitForElement(SelectedMultiple).GetText(), Is.EqualTo("0"));
+ }
}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..4e42fc1fea45
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..6df2f944f1f7
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..3258105f8a01
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..0dca66aabb0c
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..8ecb512221bd
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..b8842d525b78
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..828e76923a38
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..6e25cd17b549
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCustomSizedEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png
new file mode 100644
index 000000000000..200db72a945e
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewTemplateDisplaysCorrectly_WithLeftToRightFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png
new file mode 100644
index 000000000000..1cd2358734bb
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEmptyViewTemplateDisplaysCorrectly_WithRightToLeftFlowDirection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png
new file mode 100644
index 000000000000..e248c86a5a27
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionLTRAndMeasureAllItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..f053325f488a
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionLTRAndMeasureAllItemsWithObservableCollection.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png
new file mode 100644
index 000000000000..eafa8eebfd3e
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionRTLAndMeasureAllItemsWithGroupedList.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png
new file mode 100644
index 000000000000..3134daf7aed1
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyFlowDirectionRTLAndMeasureAllItemsWithObservableCollection.png differ