diff --git a/eng/pipelines/common/ui-tests.yml b/eng/pipelines/common/ui-tests.yml
index fe1231c2292c..1f0512c922ca 100644
--- a/eng/pipelines/common/ui-tests.yml
+++ b/eng/pipelines/common/ui-tests.yml
@@ -39,7 +39,7 @@ parameters:
- 'SoftInput,Stepper,Switch,SwipeView'
- 'Shell'
- 'TabbedPage,TableView,TimePicker,TitleView,ToolbarItem'
- - 'ViewBaseTests,Window'
+ - 'ViewBaseTests,VisualStateManager,Window'
- 'WebView'
projects:
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Slider_Reenabled_Normal_State.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Slider_Reenabled_Normal_State.png
new file mode 100644
index 000000000000..d73c5a11e836
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Slider_Reenabled_Normal_State.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Slider_Reset_Disabled_State.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Slider_Reset_Disabled_State.png
new file mode 100644
index 000000000000..abd09194328f
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/Slider_Reset_Disabled_State.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_Disable.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_Disable.png
new file mode 100644
index 000000000000..92dd096a02f6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_Disable.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_InitialState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_InitialState.png
new file mode 100644
index 000000000000..d516a22d9014
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_Reset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_Reset.png
new file mode 100644
index 000000000000..0e899b770afa
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Button_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Checked.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Checked.png
new file mode 100644
index 000000000000..4ed9856f81ae
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Checked.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Disable.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Disable.png
new file mode 100644
index 000000000000..96f541a77840
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Disable.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_DisableWhileChecked.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_DisableWhileChecked.png
new file mode 100644
index 000000000000..fb1441a15e8b
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_DisableWhileChecked.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_InitialState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_InitialState.png
new file mode 100644
index 000000000000..f457f8d83ae7
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Reset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Reset.png
new file mode 100644
index 000000000000..030a1ba95771
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CheckBox_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Disabled.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Disabled.png
new file mode 100644
index 000000000000..0ccfe63fad38
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_InitialState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_InitialState.png
new file mode 100644
index 000000000000..8b69f1b65c40
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Normal.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Normal.png
new file mode 100644
index 000000000000..4525a44ab153
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Normal.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Reset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Reset.png
new file mode 100644
index 000000000000..dfc9dea0f6d1
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Selected.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Selected.png
new file mode 100644
index 000000000000..fb8085021e7a
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Selected.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Selected_Multiple.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Selected_Multiple.png
new file mode 100644
index 000000000000..84a5a4ee9523
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_CollectionView_Selected_Multiple.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Disable.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Disable.png
new file mode 100644
index 000000000000..d67ccc6381d8
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Disable.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableAndEnableWhileFocused.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableAndEnableWhileFocused.png
new file mode 100644
index 000000000000..b9b8a918cb37
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableAndEnableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png
new file mode 100644
index 000000000000..a2f25b34e0d3
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileFocused.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileFocused.png
new file mode 100644
index 000000000000..aa569b44eab7
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileReset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileReset.png
new file mode 100644
index 000000000000..5a8089345abe
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileReset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileUnFocused.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileUnFocused.png
new file mode 100644
index 000000000000..5b02627aa99c
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_DisableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Focus.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Focus.png
new file mode 100644
index 000000000000..3fc4b9d77274
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Focus.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_InitialState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_InitialState.png
new file mode 100644
index 000000000000..00c818b357ad
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Invalid.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Invalid.png
new file mode 100644
index 000000000000..ba725d6d7bf9
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Invalid.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Reset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Reset.png
new file mode 100644
index 000000000000..11244ad0a284
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Unfocus.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Unfocus.png
new file mode 100644
index 000000000000..0dd63c827922
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Unfocus.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Validate.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Validate.png
new file mode 100644
index 000000000000..2541c41a2c4e
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Entry_Validate.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_DisableWhileNormal.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_DisableWhileNormal.png
new file mode 100644
index 000000000000..575a23c5ae62
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_DisableWhileNormal.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_DisableWhileSelected.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_DisableWhileSelected.png
new file mode 100644
index 000000000000..c9ba5dac036c
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_DisableWhileSelected.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Disabled.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Disabled.png
new file mode 100644
index 000000000000..1990cdf4079b
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_InitialState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_InitialState.png
new file mode 100644
index 000000000000..e5488865bd57
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Reset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Reset.png
new file mode 100644
index 000000000000..3cfd850b5634
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Selected.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Selected.png
new file mode 100644
index 000000000000..04063b9454b4
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Label_Selected.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_DisabledState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_DisabledState.png
new file mode 100644
index 000000000000..f0a0e14010e1
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_DisabledState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_FocusedState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_FocusedState.png
new file mode 100644
index 000000000000..0a08e3110519
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_FocusedState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_NormalOrUnfocusedState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_NormalOrUnfocusedState.png
new file mode 100644
index 000000000000..97925f20a529
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_NormalOrUnfocusedState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_NormalState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_NormalState.png
new file mode 100644
index 000000000000..49790fd7d8eb
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_NormalState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_ResetState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_ResetState.png
new file mode 100644
index 000000000000..88c43bc55ea7
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Slider_ResetState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableAndResetWhileOff.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableAndResetWhileOff.png
new file mode 100644
index 000000000000..8b4cb39d039e
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableAndResetWhileOff.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableAndResetWhileOn.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableAndResetWhileOn.png
new file mode 100644
index 000000000000..134f54c85a93
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableAndResetWhileOn.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableWhileOff.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableWhileOff.png
new file mode 100644
index 000000000000..bb39543c0d2a
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableWhileOff.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableWhileOn.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableWhileOn.png
new file mode 100644
index 000000000000..1b4c582b81fb
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_DisableWhileOn.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_InitialState.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_InitialState.png
new file mode 100644
index 000000000000..72437091c149
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_Off.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_Off.png
new file mode 100644
index 000000000000..4bd33a723a84
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_Off.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_OffWhileDisableAndEnable.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_OffWhileDisableAndEnable.png
new file mode 100644
index 000000000000..0f0d5d6bf3b6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_OffWhileDisableAndEnable.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_On.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_On.png
new file mode 100644
index 000000000000..c87727b2e838
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_On.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_OnWhileDisableAndEnable.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_OnWhileDisableAndEnable.png
new file mode 100644
index 000000000000..ac2994581e79
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_OnWhileDisableAndEnable.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_Reset.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_Reset.png
new file mode 100644
index 000000000000..3e621e3074b0
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_ResetWhileDisabled.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_ResetWhileDisabled.png
new file mode 100644
index 000000000000..5544f11e661d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVSM_Switch_ResetWhileDisabled.png differ
diff --git a/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
index 1d967735cf43..e33703504420 100644
--- a/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
+++ b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
@@ -120,6 +120,7 @@ public override string ToString()
new GalleryPageFactory(() => new IndicatorViewControlPage(), "IndicatorView Feature Matrix"),
new GalleryPageFactory(() => new GridControlPage(), "Grid Feature Matrix"),
new GalleryPageFactory(() => new LayoutFeaturePage(), "ScrollView With LayoutOptions Feature Matrix"),
+ new GalleryPageFactory(() => new VisualStateManagerFeaturePage(), "VisualStateManager Feature Matrix"),
new GalleryPageFactory(() => new ShellFeaturePage(), "Shell Feature Matrix"),
new GalleryPageFactory(() => new BrushesControlPage(), "Brushes Feature Matrix"),
new GalleryPageFactory(() => new BindableLayoutControlPage(), "BindableLayout Feature Matrix")
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMButton/VisualStateManagerButtonPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMButton/VisualStateManagerButtonPage.xaml
new file mode 100644
index 000000000000..4ed6751ea722
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMButton/VisualStateManagerButtonPage.xaml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMButton/VisualStateManagerButtonPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMButton/VisualStateManagerButtonPage.xaml.cs
new file mode 100644
index 000000000000..a81ada579092
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMButton/VisualStateManagerButtonPage.xaml.cs
@@ -0,0 +1,83 @@
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerButtonPage : ContentPage
+{
+ public VisualStateManagerButtonPage()
+ {
+ InitializeComponent();
+ VisualStateManager.GoToState(DemoButton, "Normal");
+ }
+
+ void OnDemoButtonPressed(object sender, EventArgs e)
+ {
+ if (!DemoButton.IsEnabled)
+ return;
+ VisualStateManager.GoToState(DemoButton, "Pressed");
+ StateLabel.Text = "State: Pressed";
+ DemoButton.Text = "Pressed";
+ }
+
+ void OnDemoButtonReleased(object sender, EventArgs e)
+ {
+ if (!DemoButton.IsEnabled)
+ return;
+ VisualStateManager.GoToState(DemoButton, "Normal");
+ StateLabel.Text = "State: Normal/Released";
+ DemoButton.Text = "Normal/Released";
+ }
+
+ void OnToggleButtonDisabled(object sender, EventArgs e)
+ {
+ DemoButton.IsEnabled = !DemoButton.IsEnabled;
+ ButtonDisableButton.Text = DemoButton.IsEnabled ? "Disable" : "Enable";
+ if (!DemoButton.IsEnabled)
+ {
+ VisualStateManager.GoToState(DemoButton, "Disabled");
+ StateLabel.Text = "State: Disabled";
+ DemoButton.Text = "Disabled";
+ }
+ else
+ {
+ VisualStateManager.GoToState(DemoButton, "Normal");
+ StateLabel.Text = "State: Normal";
+ DemoButton.Text = "Normal";
+ }
+ }
+
+ void OnResetButtonState(object sender, EventArgs e)
+ {
+ DemoButton.IsEnabled = true;
+ VisualStateManager.GoToState(DemoButton, "Normal");
+ ButtonDisableButton.Text = "Disable";
+ StateLabel.Text = "State: Normal";
+ DemoButton.Text = "Press Me";
+ }
+
+ void OnDemoButtonPointerEntered(object sender, PointerEventArgs e)
+ {
+ if (!DemoButton.IsEnabled)
+ return;
+ VisualStateManager.GoToState(DemoButton, "PointerOver");
+ StateLabel.Text = "State: PointerOver Enter";
+ DemoButton.Text = "PointerOver Enter";
+ }
+
+ void OnDemoButtonPointerExited(object sender, PointerEventArgs e)
+ {
+ if (!DemoButton.IsEnabled)
+ return;
+ VisualStateManager.GoToState(DemoButton, "Normal");
+ StateLabel.Text = "State: PointerOver Exit";
+ DemoButton.Text = "PointerOver Exit";
+ }
+
+ void OnButtonFocused(object sender, FocusEventArgs e)
+ {
+ if (!DemoButton.IsEnabled)
+ return;
+ VisualStateManager.GoToState(DemoButton, "Focused");
+ StateLabel.Text = "State: Focused";
+ DemoButton.Text = "Focused";
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCheckBox/VisualStateManagerCheckBoxPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCheckBox/VisualStateManagerCheckBoxPage.xaml
new file mode 100644
index 000000000000..936550847517
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCheckBox/VisualStateManagerCheckBoxPage.xaml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCheckBox/VisualStateManagerCheckBoxPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCheckBox/VisualStateManagerCheckBoxPage.xaml.cs
new file mode 100644
index 000000000000..8dc63932e476
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCheckBox/VisualStateManagerCheckBoxPage.xaml.cs
@@ -0,0 +1,51 @@
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerCheckBoxPage : ContentPage
+{
+ public VisualStateManagerCheckBoxPage()
+ {
+ InitializeComponent();
+ VisualStateManager.GoToState(VSMCheckBox, "Normal");
+ CheckBoxState.Text = "State: Normal";
+ }
+
+ void OnCheckBoxCheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (!VSMCheckBox.IsEnabled)
+ {
+ CheckBoxState.Text = "State: Disabled";
+ return;
+ }
+
+ var state = e.Value ? "Checked" : "Unchecked";
+ VisualStateManager.GoToState(VSMCheckBox, state);
+ CheckBoxState.Text = $"State: {state}";
+ }
+
+ void OnToggleCheckBoxDisabled(object sender, EventArgs e)
+ {
+ VSMCheckBox.IsEnabled = !VSMCheckBox.IsEnabled;
+ CheckBoxDisableButton.Text = VSMCheckBox.IsEnabled ? "Disable" : "Enable";
+ if (!VSMCheckBox.IsEnabled)
+ {
+ VisualStateManager.GoToState(VSMCheckBox, "Disabled");
+ CheckBoxState.Text = "State: Disabled";
+ }
+ else
+ {
+ var state = VSMCheckBox.IsChecked ? "Checked" : "Unchecked";
+ VisualStateManager.GoToState(VSMCheckBox, state);
+ CheckBoxState.Text = $"State: {state}";
+ }
+ }
+
+ void OnResetCheckBox(object sender, EventArgs e)
+ {
+ VSMCheckBox.IsEnabled = true;
+ VSMCheckBox.IsChecked = false;
+ CheckBoxDisableButton.Text = "Disable";
+ VisualStateManager.GoToState(VSMCheckBox, "Normal");
+ CheckBoxState.Text = "State: Normal";
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VSMCollectionViewViewModel.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VSMCollectionViewViewModel.cs
new file mode 100644
index 000000000000..89986fae6308
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VSMCollectionViewViewModel.cs
@@ -0,0 +1,28 @@
+using System.Collections.ObjectModel;
+
+namespace Maui.Controls.Sample;
+
+public class VSMCollectionViewItem
+{
+ public string Name { get; set; } = string.Empty;
+}
+
+public class VSMCollectionViewViewModel
+{
+ public ObservableCollection Items { get; }
+
+ public VSMCollectionViewViewModel()
+ {
+ Items = new ObservableCollection
+ {
+ new VSMCollectionViewItem { Name = "Banana" },
+ new VSMCollectionViewItem { Name = "Cherry" },
+ new VSMCollectionViewItem { Name = "Date" },
+ new VSMCollectionViewItem { Name = "Elderberry" },
+ new VSMCollectionViewItem { Name = "Fig" },
+ new VSMCollectionViewItem { Name = "Grape" },
+ new VSMCollectionViewItem { Name = "Honeydew" }
+ };
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VisualStateManagerCollectionViewPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VisualStateManagerCollectionViewPage.xaml
new file mode 100644
index 000000000000..9837805f4529
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VisualStateManagerCollectionViewPage.xaml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VisualStateManagerCollectionViewPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VisualStateManagerCollectionViewPage.xaml.cs
new file mode 100644
index 000000000000..673992f896d3
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMCollectionViewPage/VisualStateManagerCollectionViewPage.xaml.cs
@@ -0,0 +1,140 @@
+using System.Collections.ObjectModel;
+
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerCollectionViewPage : ContentPage
+{
+ private readonly VSMCollectionViewViewModel _viewModel;
+ public VisualStateManagerCollectionViewPage()
+ {
+ InitializeComponent();
+ _viewModel = new VSMCollectionViewViewModel();
+ BindingContext = _viewModel;
+ }
+
+ void OnCollectionSelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (!MyCollectionView.IsEnabled)
+ {
+ CVState.Text = "State: Disabled";
+ return;
+ }
+
+ var hasSelection = e.CurrentSelection != null && e.CurrentSelection.Count > 0;
+ VisualStateManager.GoToState(MyCollectionView, hasSelection ? "Selected" : "Normal");
+ CVState.Text = hasSelection ? $"State: Selected ({e.CurrentSelection.Count})" : "State: Normal";
+ }
+
+ void OnToggleCollectionViewDisabled(object sender, EventArgs e)
+ {
+ MyCollectionView.IsEnabled = !MyCollectionView.IsEnabled;
+ CVToggleButton?.Text = MyCollectionView.IsEnabled ? "Disable" : "Enable";
+ CVState.Text = MyCollectionView.IsEnabled
+ ? (GetSelectedCount() > 0 ? $"State: Selected ({GetSelectedCount()})" : "State: Normal")
+ : "State: Disabled";
+ }
+
+ void OnResetCollectionView(object sender, EventArgs e)
+ {
+ MyCollectionView.IsEnabled = true;
+ MyCollectionView.SelectedItem = null;
+ if (MyCollectionView.SelectionMode == SelectionMode.Multiple)
+ {
+ MyCollectionView.SelectedItems?.Clear();
+ }
+ CVToggleButton.Text = "Disable";
+ VisualStateManager.GoToState(MyCollectionView, "Normal");
+ CVState.Text = "State: Normal";
+ }
+
+ void OnItemPointerEntered(object sender, PointerEventArgs e)
+ {
+ if (!MyCollectionView.IsEnabled)
+ {
+ CVState.Text = "State: Disabled";
+ return;
+ }
+
+ if (sender is VisualElement ve)
+ {
+ VisualStateManager.GoToState(ve, "PointerOver");
+ CVState.Text = "State: PointerOver";
+ }
+ }
+
+ void OnItemPointerExited(object sender, PointerEventArgs e)
+ {
+ if (!MyCollectionView.IsEnabled)
+ {
+ CVState.Text = "State: Disabled";
+ return;
+ }
+
+ if (sender is VisualElement ve)
+ {
+ var bc = ve.BindingContext;
+ var isSelected = IsItemSelected(bc);
+ VisualStateManager.GoToState(ve, isSelected ? "Selected" : "Normal");
+ CVState.Text = GetSelectedCount() > 0 ? $"State: Selected ({GetSelectedCount()})" : "State: Normal";
+ }
+ }
+
+ int GetSelectedCount()
+ {
+ if (MyCollectionView.SelectionMode == SelectionMode.Multiple)
+ return MyCollectionView.SelectedItems?.Count ?? 0;
+ return MyCollectionView.SelectedItem != null ? 1 : 0;
+ }
+
+ bool IsItemSelected(object item)
+ {
+ if (item is null)
+ return false;
+ if (MyCollectionView.SelectionMode == SelectionMode.Multiple)
+ return MyCollectionView.SelectedItems?.Contains(item) == true;
+ return Equals(MyCollectionView.SelectedItem, item);
+
+ }
+
+ void OnSelectItem(object sender, EventArgs e)
+ {
+ if (!MyCollectionView.IsEnabled)
+ {
+ CVState.Text = "State: Disabled";
+ return;
+ }
+ if (_viewModel.Items is ObservableCollection items && items.Count > 0)
+ {
+ if (MyCollectionView.SelectionMode == SelectionMode.Multiple)
+ {
+ if (MyCollectionView.SelectedItems?.Contains(items[0]) != true)
+ {
+ MyCollectionView.SelectedItems?.Add(items[0]);
+ }
+ }
+ else
+ {
+ MyCollectionView.SelectedItem = items[0];
+ }
+ }
+ VisualStateManager.GoToState(MyCollectionView, "Selected");
+ CVState.Text = $"State: Selected ({GetSelectedCount()})";
+ }
+
+ void OnSetNormal(object sender, EventArgs e)
+ {
+ if(!MyCollectionView.IsEnabled)
+ {
+ CVState.Text = "State: Disabled";
+ return;
+ }
+ MyCollectionView.SelectedItem = null;
+ if (MyCollectionView.SelectionMode == SelectionMode.Multiple)
+ {
+ MyCollectionView.SelectedItems?.Clear();
+ }
+ VisualStateManager.GoToState(MyCollectionView, "Normal");
+ CVState.Text = "State: Normal/Unselected";
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMEntry/VisualStateManagerEntryPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMEntry/VisualStateManagerEntryPage.xaml
new file mode 100644
index 000000000000..58704606962a
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMEntry/VisualStateManagerEntryPage.xaml
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMEntry/VisualStateManagerEntryPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMEntry/VisualStateManagerEntryPage.xaml.cs
new file mode 100644
index 000000000000..0be6ddbc6287
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMEntry/VisualStateManagerEntryPage.xaml.cs
@@ -0,0 +1,131 @@
+using System.Text.RegularExpressions;
+
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerEntryPage : ContentPage
+{
+ bool _completedFired;
+
+ public VisualStateManagerEntryPage()
+ {
+ InitializeComponent();
+
+ VisualStateManager.GoToState(VSMEntry, "Normal");
+ VisualStateManager.GoToState(ValidationEntry, "Invalid");
+ }
+
+ void OnFocusEntry(object sender, EventArgs e)
+ {
+ if (!VSMEntry.IsEnabled)
+ return;
+ VisualStateManager.GoToState(VSMEntry, "Focused");
+ StateEntryLabel.Text = "State: Focused";
+ VSMEntry.Focus();
+ }
+
+ void OnNormalEntry(object sender, EventArgs e)
+ {
+ if (!VSMEntry.IsEnabled)
+ return;
+ VisualStateManager.GoToState(VSMEntry, "Normal");
+ StateEntryLabel.Text = "State: Normal/Unfocused";
+ VSMEntry.Unfocus();
+ }
+
+ void OnEntryDisabled(object sender, EventArgs e)
+ {
+ VSMEntry.IsEnabled = !VSMEntry.IsEnabled;
+ DisableEntryButton.Text = VSMEntry.IsEnabled ? "Disable" : "Enable";
+
+ if (!VSMEntry.IsEnabled)
+ {
+ VisualStateManager.GoToState(VSMEntry, "Disabled");
+ StateEntryLabel.Text = "State: Disabled";
+ }
+ else
+ {
+ VisualStateManager.GoToState(VSMEntry, "Normal");
+ StateEntryLabel.Text = "State: Normal";
+ }
+ }
+
+ void OnEntryCompleted(object sender, EventArgs e)
+ {
+ if (!VSMEntry.IsEnabled)
+ return;
+ _completedFired = true;
+ VisualStateManager.GoToState(VSMEntry, "Completed");
+ StateEntryLabel.Text = "State: Completed";
+ }
+
+ void OnEntryFocused(object sender, FocusEventArgs e)
+ {
+ if (!VSMEntry.IsEnabled)
+ return;
+ VSMEntry.Focus();
+ VisualStateManager.GoToState(VSMEntry, "Focused");
+ StateEntryLabel.Text = "State: Focused";
+ }
+
+ void OnEntryUnfocused(object sender, FocusEventArgs e)
+ {
+ if (_completedFired)
+ {
+ _completedFired = false;
+ return;
+ }
+
+ if (VSMEntry.IsEnabled)
+ {
+ VisualStateManager.GoToState(VSMEntry, "Normal");
+ VSMEntry.Unfocus();
+ StateEntryLabel.Text = "State: Normal/Unfocused";
+ }
+ }
+
+ void OnResetEntry(object sender, EventArgs e)
+ {
+ _completedFired = false;
+ VSMEntry.IsEnabled = true;
+ DisableEntryButton.Text = "Disable";
+ VisualStateManager.GoToState(VSMEntry, "Normal");
+ StateEntryLabel.Text = "State: Normal";
+ VSMEntry.Text = string.Empty;
+ }
+
+ // ---------------- Entry2 (Valid / Invalid) ----------------
+ void OnValidationEntryTextChanged(object sender, TextChangedEventArgs e)
+ {
+ ValidateEntryText(e.NewTextValue);
+ }
+
+ void OnValidateEntry(object sender, EventArgs e)
+ {
+ ValidateEntryText(ValidationEntry.Text);
+ }
+
+ void OnValidateEntryReset(object sender, EventArgs e)
+ {
+ ValidationEntry.Text = string.Empty;
+ VisualStateManager.GoToState(ValidationEntry, "Invalid");
+ ValidationEntryLabel.Text = "State: Invalid";
+ }
+
+ void ValidateEntryText(string text)
+ {
+ bool isValid = Regex.IsMatch(text ?? string.Empty,
+ @"^[2-9]\d{2}-\d{3}-\d{4}$");
+
+ if (isValid)
+ {
+ VisualStateManager.GoToState(ValidationEntry, "Valid");
+ ValidationEntryLabel.Text = "State: Valid";
+ }
+ else
+ {
+ VisualStateManager.GoToState(ValidationEntry, "Invalid");
+ ValidationEntryLabel.Text = "State: Invalid";
+ }
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMLabel/VisualStateManagerLabelPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMLabel/VisualStateManagerLabelPage.xaml
new file mode 100644
index 000000000000..16a2322ed073
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMLabel/VisualStateManagerLabelPage.xaml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMLabel/VisualStateManagerLabelPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMLabel/VisualStateManagerLabelPage.xaml.cs
new file mode 100644
index 000000000000..c95f13f0f3ac
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMLabel/VisualStateManagerLabelPage.xaml.cs
@@ -0,0 +1,50 @@
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerLabelPage : ContentPage
+{
+ bool _labelSelected;
+ bool _labelDisabled;
+
+ public VisualStateManagerLabelPage()
+ {
+ InitializeComponent();
+ VisualStateManager.GoToState(SelectableLabelContainer, "Normal");
+ }
+ void OnToggleLabelSelected(object sender, EventArgs e)
+ {
+ if (_labelDisabled)
+ return;
+ _labelSelected = !_labelSelected;
+ var state = _labelSelected ? "Selected" : "Normal";
+ VisualStateManager.GoToState(SelectableLabelContainer, state);
+ LabelState.Text = $"State: {state}";
+ }
+
+ void OnToggleLabelDisabled(object sender, EventArgs e)
+ {
+ _labelDisabled = !_labelDisabled;
+ string state;
+ LabelDisableButton.Text = _labelDisabled ? "Enable" : "Disable";
+ if (_labelDisabled)
+ {
+ state = "Disabled";
+ VisualStateManager.GoToState(SelectableLabelContainer, state);
+ }
+ else
+ {
+ state = _labelSelected ? "Selected" : "Normal";
+ VisualStateManager.GoToState(SelectableLabelContainer, state);
+ }
+ LabelState.Text = $"State: {state}";
+ }
+
+ void OnResetLabel(object sender, EventArgs e)
+ {
+ _labelSelected = false;
+ _labelDisabled = false;
+ LabelDisableButton.Text = "Disable";
+ VisualStateManager.GoToState(SelectableLabelContainer, "Normal");
+ LabelState.Text = "State: Normal";
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSlider/VisualStateManagerSliderPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSlider/VisualStateManagerSliderPage.xaml
new file mode 100644
index 000000000000..c58aa7bf49c9
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSlider/VisualStateManagerSliderPage.xaml
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSlider/VisualStateManagerSliderPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSlider/VisualStateManagerSliderPage.xaml.cs
new file mode 100644
index 000000000000..5c7bbefa1022
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSlider/VisualStateManagerSliderPage.xaml.cs
@@ -0,0 +1,94 @@
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerSliderPage : ContentPage
+{
+ bool _isResetting = false;
+
+ public VisualStateManagerSliderPage()
+ {
+ InitializeComponent();
+ VisualStateManager.GoToState(VSMSlider, "Normal");
+ }
+
+ void OnFocusSlider(object sender, EventArgs e)
+ {
+ if (!VSMSlider.IsEnabled)
+ return;
+ if (!VSMSlider.IsFocused)
+ {
+ VSMSlider.Focus();
+ VisualStateManager.GoToState(VSMSlider, "Focused");
+ VSMSlider.Value = 65;
+ SliderState.Text = $"State: Focused | Value: {VSMSlider.Value:0}";
+ }
+ }
+
+ void OnUnfocusSlider(object sender, EventArgs e)
+ {
+ if (!VSMSlider.IsEnabled)
+ return;
+
+ VSMSlider.Unfocus();
+ VisualStateManager.GoToState(VSMSlider, "Normal");
+ SliderState.Text = $"State: Normal/Unfocused | Value: {VSMSlider.Value:0}";
+ }
+
+ void OnToggleSliderDisabled(object sender, EventArgs e)
+ {
+ VSMSlider.IsEnabled = !VSMSlider.IsEnabled;
+ SliderDisableButton.Text = VSMSlider.IsEnabled ? "Disable" : "Enable";
+ if (!VSMSlider.IsEnabled)
+ {
+ VisualStateManager.GoToState(VSMSlider, "Disabled");
+ SliderState.Text = $"State: Disabled | Value: {VSMSlider.Value:0}";
+ }
+ else
+ {
+ VisualStateManager.GoToState(VSMSlider, "Normal");
+ SliderState.Text = $"State: Normal | Value: {VSMSlider.Value:0}";
+ }
+ }
+
+ void OnResetSlider(object sender, EventArgs e)
+ {
+ _isResetting = true;
+ VSMSlider.IsEnabled = true;
+ SliderDisableButton.Text = "Disable";
+ VSMSlider.Value = 50;
+ VisualStateManager.GoToState(VSMSlider, "Normal");
+ SliderState.Text = $"State: Normal | Value: {VSMSlider.Value:0}";
+ _isResetting = false;
+ }
+
+ void OnSliderFocused(object sender, FocusEventArgs e)
+ {
+ VSMSlider.Focus();
+ VisualStateManager.GoToState(VSMSlider, "Focused");
+ SliderState.Text = $"State: Focused | Value: {VSMSlider.Value:0}";
+ }
+
+ void OnSliderUnfocused(object sender, FocusEventArgs e)
+ {
+ VisualStateManager.GoToState(VSMSlider, "Normal");
+ SliderState.Text = $"State: Normal/Unfocused | Value: {VSMSlider.Value:0}";
+ }
+
+ void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
+ {
+ if (_isResetting)
+ {
+ VisualStateManager.GoToState(VSMSlider, "Normal");
+ SliderState.Text = $"State: Normal | Value: {e.NewValue:0}";
+ return;
+ }
+ if (!VSMSlider.IsEnabled)
+ {
+ VisualStateManager.GoToState(VSMSlider, "Disabled");
+ SliderState.Text = $"State: Disabled | Value: {e.NewValue:0}";
+ return;
+ }
+ VisualStateManager.GoToState(VSMSlider, "Focused");
+ SliderState.Text = $"State: Focused | Value: {e.NewValue:0}";
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSwitch/VisualStateManagerSwitchPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSwitch/VisualStateManagerSwitchPage.xaml
new file mode 100644
index 000000000000..a031bb2ff956
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSwitch/VisualStateManagerSwitchPage.xaml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSwitch/VisualStateManagerSwitchPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSwitch/VisualStateManagerSwitchPage.xaml.cs
new file mode 100644
index 000000000000..a58e4caa96ba
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VSMSwitch/VisualStateManagerSwitchPage.xaml.cs
@@ -0,0 +1,48 @@
+namespace Maui.Controls.Sample;
+
+public partial class VisualStateManagerSwitchPage : ContentPage
+{
+ public VisualStateManagerSwitchPage()
+ {
+ InitializeComponent();
+ VisualStateManager.GoToState(VSMSwitch, "Normal");
+ }
+
+ void OnSwitchToggled(object sender, ToggledEventArgs e)
+ {
+ if (!VSMSwitch.IsEnabled)
+ {
+ SwitchState.Text = "State: Disabled";
+ return;
+ }
+ var state = e.Value ? "On" : "Off";
+ VisualStateManager.GoToState(VSMSwitch, state);
+ SwitchState.Text = $"State: {state}";
+ }
+
+ void OnToggleSwitchDisabled(object sender, EventArgs e)
+ {
+ VSMSwitch.IsEnabled = !VSMSwitch.IsEnabled;
+ SwitchDisableButton.Text = VSMSwitch.IsEnabled ? "Disable" : "Enable";
+ if (!VSMSwitch.IsEnabled)
+ {
+ VisualStateManager.GoToState(VSMSwitch, "Disabled");
+ SwitchState.Text = "State: Disabled";
+ }
+ else
+ {
+ var state = VSMSwitch.IsToggled ? "On" : "Off";
+ VisualStateManager.GoToState(VSMSwitch, state);
+ SwitchState.Text = $"State: {state}";
+ }
+ }
+
+ void OnResetSwitch(object sender, EventArgs e)
+ {
+ VSMSwitch.IsEnabled = true;
+ SwitchDisableButton.Text = "Disable";
+ VisualStateManager.GoToState(VSMSwitch, "Normal");
+ VSMSwitch.IsToggled = false;
+ SwitchState.Text = "State: Normal";
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VisualStateManagerFeaturePage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VisualStateManagerFeaturePage.xaml
new file mode 100644
index 000000000000..d91ba3a66c0e
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VisualStateManagerFeaturePage.xaml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VisualStateManagerFeaturePage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VisualStateManagerFeaturePage.xaml.cs
new file mode 100644
index 000000000000..744ebcadcf6e
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/VisualStateManager/VisualStateManagerFeaturePage.xaml.cs
@@ -0,0 +1,52 @@
+namespace Maui.Controls.Sample;
+
+public class VisualStateManagerFeaturePage : NavigationPage
+{
+ public VisualStateManagerFeaturePage()
+ {
+ PushAsync(new VisualStateManagerFeatureMainPage());
+ }
+}
+public partial class VisualStateManagerFeatureMainPage : ContentPage
+{
+ public VisualStateManagerFeatureMainPage()
+ {
+ InitializeComponent();
+ }
+
+ private async void OnVSMButtonClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerButtonPage ());
+ }
+
+ private async void OnVSMCheckBoxClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerCheckBoxPage ());
+ }
+
+ private async void OnVSMCollectionViewClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerCollectionViewPage ());
+ }
+
+ private async void OnVSMEntryClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerEntryPage ());
+ }
+
+ private async void OnVSMLabelClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerLabelPage ());
+ }
+
+ private async void OnVSMSliderClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerSliderPage ());
+ }
+
+ private async void OnVSMSwitchClicked (object sender, EventArgs e)
+ {
+ await Navigation.PushAsync(new VisualStateManagerSwitchPage ());
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_Disable.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_Disable.png
new file mode 100644
index 000000000000..f0aa42a30391
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_Disable.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_InitialState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_InitialState.png
new file mode 100644
index 000000000000..f2e3e2bf2ecb
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_PressedAndReleased.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_PressedAndReleased.png
new file mode 100644
index 000000000000..d539c1418196
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_PressedAndReleased.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_Reset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_Reset.png
new file mode 100644
index 000000000000..9ce4ea1c0aea
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Button_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Checked.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Checked.png
new file mode 100644
index 000000000000..b8ca50cac135
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Checked.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Disable.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Disable.png
new file mode 100644
index 000000000000..23698717da52
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Disable.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_DisableWhileChecked.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_DisableWhileChecked.png
new file mode 100644
index 000000000000..dc54327f76b5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_DisableWhileChecked.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_InitialState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_InitialState.png
new file mode 100644
index 000000000000..19b5f9e7f116
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Reset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Reset.png
new file mode 100644
index 000000000000..9838418772e5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CheckBox_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Disabled.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Disabled.png
new file mode 100644
index 000000000000..7a3a04212e6d
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_InitialState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_InitialState.png
new file mode 100644
index 000000000000..e7cc6b5db631
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Normal.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Normal.png
new file mode 100644
index 000000000000..f95822290081
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Normal.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Reset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Reset.png
new file mode 100644
index 000000000000..94736c0a0c7f
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Selected.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Selected.png
new file mode 100644
index 000000000000..9041c46956ce
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_CollectionView_Selected.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Completed.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Completed.png
new file mode 100644
index 000000000000..7d3cb6b86ae6
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Completed.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Disable.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Disable.png
new file mode 100644
index 000000000000..a09c1dc9ddb6
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Disable.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableAndEnableWhileFocused.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableAndEnableWhileFocused.png
new file mode 100644
index 000000000000..21cc330d0111
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableAndEnableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png
new file mode 100644
index 000000000000..6be451c33540
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileFocused.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileFocused.png
new file mode 100644
index 000000000000..444ac3253eeb
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileReset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileReset.png
new file mode 100644
index 000000000000..099678d9aad5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileReset.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileUnFocused.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileUnFocused.png
new file mode 100644
index 000000000000..93a9ffeb7035
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_DisableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Focus.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Focus.png
new file mode 100644
index 000000000000..6bad603790b8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Focus.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_InitialState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_InitialState.png
new file mode 100644
index 000000000000..439a1ec602bb
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Invalid.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Invalid.png
new file mode 100644
index 000000000000..472f216fc538
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Invalid.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Reset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Reset.png
new file mode 100644
index 000000000000..6fe9fd2361bc
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Unfocus.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Unfocus.png
new file mode 100644
index 000000000000..1ab8c08588a5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Unfocus.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Validate.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Validate.png
new file mode 100644
index 000000000000..cf14b00292b6
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Entry_Validate.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_DisableWhileNormal.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_DisableWhileNormal.png
new file mode 100644
index 000000000000..873c1c5011da
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_DisableWhileNormal.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_DisableWhileSelected.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_DisableWhileSelected.png
new file mode 100644
index 000000000000..62ecf0fee6c0
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_DisableWhileSelected.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Disabled.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Disabled.png
new file mode 100644
index 000000000000..ae9bff848dc9
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_InitialState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_InitialState.png
new file mode 100644
index 000000000000..1d57454f9871
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Reset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Reset.png
new file mode 100644
index 000000000000..a671534531c5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Selected.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Selected.png
new file mode 100644
index 000000000000..d1a400582743
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Label_Selected.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_DisabledState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_DisabledState.png
new file mode 100644
index 000000000000..82420161f259
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_DisabledState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_FocusedState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_FocusedState.png
new file mode 100644
index 000000000000..25bb08d6500a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_FocusedState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_NormalOrUnfocusedState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_NormalOrUnfocusedState.png
new file mode 100644
index 000000000000..1f4e8e178129
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_NormalOrUnfocusedState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_NormalState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_NormalState.png
new file mode 100644
index 000000000000..3731231ab21e
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_NormalState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_ResetState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_ResetState.png
new file mode 100644
index 000000000000..7ac2f4e6639f
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Slider_ResetState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_DisableWhileOff.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_DisableWhileOff.png
new file mode 100644
index 000000000000..30de9ab7e799
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_DisableWhileOff.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_DisableWhileOn.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_DisableWhileOn.png
new file mode 100644
index 000000000000..aa7066e36ee8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_DisableWhileOn.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_InitialState.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_InitialState.png
new file mode 100644
index 000000000000..ba11dfa02c9a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_Off.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_Off.png
new file mode 100644
index 000000000000..e88a0d5c9a1a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_Off.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_On.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_On.png
new file mode 100644
index 000000000000..8c07a0b8678c
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_On.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_Reset.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_Reset.png
new file mode 100644
index 000000000000..ed01a630a747
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVSM_Switch_Reset.png differ
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_ButtonFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_ButtonFeatureTests.cs
new file mode 100644
index 000000000000..2d04d19c42a0
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_ButtonFeatureTests.cs
@@ -0,0 +1,175 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_ButtonFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerButtonFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerButtonFeatureTests;
+
+ public VisualStateManager_ButtonFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+// PointerOver states cannot currently be reliably covered in CI environments, as hover/pointer interactions are not consistently supported in automated runs. Therefore, these states are validated manually on Mac and Windows, and PointerOver-related tests have not been included in the automated test cases.
+ [Test, Order(1)]
+ public void VerifyVSM_Button_InitialState()
+ {
+ App.WaitForElement("VSMButton");
+ App.Tap("VSMButton");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_Button_Disable()
+ {
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_Button_Reset()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ Assert.That(App.FindElement("DemoButton").IsEnabled(), Is.True);
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+#if TEST_FAILS_ON_ANDROID // Related issue link: https://github.com/dotnet/maui/issues/19289
+ [Test, Order(4)]
+ public void VerifyVSM_Button_PressedAndReleased()
+ {
+ App.WaitForElement("DemoButton");
+ App.Tap("DemoButton");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Released"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_Button_DisableWhilePressedAndReleased()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("DemoButton");
+ App.Tap("DemoButton");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Released"));
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(6)]
+ public void VerifyVSM_Button_ResetWhilePressedAndReleased()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("DemoButton");
+ App.Tap("DemoButton");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Released"));
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+#endif
+
+ [Test, Order(7)]
+ public void VerifyVSM_Button_ResetWhileDisabled()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+#if TEST_FAILS_ON_ANDROID // Related issue link: https://github.com/dotnet/maui/issues/19289
+ [Test, Order(8)]
+ public void VerifyVSM_Button_PressedAndReleasedWhileDisabled()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("DemoButton");
+ App.Tap("DemoButton");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+#endif
+
+ [Test, Order(9)]
+ public void VerifyVSM_Button_DisableAndEnable()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+#if TEST_FAILS_ON_ANDROID // Related issue link: https://github.com/dotnet/maui/issues/19289
+ [Test, Order(10)]
+ public void VerifyVSM_Button_DisableAndEnableWhilePressedAndReleased()
+ {
+ App.WaitForElement("ButtonReset");
+ App.Tap("ButtonReset");
+ App.WaitForElement("DemoButton");
+ App.Tap("DemoButton");
+ App.WaitForElement("ButtonStateLabel");
+ var stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Released"));
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("ButtonDisable");
+ App.Tap("ButtonDisable");
+ App.WaitForElement("ButtonStateLabel");
+ stateText = App.FindElement("ButtonStateLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+#endif
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_CheckBoxFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_CheckBoxFeatureTests.cs
new file mode 100644
index 000000000000..4e9a98c226ab
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_CheckBoxFeatureTests.cs
@@ -0,0 +1,211 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_CheckBoxFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerCheckBoxFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerCheckBoxFeatureTests;
+
+ public VisualStateManager_CheckBoxFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ [Test, Order(1)]
+ public void VerifyVSM_CheckBox_InitialState()
+ {
+ App.WaitForElement("VSMCheckBoxButton");
+ App.Tap("VSMCheckBoxButton");
+ App.WaitForElement("CheckBoxState");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_CheckBox_Disable()
+ {
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_CheckBox_Reset()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(4)]
+ public void VerifyVSM_CheckBox_Checked()
+ {
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_CheckBox_UnCheckedWhileChecked()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Unchecked"));
+ }
+
+ [Test, Order(6)]
+ public void VerifyVSM_CheckBox_DisableWhileChecked()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(7)]
+ public void VerifyVSM_CheckBox_CheckedWhileDisable()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(8)]
+ public void VerifyVSM_CheckBox_ResetWhileDisable()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(9)]
+ public void VerifyVSM_CheckBox_UnCheckedWhileDisable()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ var stateText1 = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText1, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(10)]
+ public void VerifyVSM_CheckBox_DisableAndEnableWhileChecked()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ var stateText1 = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText1, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ }
+
+ [Test, Order(11)]
+ public void VerifyVSM_CheckBox_DisableAndEnableWhileUnchecked()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Unchecked"));
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ var stateText1 = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText1, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CheckBoxDisable");
+ App.Tap("CheckBoxDisable");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Unchecked"));
+ }
+
+ [Test, Order(12)]
+ public void VerifyVSM_CheckBox_ResetWhileChecked()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Checked"));
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(13)]
+ public void VerifyVSM_CheckBox_ResetWhileUnchecked()
+ {
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ App.WaitForElement("VSMCheckBox");
+ App.Tap("VSMCheckBox");
+ var stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Unchecked"));
+ App.WaitForElement("CheckBoxReset");
+ App.Tap("CheckBoxReset");
+ stateText = App.FindElement("CheckBoxState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_CollectionViewFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_CollectionViewFeatureTests.cs
new file mode 100644
index 000000000000..11d9f2d997af
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_CollectionViewFeatureTests.cs
@@ -0,0 +1,389 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_CollectionViewFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerCollectionViewFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerCollectionViewFeatureTests;
+
+ public VisualStateManager_CollectionViewFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+// PointerOver states cannot currently be reliably covered in CI environments, as hover/pointer interactions are not consistently supported in automated runs. Therefore, these states are validated manually on Mac and Windows, and PointerOver-related tests have not been included in the automated test cases.
+ [Test, Order(1)]
+ public void VerifyVSM_CollectionView_InitialState()
+ {
+ App.WaitForElement("VSMCollectionViewButton");
+ App.Tap("VSMCollectionViewButton");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_CollectionView_Selected()
+ {
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_CollectionView_Normal()
+ {
+ App.WaitForElement("CVNormal");
+ App.Tap("CVNormal");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unselected"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(4)]
+ public void VerifyVSM_CollectionView_Disabled()
+ {
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_CollectionView_Reset()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue: https://github.com/dotnet/maui/issues/18028
+ [Test, Order(6)]
+ public void VerifyVSM_CollectionView_Selected_Multiple()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("Cherry");
+ App.Tap("Cherry");
+ App.WaitForElement("Date");
+ App.Tap("Date");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (3)"));
+ VerifyScreenshot();
+ }
+#endif
+
+ [Test, Order(7)]
+ public void VerifyVSM_CollectionView_DisableWhileNormal()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVNormal");
+ App.Tap("CVNormal");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unselected"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(8)]
+ public void VerifyVSM_CollectionView_DisableWhileSelected()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVSelectItem");
+ App.Tap("CVSelectItem");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(9)]
+ public void VerifyVSM_CollectionView_ResetWhileDisabled()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(10)]
+ public void VerifyVSM_CollectionView_ResetWhileNormal()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVNormal");
+ App.Tap("CVNormal");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unselected"));
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(11)]
+ public void VerifyVSM_CollectionView_ResetWhileSelected()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVSelectItem");
+ App.Tap("CVSelectItem");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue: https://github.com/dotnet/maui/issues/18028
+ [Test, Order(12)]
+ public void VerifyVSM_CollectionView_ResetWhileMultipleSelected()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("Cherry");
+ App.Tap("Cherry");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (2)"));
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(13)]
+ public void VerifyVSM_CollectionView_SelectAndUnselectItem_UsingTap()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+#endif
+
+ [Test, Order(14)]
+ public void VerifyVSM_CollectionView_SelectItem_UsingButton()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVSelectItem");
+ App.Tap("CVSelectItem");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ App.WaitForElement("CVNormal");
+ App.Tap("CVNormal");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unselected"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue: https://github.com/dotnet/maui/issues/18028
+ [Test, Order(15)]
+ public void VerifyVSM_CollectionView_SelectMultipleItems_UsingTap()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("Cherry");
+ App.Tap("Cherry");
+ App.WaitForElement("Grape");
+ App.Tap("Grape");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (3)"));
+ App.Tap("Cherry");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (2)"));
+ }
+#endif
+
+ [Test, Order(16)]
+ [Ignore("Fails on all platforms. Related issue: https://github.com/dotnet/maui/issues/20615")]
+ public void VerifyVSM_CollectionView_DisableAndEnableWhileSelected()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText,Is.EqualTo("State: Selected (1)"));
+ }
+
+ [Test, Order(17)]
+ public void VerifyVSM_CollectionView_DisableAndEnableWhileUnselected()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVNormal");
+ App.Tap("CVNormal");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unselected"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+#if TEST_FAILS_ON_CATALYST //related issue: https://github.com/dotnet/maui/issues/18028
+ [Test, Order(18)]
+ public void VerifyVSM_CollectionView_DisableEnableWhileSelectMultipleItems()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("Honeydew");
+ App.Tap("Honeydew");
+ App.WaitForElement("Grape");
+ App.Tap("Grape");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (3)"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Selected (3)"));
+ }
+#endif
+
+ [Test, Order(19)]
+ [Ignore("Fails on all platforms. Related issue: https://github.com/dotnet/maui/issues/20615")]
+ public void VerifyVSM_CollectionView_SelectedWhileDisabled()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(20)]
+ [Ignore("Fails on all platforms. Related issue: https://github.com/dotnet/maui/issues/20615")]
+ public void VerifyVSM_CollectionView_SelectedMultipleWhileDisabled()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("Cherry");
+ App.Tap("Cherry");
+ App.WaitForElement("Fig");
+ App.Tap("Fig");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(21)]
+ [Ignore("Fails on all platforms. Related issue: https://github.com/dotnet/maui/issues/20615")]
+ public void VerifyVSM_CollectionView_UnselectWhileDisabled()
+ {
+ App.WaitForElement("CVReset");
+ App.Tap("CVReset");
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ var stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Does.Contain("State: Selected (1)"));
+ App.WaitForElement("CVDisable");
+ App.Tap("CVDisable");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("Banana");
+ App.Tap("Banana");
+ App.WaitForElement("CVState");
+ stateText = App.FindElement("CVState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_EntryFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_EntryFeatureTests.cs
new file mode 100644
index 000000000000..03eb24e068c2
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_EntryFeatureTests.cs
@@ -0,0 +1,403 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_EntryFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerEntryFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerEntryFeatureTests;
+
+ public VisualStateManager_EntryFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ [Test, Order(1)]
+ public void VerifyVSM_Entry_InitialState()
+ {
+ App.WaitForElement("VSMEntryButton");
+ App.Tap("VSMEntryButton");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_Entry_Focus()
+ {
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Focused"));
+#if ANDROID
+ VerifyScreenshot(cropBottom: 1150);
+ if(App.IsKeyboardShown())
+ App.DismissKeyboard();
+#elif IOS
+ VerifyScreenshot(cropBottom: 1200);
+ if(App.IsKeyboardShown())
+ App.DismissKeyboard();
+#else
+ VerifyScreenshot();
+#endif
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_Entry_Unfocus()
+ {
+ App.WaitForElement("NormalEntryButton");
+ App.Tap("NormalEntryButton");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unfocused"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(4)]
+ public void VerifyVSM_Entry_Disable()
+ {
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_Entry_Reset()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(6)]
+ public void VerifyVSM_Entry_DisableWhileFocused()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.EnterText("VSMEntry", "Testing");
+ App.WaitForElement("FocusEntryButton");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.Tap("FocusEntryButton");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Focused"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(7)]
+ public void VerifyVSM_Entry_DisableWhileUnFocused()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("NormalEntryButton");
+ App.Tap("NormalEntryButton");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unfocused"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(8)]
+ public void VerifyVSM_Entry_DisableWhileReset()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(9)]
+ public void VerifyVSM_Entry_DisableAndEnableWhileFocused()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.EnterText("VSMEntry", "Testing");
+ App.WaitForElement("FocusEntryButton");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.Tap("FocusEntryButton");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Focused"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(10)]
+ public void VerifyVSM_Entry_DisableAndEnableWhileUnFocused()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("NormalEntryButton");
+ App.Tap("NormalEntryButton");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unfocused"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(11)]
+ public void VerifyVSM_Entry_FocusedAndUnfocused()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Focused"));
+ App.WaitForElement("NormalEntryButton");
+ App.Tap("NormalEntryButton");
+ App.WaitForElement("EntryState");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unfocused"));
+ }
+
+ [Test, Order(12)]
+ public void VerifyVSM_Entry_ResetWhileDisabled()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("EntryState");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(13)]
+ public void VerifyVSM_Entry_FocusedWhileDisabled()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(14)]
+ public void VerifyVSM_Entry_UnfocusedWhileDisabled()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("NormalEntryButton");
+ App.Tap("NormalEntryButton");
+ App.WaitForElement("EntryState");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(15)]
+ public void VerifyVSM_Entry_Validate()
+ {
+ App.WaitForElement("ResetValidationEntryButton");
+ App.Tap("ResetValidationEntryButton");
+ App.WaitForElement("ValidationEntry");
+ App.Tap("ValidationEntry");
+ App.EnterText("ValidationEntry", "965-999-9999");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.WaitForElement("ValidationEntryLabel");
+ var stateText = App.FindElement("ValidationEntryLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Valid"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(16)]
+ public void VerifyVSM_Entry_Invalid()
+ {
+ App.WaitForElement("ResetValidationEntryButton");
+ App.Tap("ResetValidationEntryButton");
+ App.WaitForElement("ValidationEntry");
+ App.Tap("ValidationEntry");
+ App.EnterText("ValidationEntry", "Invalid");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.WaitForElement("ValidationEntryLabel");
+ var stateText = App.FindElement("ValidationEntryLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Invalid"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(17)]
+ public void VerifyVSM_Entry_ResetValidation()
+ {
+ App.WaitForElement("ResetValidationEntryButton");
+ App.Tap("ResetValidationEntryButton");
+ App.WaitForElement("ValidationEntry");
+ App.Tap("ValidationEntry");
+ App.EnterText("ValidationEntry", "777-777-7777");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.WaitForElement("ValidationEntryLabel");
+ var stateText = App.FindElement("ValidationEntryLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Valid"));
+ App.WaitForElement("ResetValidationEntryButton");
+ App.Tap("ResetValidationEntryButton");
+ App.WaitForElement("ValidationEntryLabel");
+ stateText = App.FindElement("ValidationEntryLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Invalid"));
+ }
+
+ [Test, Order(18)]
+ public void VerifyVSM_Entry_ValidToInvalid()
+ {
+ App.WaitForElement("ResetValidationEntryButton");
+ App.Tap("ResetValidationEntryButton");
+ App.WaitForElement("ValidationEntry");
+ App.Tap("ValidationEntry");
+ App.EnterText("ValidationEntry", "965-999-9999");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.WaitForElement("ValidationEntryLabel");
+ var stateText = App.FindElement("ValidationEntryLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Valid"));
+ App.WaitForElement("ValidateEntryButton");
+ App.Tap("ValidateEntryButton");
+ App.ClearText("ValidationEntry");
+ App.EnterText("ValidationEntry", "6789-456-1234");
+#if ANDROID || IOS
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ App.WaitForElement("ValidationEntryLabel");
+ stateText = App.FindElement("ValidationEntryLabel").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Invalid"));
+ }
+#if TEST_FAILS_ON_ANDROID // When PressEnter() is triggered to verify the Completed state, the Entry automatically becomes visually unfocused. Therefore, the test currently fails on Android in automation but passes during manual testing.
+ [Test, Order(19)]
+ public void VerifyVSM_Entry_Completed()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.EnterText("VSMEntry", "Hello");
+ App.PressEnter();
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Completed"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(20)]
+ public void VerifyVSM_Entry_CompletedAndReset()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.EnterText("VSMEntry", "Hello");
+ App.PressEnter();
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Completed"));
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(21)]
+ public void VerifyVSM_Entry_CompletedAndRefocused()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.EnterText("VSMEntry", "Hello");
+ App.PressEnter();
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Completed"));
+ App.WaitForElement("FocusEntryButton");
+ App.Tap("FocusEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Focused"));
+ }
+
+ [Test, Order(22)]
+ public void VerifyVSM_Entry_DisableWhileCompleted()
+ {
+ App.WaitForElement("ResetEntryButton");
+ App.Tap("ResetEntryButton");
+ App.WaitForElement("VSMEntry");
+ App.Tap("VSMEntry");
+ App.EnterText("VSMEntry", "Hello");
+ App.PressEnter();
+ App.WaitForElement("EntryState");
+ var stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Completed"));
+ App.WaitForElement("DisableEntryButton");
+ App.Tap("DisableEntryButton");
+ stateText = App.FindElement("EntryState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+#endif
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_LabelFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_LabelFeatureTests.cs
new file mode 100644
index 000000000000..9ed598b3fb01
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_LabelFeatureTests.cs
@@ -0,0 +1,210 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_LabelFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerLabelFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerLabelFeatureTests;
+
+ public VisualStateManager_LabelFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ [Test, Order(1)]
+ public void VerifyVSM_Label_InitialState()
+ {
+ App.WaitForElement("VSMLabelButton");
+ App.Tap("VSMLabelButton");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_Label_Selected()
+ {
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_Label_Disabled()
+ {
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(4)]
+ public void VerifyVSM_Label_Reset()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_Label_DisableWhileSelected()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(6)]
+ public void VerifyVSM_Label_DisableWhileNormal()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(7)]
+ public void VerifyVSM_Label_DisableAndEnableWhileSelected()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ }
+
+ [Test, Order(8)]
+ public void VerifyVSM_Label_DisableAndEnableWhileNormal()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(9)]
+ public void VerifyVSM_Label_ResetWhileSelected()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(10)]
+ public void VerifyVSM_Label_ResetWhileDisabled()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(11)]
+ public void VerifyVSM_Label_SelectedToDisabledToSelected()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ }
+
+ [Test, Order(12)]
+ public void VerifyVSM_Label_CannotSelectWhileDisabled()
+ {
+ App.WaitForElement("LabelReset");
+ App.Tap("LabelReset");
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ var labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Selected"));
+ App.WaitForElement("LabelDisable");
+ App.Tap("LabelDisable");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SelectableLabelContainer");
+ App.Tap("SelectableLabelContainer");
+ App.WaitForElement("LabelState");
+ labelText = App.FindElement("LabelState").GetText();
+ Assert.That(labelText, Is.EqualTo("State: Disabled"));
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_SliderFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_SliderFeatureTests.cs
new file mode 100644
index 000000000000..c903e5707878
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_SliderFeatureTests.cs
@@ -0,0 +1,325 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_SliderFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerSliderFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerSliderFeatureTests;
+
+ public VisualStateManager_SliderFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ [Test, Order(1)]
+ public void VerifyVSM_Slider_NormalState()
+ {
+ App.WaitForElement("VSMSliderButton");
+ App.Tap("VSMSliderButton");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal | Value: 50"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_Slider_NormalOrUnfocusedState()
+ {
+ App.WaitForElement("SliderNormal");
+ App.Tap("SliderNormal");
+ App.WaitForElement("SliderState");
+ var stateText1 = App.FindElement("SliderState").GetText();
+ Assert.That(stateText1, Is.EqualTo("State: Normal/Unfocused | Value: 50"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_Slider_DisabledState()
+ {
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled | Value: 50"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(4)]
+ public void VerifyVSM_Slider_ResetState()
+ {
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal | Value: 50"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_Slider_FocusedState()
+ {
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Focused | Value: 65"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(6)]
+ public void VerifyVSM_Slider_ResetWhileFocused()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var initialStateText = App.FindElement("SliderState").GetText();
+ Assert.That(initialStateText, Is.EqualTo("State: Focused | Value: 65"));
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal | Value: 50"));
+ }
+
+ [Test, Order(7)]
+ public void VerifyVSM_Slider_ResetWhileUnfocused()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderNormal");
+ App.Tap("SliderNormal");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal/Unfocused | Value: 50"));
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderState");
+ var resetStateText = App.FindElement("SliderState").GetText();
+ Assert.That(resetStateText, Is.EqualTo("State: Normal | Value: 50"));
+ }
+
+ [Test, Order(8)]
+ public void VerifyVSM_Slider_ResetWhileDisabled()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled | Value: 50"));
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderState");
+ var resetStateText = App.FindElement("SliderState").GetText();
+ Assert.That(resetStateText, Is.EqualTo("State: Normal | Value: 50"));
+ }
+
+ [Test, Order(9)]
+ public void VerifyVSM_Slider_DisableWhileFocused()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var initialStateText = App.FindElement("SliderState").GetText();
+ Assert.That(initialStateText, Is.EqualTo("State: Focused | Value: 65"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled | Value: 65"));
+ }
+
+ [Test, Order(10)]
+ public void VerifyVSM_Slider_DisableWhileUnfocused()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderNormal");
+ App.Tap("SliderNormal");
+ App.WaitForElement("SliderState");
+ var initialStateText = App.FindElement("SliderState").GetText();
+ Assert.That(initialStateText, Is.EqualTo("State: Normal/Unfocused | Value: 50"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled | Value: 50"));
+ }
+
+ [Test, Order(11)]
+ public void VerifyVSM_Slider_FocusedWhileDisabled()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var initialStateText = App.FindElement("SliderState").GetText();
+ Assert.That(initialStateText, Is.EqualTo("State: Focused | Value: 65"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var stateText = App.FindElement("SliderState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled | Value: 65"));
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var focusedDisabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(focusedDisabledStateText, Is.EqualTo("State: Disabled | Value: 65"));
+ }
+
+ [Test, Order(12)]
+ public void VerifyVSM_Slider_UnfocusToFocus()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderNormal");
+ App.Tap("SliderNormal");
+ App.WaitForElement("SliderState");
+ var initialStateText = App.FindElement("SliderState").GetText();
+ Assert.That(initialStateText, Is.EqualTo("State: Normal/Unfocused | Value: 50"));
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var focusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(focusedStateText, Is.EqualTo("State: Focused | Value: 65"));
+ }
+
+ [Test, Order(13)]
+ public void VerifyVSM_Slider_FocusToUnFocus()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var focusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(focusedStateText, Is.EqualTo("State: Focused | Value: 65"));
+ App.WaitForElement("SliderNormal");
+ App.Tap("SliderNormal");
+ App.WaitForElement("SliderState");
+ var unfocusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(unfocusedStateText, Is.EqualTo("State: Normal/Unfocused | Value: 65"));
+ }
+
+ [Test, Order(14)]
+ public void VerifyVSM_Slider_DisableAndEnableWhileUnfocused()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderNormal");
+ App.Tap("SliderNormal");
+ App.WaitForElement("SliderState");
+ var unfocusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(unfocusedStateText, Is.EqualTo("State: Normal/Unfocused | Value: 50"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var disabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(disabledStateText, Is.EqualTo("State: Disabled | Value: 50"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var unfocusedDisabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(unfocusedDisabledStateText, Is.EqualTo("State: Normal | Value: 50"));
+ }
+
+ [Test, Order(15)]
+ public void VerifyVSM_Slider_DisableAndEnableWhileFocused()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderFocus");
+ App.Tap("SliderFocus");
+ App.WaitForElement("SliderState");
+ var focusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(focusedStateText, Is.EqualTo("State: Focused | Value: 65"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var disabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(disabledStateText, Is.EqualTo("State: Disabled | Value: 65"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var focusedEnabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(focusedEnabledStateText, Is.EqualTo("State: Normal | Value: 65"));
+ }
+
+ [Test, Order(16)]
+ public void VerifyVSM_Slider_DisableAndEnableWhileReset()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderState");
+ var unfocusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(unfocusedStateText, Is.EqualTo("State: Normal | Value: 50"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var disabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(disabledStateText, Is.EqualTo("State: Disabled | Value: 50"));
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("SliderState");
+ var unfocusedEnabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(unfocusedEnabledStateText, Is.EqualTo("State: Normal | Value: 50"));
+ }
+
+ [Test, Order(17)]
+ public void VerifyVSM_Slider_DragToFocus()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("VSMSlider");
+ var sliderRect = App.WaitForElement("VSMSlider").GetRect();
+ var startX = sliderRect.X + (sliderRect.Width * 50 / 100);
+ var centerY = sliderRect.Y + (sliderRect.Height / 2);
+ var endX = sliderRect.X + (sliderRect.Width * 35 / 100);
+ App.DragCoordinates(startX, centerY, endX, centerY);
+ App.WaitForElement("SliderState");
+ var focusedStateText = App.FindElement("SliderState").GetText();
+ Assert.That(focusedStateText, Does.Contain("State: Focused"));
+ }
+
+ [Test, Order(18)]
+ public void VerifyVSM_Slider_DragWhileDisabled()
+ {
+ App.WaitForElement("VSMSlider");
+ App.WaitForElement("SliderReset");
+ App.Tap("SliderReset");
+ App.WaitForElement("SliderDisable");
+ App.Tap("SliderDisable");
+ App.WaitForElement("VSMSlider");
+ var sliderRect = App.WaitForElement("VSMSlider").GetRect();
+ var startX = sliderRect.X + (sliderRect.Width * 50 / 100);
+ var centerY = sliderRect.Y + (sliderRect.Height / 2);
+ var endX = sliderRect.X + (sliderRect.Width * 35 / 100);
+ App.DragCoordinates(startX, centerY, endX, centerY);
+ App.WaitForElement("SliderState");
+ var disabledStateText = App.FindElement("SliderState").GetText();
+ Assert.That(disabledStateText, Is.EqualTo("State: Disabled | Value: 50"));
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_SwitchFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_SwitchFeatureTests.cs
new file mode 100644
index 000000000000..aad06bb9f2ff
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/VisualStateManager_SwitchFeatureTests.cs
@@ -0,0 +1,281 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.VisualStateManager)]
+public class VisualStateManager_SwitchFeatureTests : _GalleryUITest
+{
+ public const string VisualStateManagerSwitchFeatureTests = "VisualStateManager Feature Matrix";
+ public override string GalleryPageName => VisualStateManagerSwitchFeatureTests;
+
+ public VisualStateManager_SwitchFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ [Test, Order(1)]
+ public void VerifyVSM_Switch_InitialState()
+ {
+ App.WaitForElement("VSMSwitchButton");
+ App.Tap("VSMSwitchButton");
+ App.WaitForElement("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Off"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(2)]
+ public void VerifyVSM_Switch_On()
+ {
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(3)]
+ public void VerifyVSM_Switch_Off()
+ {
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Off"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(4)]
+ public void VerifyVSM_Switch_Reset()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(5)]
+ public void VerifyVSM_Switch_OnToOff()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ App.Tap("VSMSwitch");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Off"));
+ }
+
+ [Test, Order(6)]
+ public void VerifyVSM_Switch_OffToOn()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Off"));
+ App.Tap("VSMSwitch");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ }
+
+ [Test, Order(7)]
+ public void VerifyVSM_Switch_DisableWhileOn()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(8)]
+ public void VerifyVSM_Switch_DisableWhileOff()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ VerifyScreenshot();
+ }
+
+ [Test, Order(9)]
+ public void VerifyVSM_Switch_ResetWhileDisabled()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(10)]
+ public void VerifyVSM_Switch_DisableAndResetWhileOn()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(11)]
+ public void VerifyVSM_Switch_DisableAndResetWhileOff()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(12)]
+ public void VerifyVSM_Switch_OnWhileDisabled()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(13)]
+ public void VerifyVSM_Switch_OffWhileDisabled()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ }
+
+ [Test, Order(14)]
+ public void VerifyVSM_Switch_OnWhileDisableAndEnable()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ }
+
+ [Test, Order(15)]
+ public void VerifyVSM_Switch_OffWhileDisableAndEnable()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Off"));
+ }
+
+ [Test, Order(16)]
+ public void VerifyVSM_Switch_ResetWhileOnAndDisabled()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(17)]
+ public void VerifyVSM_Switch_ResetWhileOffAndDisabled()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("SwitchDisable");
+ App.Tap("SwitchDisable");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Disabled"));
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+
+ [Test, Order(18)]
+ public void VerifyVSM_Switch_ResetWhileOn()
+ {
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ App.WaitForElement("VSMSwitch");
+ App.Tap("VSMSwitch");
+ var stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: On"));
+ App.WaitForElement("SwitchReset");
+ App.Tap("SwitchReset");
+ stateText = App.FindElement("SwitchState").GetText();
+ Assert.That(stateText, Is.EqualTo("State: Normal"));
+ }
+}
+
diff --git a/src/Controls/tests/TestCases.Shared.Tests/UITestCategories.cs b/src/Controls/tests/TestCases.Shared.Tests/UITestCategories.cs
index 6246fcc6aaf2..0721fdd7837a 100644
--- a/src/Controls/tests/TestCases.Shared.Tests/UITestCategories.cs
+++ b/src/Controls/tests/TestCases.Shared.Tests/UITestCategories.cs
@@ -76,5 +76,6 @@ internal static class UITestCategories
public const string Fonts = "Fonts";
public const string SafeAreaEdges = "SafeAreaEdges";
public const string Material3 = "Material3";
+ public const string VisualStateManager = "VisualStateManager";
}
}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_Disable.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_Disable.png
new file mode 100644
index 000000000000..c43807271f70
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_Disable.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_InitialState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_InitialState.png
new file mode 100644
index 000000000000..72d5658dff23
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_PressedAndReleased.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_PressedAndReleased.png
new file mode 100644
index 000000000000..40fa0fec2baa
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_PressedAndReleased.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_Reset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_Reset.png
new file mode 100644
index 000000000000..d4adf9875032
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Button_Reset.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Checked.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Checked.png
new file mode 100644
index 000000000000..a7471dfb1bd4
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Checked.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Disable.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Disable.png
new file mode 100644
index 000000000000..8c458ebda384
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Disable.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_DisableWhileChecked.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_DisableWhileChecked.png
new file mode 100644
index 000000000000..de5864c43aa4
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_DisableWhileChecked.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_InitialState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_InitialState.png
new file mode 100644
index 000000000000..d7ddd9c9030c
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Reset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Reset.png
new file mode 100644
index 000000000000..422fb69ebb43
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CheckBox_Reset.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Disabled.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Disabled.png
new file mode 100644
index 000000000000..73b3d02a27d3
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_InitialState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_InitialState.png
new file mode 100644
index 000000000000..512d0702934c
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Normal.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Normal.png
new file mode 100644
index 000000000000..bdc8ee719892
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Normal.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Reset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Reset.png
new file mode 100644
index 000000000000..8a277921af90
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Reset.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Selected.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Selected.png
new file mode 100644
index 000000000000..3875b2638f18
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Selected.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Selected_Multiple.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Selected_Multiple.png
new file mode 100644
index 000000000000..b8ac55e2102c
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_CollectionView_Selected_Multiple.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Completed.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Completed.png
new file mode 100644
index 000000000000..10c0d00504f9
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Completed.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Disable.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Disable.png
new file mode 100644
index 000000000000..f94d34391aeb
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Disable.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableAndEnableWhileFocused.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableAndEnableWhileFocused.png
new file mode 100644
index 000000000000..4f28fce3749d
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableAndEnableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png
new file mode 100644
index 000000000000..dffb7c168100
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileFocused.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileFocused.png
new file mode 100644
index 000000000000..b388e9748936
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileReset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileReset.png
new file mode 100644
index 000000000000..ff42a6e22c88
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileReset.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileUnFocused.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileUnFocused.png
new file mode 100644
index 000000000000..1ba68aac114e
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_DisableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Focus.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Focus.png
new file mode 100644
index 000000000000..121eb115a603
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Focus.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_InitialState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_InitialState.png
new file mode 100644
index 000000000000..2aee00ca214f
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Invalid.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Invalid.png
new file mode 100644
index 000000000000..3088af5c910b
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Invalid.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Reset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Reset.png
new file mode 100644
index 000000000000..10679a5c9df5
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Reset.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Unfocus.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Unfocus.png
new file mode 100644
index 000000000000..96045e1b8557
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Unfocus.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Validate.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Validate.png
new file mode 100644
index 000000000000..c9cffb111356
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Entry_Validate.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_DisableWhileNormal.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_DisableWhileNormal.png
new file mode 100644
index 000000000000..c34aafef585d
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_DisableWhileNormal.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_DisableWhileSelected.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_DisableWhileSelected.png
new file mode 100644
index 000000000000..f081b045c7f7
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_DisableWhileSelected.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Disabled.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Disabled.png
new file mode 100644
index 000000000000..2d890164881a
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_InitialState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_InitialState.png
new file mode 100644
index 000000000000..8509f8bce962
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Reset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Reset.png
new file mode 100644
index 000000000000..9724dc5a6525
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Reset.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Selected.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Selected.png
new file mode 100644
index 000000000000..caac733d8e29
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Label_Selected.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_DisabledState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_DisabledState.png
new file mode 100644
index 000000000000..bcf9164f8ae8
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_DisabledState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_FocusedState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_FocusedState.png
new file mode 100644
index 000000000000..cdf3123c6600
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_FocusedState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_NormalOrUnfocusedState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_NormalOrUnfocusedState.png
new file mode 100644
index 000000000000..9333043a77ae
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_NormalOrUnfocusedState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_NormalState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_NormalState.png
new file mode 100644
index 000000000000..40b3c2b835d8
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_NormalState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_ResetState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_ResetState.png
new file mode 100644
index 000000000000..9aa438e472ad
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Slider_ResetState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_DisableWhileOff.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_DisableWhileOff.png
new file mode 100644
index 000000000000..aaab0ef1f8a6
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_DisableWhileOff.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_DisableWhileOn.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_DisableWhileOn.png
new file mode 100644
index 000000000000..fb732ad107da
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_DisableWhileOn.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_InitialState.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_InitialState.png
new file mode 100644
index 000000000000..9b9412e6c7f3
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_Off.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_Off.png
new file mode 100644
index 000000000000..1b71a840598b
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_Off.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_On.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_On.png
new file mode 100644
index 000000000000..73d0943a1351
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_On.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_Reset.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_Reset.png
new file mode 100644
index 000000000000..644b95ee6edb
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVSM_Switch_Reset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Slider_Reenabled_Normal_State.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Slider_Reenabled_Normal_State.png
new file mode 100644
index 000000000000..02f78a477188
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Slider_Reenabled_Normal_State.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Slider_Reset_Disabled_State.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Slider_Reset_Disabled_State.png
new file mode 100644
index 000000000000..a28c00fe715b
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/Slider_Reset_Disabled_State.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_Disable.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_Disable.png
new file mode 100644
index 000000000000..66690f582936
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_Disable.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_DisableWhilePressedAndReleased.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_DisableWhilePressedAndReleased.png
new file mode 100644
index 000000000000..2a0a97b53688
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_DisableWhilePressedAndReleased.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_InitialState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_InitialState.png
new file mode 100644
index 000000000000..267e091c62e4
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_PressedAndReleased.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_PressedAndReleased.png
new file mode 100644
index 000000000000..0352852efc5b
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_PressedAndReleased.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_Reset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_Reset.png
new file mode 100644
index 000000000000..c9ef011e08fa
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_Reset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_ResetWhileDisabled.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_ResetWhileDisabled.png
new file mode 100644
index 000000000000..241fe1d3fb6e
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Button_ResetWhileDisabled.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Checked.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Checked.png
new file mode 100644
index 000000000000..7192e2706675
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Checked.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Disable.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Disable.png
new file mode 100644
index 000000000000..3b8d37440ef2
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Disable.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_DisableWhileChecked.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_DisableWhileChecked.png
new file mode 100644
index 000000000000..72cadc0f8db2
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_DisableWhileChecked.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_InitialState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_InitialState.png
new file mode 100644
index 000000000000..8d7ed306edfd
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Reset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Reset.png
new file mode 100644
index 000000000000..cd1b99f45454
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CheckBox_Reset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Disabled.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Disabled.png
new file mode 100644
index 000000000000..32ba35f8f728
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_InitialState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_InitialState.png
new file mode 100644
index 000000000000..df03cdd0d8ae
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Normal.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Normal.png
new file mode 100644
index 000000000000..3b76a57a0a13
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Normal.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Reset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Reset.png
new file mode 100644
index 000000000000..20222ca7bdaa
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Reset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Selected.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Selected.png
new file mode 100644
index 000000000000..659d34a362ae
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Selected.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Selected_Multiple.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Selected_Multiple.png
new file mode 100644
index 000000000000..06c83cec4410
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_CollectionView_Selected_Multiple.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Completed.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Completed.png
new file mode 100644
index 000000000000..6697c3200a94
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Completed.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Disable.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Disable.png
new file mode 100644
index 000000000000..e7c300a3eba3
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Disable.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableAndEnableWhileFocused.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableAndEnableWhileFocused.png
new file mode 100644
index 000000000000..1f0e4e742585
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableAndEnableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png
new file mode 100644
index 000000000000..756200f69464
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableAndEnableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileFocused.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileFocused.png
new file mode 100644
index 000000000000..d9e3baa9a182
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileFocused.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileReset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileReset.png
new file mode 100644
index 000000000000..9234161c00d2
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileReset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileUnFocused.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileUnFocused.png
new file mode 100644
index 000000000000..c37975c368a8
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_DisableWhileUnFocused.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Focus.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Focus.png
new file mode 100644
index 000000000000..b9292dc6823a
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Focus.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_InitialState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_InitialState.png
new file mode 100644
index 000000000000..e1f270533ce7
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Invalid.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Invalid.png
new file mode 100644
index 000000000000..a8b85d3592d2
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Invalid.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Reset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Reset.png
new file mode 100644
index 000000000000..4bf01ce96f59
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Reset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Unfocus.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Unfocus.png
new file mode 100644
index 000000000000..475f4e082663
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Unfocus.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Validate.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Validate.png
new file mode 100644
index 000000000000..a37222394d7d
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Entry_Validate.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_DisableWhileNormal.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_DisableWhileNormal.png
new file mode 100644
index 000000000000..bb9af788ff90
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_DisableWhileNormal.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_DisableWhileSelected.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_DisableWhileSelected.png
new file mode 100644
index 000000000000..f6dea0a69e67
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_DisableWhileSelected.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Disabled.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Disabled.png
new file mode 100644
index 000000000000..9e81f768a68d
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Disabled.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_InitialState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_InitialState.png
new file mode 100644
index 000000000000..ecdf0cd4b2d3
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Reset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Reset.png
new file mode 100644
index 000000000000..b1c0b49d2619
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Reset.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Selected.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Selected.png
new file mode 100644
index 000000000000..5a29f67808c0
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Label_Selected.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_DisabledState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_DisabledState.png
new file mode 100644
index 000000000000..31c8bd59aab3
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_DisabledState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_FocusedState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_FocusedState.png
new file mode 100644
index 000000000000..73a3f2ffe2a1
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_FocusedState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_NormalOrUnfocusedState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_NormalOrUnfocusedState.png
new file mode 100644
index 000000000000..8e2879ea501a
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_NormalOrUnfocusedState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_NormalState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_NormalState.png
new file mode 100644
index 000000000000..5ed7fe64e3fd
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_NormalState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_ResetState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_ResetState.png
new file mode 100644
index 000000000000..7fe5c53fc46f
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Slider_ResetState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_DisableWhileOff.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_DisableWhileOff.png
new file mode 100644
index 000000000000..100f0051aa65
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_DisableWhileOff.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_DisableWhileOn.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_DisableWhileOn.png
new file mode 100644
index 000000000000..586766a485ab
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_DisableWhileOn.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_InitialState.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_InitialState.png
new file mode 100644
index 000000000000..2435ef2a0fcd
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_InitialState.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_Off.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_Off.png
new file mode 100644
index 000000000000..ad1eb0d32771
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_Off.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_On.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_On.png
new file mode 100644
index 000000000000..026d8ef81f9c
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_On.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_Reset.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_Reset.png
new file mode 100644
index 000000000000..0d011da41b82
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVSM_Switch_Reset.png differ