diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/ClearButtonVisiblityButton_TextEmpty.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/ClearButtonVisiblityButton_TextEmpty.png
new file mode 100644
index 000000000000..16eaad2b1aac
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/ClearButtonVisiblityButton_TextEmpty.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/ClearButtonVisiblityButton_TextPresent.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/ClearButtonVisiblityButton_TextPresent.png
new file mode 100644
index 000000000000..c33099e75103
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/ClearButtonVisiblityButton_TextPresent.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/PlaceholderWithClearButtonVisible.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/PlaceholderWithClearButtonVisible.png
new file mode 100644
index 000000000000..b7f1aa9f3db6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/PlaceholderWithClearButtonVisible.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCharacterSpacingWhenFontFamily.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCharacterSpacingWhenFontFamily.png
new file mode 100644
index 000000000000..2335703dd51c
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCharacterSpacingWhenFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCharacterSpacingWhenMaxLengthSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCharacterSpacingWhenMaxLengthSet.png
new file mode 100644
index 000000000000..29c360172ba6
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyCharacterSpacingWhenMaxLengthSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png
new file mode 100644
index 000000000000..4cd7376f32cc
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png
new file mode 100644
index 000000000000..6d0661ce5d68
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenTextAlignedVertically.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenTextAlignedVertically.png
new file mode 100644
index 000000000000..cda25852ab2a
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearButtonVisiblityWhenTextAlignedVertically.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearVisiblityButtonWhenTextColorChanged.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearVisiblityButtonWhenTextColorChanged.png
new file mode 100644
index 000000000000..432bdd463b72
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyClearVisiblityButtonWhenTextColorChanged.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..c4145fd469c2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenPlaceholderColorSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenPlaceholderColorSet.png
new file mode 100644
index 000000000000..59d01ca1beab
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenPlaceholderColorSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenPlaceholderTextSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenPlaceholderTextSet.png
new file mode 100644
index 000000000000..af0b1a2a64ce
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntryControlWhenPlaceholderTextSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntry_WithShadow.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntry_WithShadow.png
new file mode 100644
index 000000000000..37f2d297e0a2
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyEntry_WithShadow.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..67afb8aa613d
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png
new file mode 100644
index 000000000000..694075902c73
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..cc0cac4a995b
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnHorizontalTextAlignment.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnHorizontalTextAlignment.png
new file mode 100644
index 000000000000..bf5970fdbd26
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnHorizontalTextAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnVerticalTextAlignment.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnVerticalTextAlignment.png
new file mode 100644
index 000000000000..7d64cf56b103
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordBasedOnVerticalTextAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordWhenFontSizeSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordWhenFontSizeSet.png
new file mode 100644
index 000000000000..a60efe8eaae8
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordWhenFontSizeSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordWhenMaxLenghtSetValue.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordWhenMaxLenghtSetValue.png
new file mode 100644
index 000000000000..15a095fb2abb
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyIsPasswordWhenMaxLenghtSetValue.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..b4d7c7dbe80b
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithCharacterSpacing.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithCharacterSpacing.png
new file mode 100644
index 000000000000..724c326fbc03
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontAttributes.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontAttributes.png
new file mode 100644
index 000000000000..1af1e8ad0685
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontAttributes.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontFamily.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontFamily.png
new file mode 100644
index 000000000000..f6ade1047e66
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontSize.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontSize.png
new file mode 100644
index 000000000000..3732ab052bfd
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithFontSize.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithHorizontalAlignment.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithHorizontalAlignment.png
new file mode 100644
index 000000000000..3a670917e8e4
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithHorizontalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithPasswordTrue.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithPasswordTrue.png
new file mode 100644
index 000000000000..b6b45bbb8f39
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithPasswordTrue.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithShadow.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithShadow.png
new file mode 100644
index 000000000000..38d514355fbe
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithShadow.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithVerticalAlignment.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithVerticalAlignment.png
new file mode 100644
index 000000000000..5eddbf395e65
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyPlaceholderWithVerticalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenAlingnedHorizontally.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenAlingnedHorizontally.png
new file mode 100644
index 000000000000..34d048b358dc
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenAlingnedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenAlingnedVertically.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenAlingnedVertically.png
new file mode 100644
index 000000000000..03b60a6da528
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenAlingnedVertically.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenCharacterSpacingSetValues.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenCharacterSpacingSetValues.png
new file mode 100644
index 000000000000..848f172c35d3
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenCharacterSpacingSetValues.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenClearButtonVisibleSetNever.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenClearButtonVisibleSetNever.png
new file mode 100644
index 000000000000..03cd241b9ec8
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenClearButtonVisibleSetNever.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontAttributesSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontAttributesSet.png
new file mode 100644
index 000000000000..7cbf5f8f8ce1
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontAttributesSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontFamilySetValue.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontFamilySetValue.png
new file mode 100644
index 000000000000..589548813bb3
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontFamilySetValue.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontSizeSetCorrectly.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontSizeSetCorrectly.png
new file mode 100644
index 000000000000..516de1791f27
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenFontSizeSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenIsPasswordTrueOrFalse.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenIsPasswordTrueOrFalse.png
new file mode 100644
index 000000000000..1d528daf5870
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenIsPasswordTrueOrFalse.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenKeyboardTypeSet.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenKeyboardTypeSet.png
new file mode 100644
index 000000000000..2c59ee8bc528
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenKeyboardTypeSet.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenTextColorSetCorrectly.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenTextColorSetCorrectly.png
new file mode 100644
index 000000000000..335e441cac49
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyTextWhenTextColorSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..7a5d6239288b
Binary files /dev/null and b/src/Controls/tests/TestCases.Android.Tests/snapshots/android/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
index 5154d89be455..cfa00819efca 100644
--- a/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
+++ b/src/Controls/tests/TestCases.HostApp/CoreViews/CorePageView.cs
@@ -63,7 +63,7 @@ public override string ToString()
new GalleryPageFactory(() => new KeyboardScrollingGridGallery(), "Keyboard Scrolling Gallery - Grid with Star Row"),
new GalleryPageFactory(() => new KeyboardScrollingNonScrollingPageLargeTitlesGallery(), "Keyboard Scrolling Gallery - NonScrolling Page / Large Titles"),
new GalleryPageFactory(() => new KeyboardScrollingNonScrollingPageSmallTitlesGallery(), "Keyboard Scrolling Gallery - NonScrolling Page / Small Titles"),
- new GalleryPageFactory(() => new KeyboardScrollingScrollingPageLargeTitlesGallery(), "Keyboard Scrolling Gallery - Scrolling Page / Large Titles"),
+ new GalleryPageFactory(() => new KeyboardScrollingScrollingPageLargeTitlesGallery(), "Keyboard Scrolling Gallery - Scrolling Page / Large Titles"),
new GalleryPageFactory(() => new KeyboardScrollingScrollingPageSmallTitlesGallery(), "Keyboard Scrolling Gallery - Scrolling Page / Small Titles"),
new GalleryPageFactory(() => new LabelCoreGalleryPage(), "Label Gallery"),
new GalleryPageFactory(() => new ListViewCoreGalleryPage(), "ListView Gallery"),
@@ -87,6 +87,7 @@ public override string ToString()
new GalleryPageFactory(() => new CollectionViewFeaturePage(), "CollectionView Feature Matrix"),
new GalleryPageFactory(() => new LabelControlPage(), "Label Feature Matrix"),
new GalleryPageFactory(() => new CarouselViewFeaturePage(), "CarouselView Feature Matrix"),
+ new GalleryPageFactory(() => new EntryControlPage(), "Entry Feature Matrix"),
new GalleryPageFactory(() => new ImageControlPage(), "Image Feature Matrix"),
new GalleryPageFactory(() => new ImageButtonControlPage(), "ImageButton Feature Matrix"),
new GalleryPageFactory(() => new BoxViewControlPage(), "BoxView Feature Matrix"),
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryControlPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryControlPage.xaml
new file mode 100644
index 000000000000..ca14466bb74a
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryControlPage.xaml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryControlPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryControlPage.xaml.cs
new file mode 100644
index 000000000000..9f09e92d176f
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryControlPage.xaml.cs
@@ -0,0 +1,125 @@
+using System.ComponentModel;
+using Microsoft.Maui.Controls;
+
+namespace Maui.Controls.Sample;
+
+public class EntryControlPage : NavigationPage
+{
+ private EntryViewModel _viewModel;
+
+ public EntryControlPage()
+ {
+ _viewModel = new EntryViewModel();
+ PushAsync(new EntryControlMainPage(_viewModel));
+ }
+}
+
+public partial class EntryControlMainPage : ContentPage
+{
+ private EntryViewModel _viewModel;
+
+ public EntryControlMainPage(EntryViewModel viewModel)
+ {
+ InitializeComponent();
+ _viewModel = viewModel;
+ BindingContext = _viewModel;
+ EntryControl.PropertyChanged += UpdateEntryControl;
+ }
+
+ private async void NavigateToOptionsPage_Clicked(object sender, EventArgs e)
+ {
+ BindingContext = _viewModel = new EntryViewModel();
+ _viewModel.Text = "Test Entry";
+ _viewModel.Placeholder = "Enter text here";
+ _viewModel.CursorPosition = 0;
+ _viewModel.SelectionLength = 0;
+ await Navigation.PushAsync(new EntryOptionsPage(_viewModel));
+ }
+
+ private void CursorPositionButton_Clicked(object sender, EventArgs e)
+ {
+ if (int.TryParse(CursorPositionEntry.Text, out int cursorPosition))
+ {
+ _viewModel.CursorPosition = cursorPosition;
+ }
+ }
+
+ private void SelectionLength_Clicked(object sender, EventArgs e)
+ {
+ if (int.TryParse(SelectionLengthEntry.Text, out int selectionLength))
+ {
+ _viewModel.SelectionLength = selectionLength;
+ }
+ }
+
+ private void OnUpdateCursorAndSelectionClicked(object sender, EventArgs e)
+ {
+ if (int.TryParse(CursorPositionEntry.Text, out int cursorPosition))
+ {
+ EntryControl.Focus();
+ EntryControl.CursorPosition = cursorPosition;
+
+ if (BindingContext is EntryViewModel vm)
+ vm.CursorPosition = cursorPosition;
+ }
+
+ if (int.TryParse(SelectionLengthEntry.Text, out int selectionLength))
+ {
+ EntryControl.Focus();
+ EntryControl.SelectionLength = selectionLength;
+
+ if (BindingContext is EntryViewModel vm)
+ vm.SelectionLength = selectionLength;
+ }
+ CursorPositionEntry.Text = EntryControl.CursorPosition.ToString();
+ SelectionLengthEntry.Text = EntryControl.SelectionLength.ToString();
+ }
+
+ void UpdateEntryControl(object sender, PropertyChangedEventArgs args)
+ {
+ if (args.PropertyName == Entry.CursorPositionProperty.PropertyName)
+ CursorPositionEntry.Text = EntryControl.CursorPosition.ToString();
+ else if (args.PropertyName == Entry.SelectionLengthProperty.PropertyName)
+ SelectionLengthEntry.Text = EntryControl.SelectionLength.ToString();
+ }
+
+ private void EntryControl_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ string eventInfo = $"TextChanged: Old='{e.OldTextValue}', New='{e.NewTextValue}'";
+
+ if (BindingContext is EntryViewModel vm)
+ {
+ vm.TextChangedText = eventInfo;
+ }
+ }
+
+ private void EntryControl_Completed(object sender, EventArgs e)
+ {
+ string eventInfo = $"Completed: Event Triggered";
+
+ if (BindingContext is EntryViewModel vm)
+ {
+ vm.CompletedText = eventInfo;
+ }
+ }
+
+ private void EntryControl_Focused(object sender, FocusEventArgs e)
+ {
+ string eventInfo = $"Focused: Event Triggered";
+
+ if (BindingContext is EntryViewModel vm)
+ {
+ vm.FocusedText = eventInfo;
+ }
+ }
+
+ private void EntryControl_Unfocused(object sender, FocusEventArgs e)
+ {
+ string eventInfo = $"Unfocused: Event Triggered";
+
+ if (BindingContext is EntryViewModel vm)
+ {
+ vm.UnfocusedText = eventInfo;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryOptionsPage.xaml b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryOptionsPage.xaml
new file mode 100644
index 000000000000..8b8bc8678a90
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryOptionsPage.xaml
@@ -0,0 +1,443 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryOptionsPage.xaml.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryOptionsPage.xaml.cs
new file mode 100644
index 000000000000..891d66cd34aa
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryOptionsPage.xaml.cs
@@ -0,0 +1,274 @@
+using Microsoft.Maui.Controls;
+using System;
+
+namespace Maui.Controls.Sample;
+
+public partial class EntryOptionsPage : ContentPage
+{
+ private EntryViewModel _viewModel;
+
+ public EntryOptionsPage(EntryViewModel viewModel)
+ {
+ InitializeComponent();
+ _viewModel = viewModel;
+ BindingContext = _viewModel;
+ }
+
+ private async void ApplyButton_Clicked(object sender, EventArgs e)
+ {
+ await Navigation.PopAsync();
+ }
+
+ private void TextColorButton_Clicked(object sender, EventArgs e)
+ {
+ if (sender is Button button)
+ {
+ _viewModel.TextColor = button.BackgroundColor;
+ }
+ }
+
+ private void Entry_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (BindingContext is EntryViewModel vm)
+ {
+ vm.Text = e.NewTextValue;
+ }
+ }
+
+ private void PlaceholderEntry_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (BindingContext is EntryViewModel vm)
+ {
+ vm.Placeholder = e.NewTextValue;
+ }
+ }
+
+ private void PlaceholderColorButton_Clicked(object sender, EventArgs e)
+ {
+ if (sender is Button button)
+ {
+ _viewModel.PlaceholderColor = button.BackgroundColor;
+ }
+ }
+
+ private void ClearButtonVisibility_CheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (sender == ClearButtonWhileEditing)
+ {
+ _viewModel.ClearButtonVisibility = ClearButtonVisibility.WhileEditing;
+ }
+ else if (sender == ClearButtonNever)
+ {
+ _viewModel.ClearButtonVisibility = ClearButtonVisibility.Never;
+ }
+ }
+
+ private void HorizontalAlignmentButton_Clicked(object sender, EventArgs e)
+ {
+ if (sender is Button button)
+ {
+ _viewModel.HorizontalTextAlignment = button.AutomationId switch
+ {
+ "HStart" => TextAlignment.Start,
+ "HCenter" => TextAlignment.Center,
+ "HEnd" => TextAlignment.End,
+ _ => _viewModel.HorizontalTextAlignment
+ };
+ }
+ }
+
+ private void VerticalAlignmentButton_Clicked(object sender, EventArgs e)
+ {
+ _viewModel.HeightRequest = 100;
+ if (sender is Button button)
+ {
+ _viewModel.VerticalTextAlignment = button.AutomationId switch
+ {
+ "VStart" => TextAlignment.Start,
+ "VCenter" => TextAlignment.Center,
+ "VEnd" => TextAlignment.End,
+ _ => _viewModel.VerticalTextAlignment
+ };
+ }
+ }
+
+ private void IsPasswordTrueOrFalse_Clicked(object sender, EventArgs e)
+ {
+ if (IsPasswordTrue.IsChecked)
+ {
+ _viewModel.IsPassword = true;
+ }
+ else if (IsPasswordFalse.IsChecked)
+ {
+ _viewModel.IsPassword = false;
+ }
+ }
+
+ private void ReturnTypeButton_Clicked(object sender, EventArgs e)
+ {
+ if (sender is Button button)
+ {
+ _viewModel.ReturnType = button.AutomationId switch
+ {
+ "Done" => ReturnType.Done,
+ "Next" => ReturnType.Next,
+ "Go" => ReturnType.Go,
+ "Search" => ReturnType.Search,
+ "Send" => ReturnType.Send,
+ "Default" => ReturnType.Default,
+ _ => _viewModel.ReturnType
+ };
+ }
+ }
+
+ private void MaxLengthButton_Clicked(object sender, EventArgs e)
+ {
+ if (int.TryParse(MaxLengthEntry.Text, out int maxLength))
+ {
+ _viewModel.MaxLength = maxLength;
+ }
+ }
+
+ private void FontSizeEntry_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (double.TryParse(FontSizeEntry.Text, out double fontSize))
+ {
+ _viewModel.FontSize = fontSize;
+ }
+ }
+
+ private void CharacterSpacing_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ if (double.TryParse(CharacterSpacingEntry.Text, out double characterSpacing))
+ {
+ _viewModel.CharacterSpacing = characterSpacing;
+ }
+ }
+
+ private void IsReadOnlyTrueOrFalse_Clicked(object sender, EventArgs e)
+ {
+ if (IsReadOnlyTrue.IsChecked)
+ {
+ _viewModel.IsReadOnly = true;
+ }
+ else if (IsReadOnlyFalse.IsChecked)
+ {
+ _viewModel.IsReadOnly = false;
+ }
+ }
+
+ private void IsTextPredictionEnabledTrueOrFalse_Clicked(object sender, EventArgs e)
+ {
+ if (IsTextPredictionEnabledTrue.IsChecked)
+ {
+ _viewModel.IsTextPredictionEnabled = true;
+ }
+ else if (IsTextPredictionEnabledFalse.IsChecked)
+ {
+ _viewModel.IsTextPredictionEnabled = false;
+ }
+ }
+
+ private void IsSpellCheckEnabledTrueOrFalse_Clicked(object sender, EventArgs e)
+ {
+ if (IsSpellCheckEnabledTrue.IsChecked)
+ {
+ _viewModel.IsSpellCheckEnabled = true;
+ }
+ else if (IsSpellCheckEnabledFalse.IsChecked)
+ {
+ _viewModel.IsSpellCheckEnabled = false;
+ }
+ }
+
+ private void KeyboardButton_Clicked(object sender, EventArgs e)
+ {
+ if (sender is Button button)
+ {
+ _viewModel.Keyboard = button.AutomationId switch
+ {
+ "Default" => Keyboard.Default,
+ "Chat" => Keyboard.Chat,
+ "Email" => Keyboard.Email,
+ "Numeric" => Keyboard.Numeric,
+ "Telephone" => Keyboard.Telephone,
+ "Text" => Keyboard.Text,
+ "Url" => Keyboard.Url,
+ _ => _viewModel.Keyboard
+ };
+ }
+ }
+
+ private void FontFamilyEntry_TextChanged(object sender, TextChangedEventArgs e)
+ {
+ _viewModel.FontFamily = FontFamilyEntry.Text;
+ }
+
+ private void FlowDirection_CheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (sender == FlowDirectionLeftToRight)
+ {
+ _viewModel.FlowDirection = FlowDirection.LeftToRight;
+ }
+ else if (sender == FlowDirectionRightToLeft)
+ {
+ _viewModel.FlowDirection = FlowDirection.RightToLeft;
+ }
+ }
+
+ private void IsVisibleTrueOrFalse_Clicked(object sender, EventArgs e)
+ {
+ if (IsVisibleTrue.IsChecked)
+ {
+ _viewModel.IsVisible = true;
+ }
+ else if (IsVisibleFalse.IsChecked)
+ {
+ _viewModel.IsVisible = false;
+ }
+ }
+
+ private void IsEnabledTrueOrFalse_Clicked(object sender, EventArgs e)
+ {
+ if (IsEnabledTrue.IsChecked)
+ {
+ _viewModel.IsEnabled = true;
+ }
+ else if (IsEnabledFalse.IsChecked)
+ {
+ _viewModel.IsEnabled = false;
+ }
+ }
+
+ private void TextTransform_CheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (sender == TextTransformLowercase)
+ {
+ _viewModel.TextTransform = TextTransform.Lowercase;
+ }
+ else if (sender == TextTransformUppercase)
+ {
+ _viewModel.TextTransform = TextTransform.Uppercase;
+ }
+ else if (sender == TextTransformDefault)
+ {
+ _viewModel.TextTransform = TextTransform.Default;
+ }
+ }
+
+ private void FontAttributes_CheckedChanged(object sender, CheckedChangedEventArgs e)
+ {
+ if (sender == FontAttributesBold)
+ {
+ _viewModel.FontAttributes = FontAttributes.Bold;
+ }
+ else if (sender == FontAttributesNone)
+ {
+ _viewModel.FontAttributes = FontAttributes.None;
+ }
+ else if (sender == FontAttributesItalic)
+ {
+ _viewModel.FontAttributes = FontAttributes.Italic;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryViewModel.cs b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryViewModel.cs
new file mode 100644
index 000000000000..247be85eec5e
--- /dev/null
+++ b/src/Controls/tests/TestCases.HostApp/FeatureMatrix/EntryControl/EntryViewModel.cs
@@ -0,0 +1,277 @@
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+using System.Windows.Input;
+
+namespace Maui.Controls.Sample;
+
+public class EntryViewModel : INotifyPropertyChanged
+{
+ private string _text = "Test Entry";
+ private Color _textColor = Colors.Black;
+ private string _placeholder = "Enter text here";
+ private Color _placeholderColor = Colors.Gray;
+ private double _fontSize = 14;
+ private double _heightrequest = -1;
+ private TextAlignment _horizontalTextAlignment = TextAlignment.Start;
+ private TextAlignment _verticalTextAlignment = TextAlignment.Center;
+ private bool _isPassword = false;
+ private double _characterSpacing = 0;
+ private ReturnType _returnType = ReturnType.Default;
+ private int _maxLength = -1;
+ private int _cursorPosition = 0;
+ private int _selectionLength = 0;
+ private bool _isReadOnly = false;
+ private bool _isTextPredictionEnabled = false;
+ private bool _isSpellCheckEnabled = false;
+ private Keyboard _keyboard = Keyboard.Default;
+ private string _fontFamily = null;
+ private bool isVisible = true;
+ private bool _isEnabled = true;
+ private ClearButtonVisibility _clearButtonVisibility = ClearButtonVisibility.WhileEditing;
+ private FlowDirection _flowDirection = FlowDirection.LeftToRight;
+ private bool _hasShadow = false;
+ private Shadow _entryShadow = null;
+ private TextTransform _transform = TextTransform.Default;
+ private FontAttributes _fontAttributes = FontAttributes.None;
+ private string _textChangedText = "TextChanged: Not triggered";
+ private string _completedText = "Completed: Not triggered";
+ private string _focusedText = "Focused: Not triggered";
+ private string _unfocusedText = "Unfocused: Not triggered";
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ public ICommand ReturnCommand { get; set; }
+ public EntryViewModel()
+ {
+ ReturnCommand = new Command(
+ execute: (entryText) =>
+ {
+ if (entryText == "Test")
+ {
+ Text = "Command Executed with Parameter";
+ }
+ }
+ );
+ }
+ public string Text
+ {
+ get => _text;
+ set { _text = value; OnPropertyChanged(); }
+ }
+
+ public Color TextColor
+ {
+ get => _textColor;
+ set { _textColor = value; OnPropertyChanged(); }
+ }
+
+ public string Placeholder
+ {
+ get => _placeholder;
+ set { _placeholder = value; OnPropertyChanged(); }
+ }
+ public Color PlaceholderColor
+ {
+ get => _placeholderColor;
+ set { _placeholderColor = value; OnPropertyChanged(); }
+ }
+
+ public ClearButtonVisibility ClearButtonVisibility
+ {
+ get => _clearButtonVisibility;
+ set { _clearButtonVisibility = value; OnPropertyChanged(); }
+ }
+
+ public double FontSize
+ {
+ get => _fontSize;
+ set { _fontSize = value; OnPropertyChanged(); }
+ }
+
+ public double HeightRequest
+ {
+ get => _heightrequest;
+ set { _heightrequest = value; OnPropertyChanged(); }
+ }
+
+ public TextAlignment HorizontalTextAlignment
+ {
+ get => _horizontalTextAlignment;
+ set { _horizontalTextAlignment = value; OnPropertyChanged(); }
+ }
+
+ public TextAlignment VerticalTextAlignment
+ {
+ get => _verticalTextAlignment;
+ set { _verticalTextAlignment = value; OnPropertyChanged(); }
+ }
+
+ public bool IsPassword
+ {
+ get => _isPassword;
+ set { _isPassword = value; OnPropertyChanged(); }
+ }
+
+ public double CharacterSpacing
+ {
+ get => _characterSpacing;
+ set { _characterSpacing = value; OnPropertyChanged(); }
+ }
+
+ public ReturnType ReturnType
+ {
+ get => _returnType;
+ set { _returnType = value; OnPropertyChanged(); }
+ }
+
+ public int MaxLength
+ {
+ get => _maxLength;
+ set { _maxLength = value; OnPropertyChanged(); }
+ }
+ public int CursorPosition
+ {
+ get => _cursorPosition;
+ set { _cursorPosition = value; OnPropertyChanged(); }
+ }
+ public int SelectionLength
+ {
+ get => _selectionLength;
+ set { _selectionLength = value; OnPropertyChanged(); }
+ }
+ public bool IsReadOnly
+ {
+ get => _isReadOnly;
+ set { _isReadOnly = value; OnPropertyChanged(); }
+ }
+ public bool IsTextPredictionEnabled
+ {
+ get => _isTextPredictionEnabled;
+ set { _isTextPredictionEnabled = value; OnPropertyChanged(); }
+ }
+ public bool IsSpellCheckEnabled
+ {
+ get => _isSpellCheckEnabled;
+ set { _isSpellCheckEnabled = value; OnPropertyChanged(); }
+ }
+
+ public bool IsVisible
+ {
+ get => isVisible;
+ set { isVisible = value; OnPropertyChanged(); }
+ }
+
+ public bool IsEnabled
+ {
+ get => _isEnabled;
+ set { _isEnabled = value; OnPropertyChanged(); }
+ }
+
+ public Keyboard Keyboard
+ {
+ get => _keyboard;
+ set { _keyboard = value; OnPropertyChanged(); }
+ }
+
+ public FlowDirection FlowDirection
+ {
+ get => _flowDirection;
+ set { _flowDirection = value; OnPropertyChanged(); }
+ }
+
+ public string FontFamily
+ {
+ get => _fontFamily;
+ set { _fontFamily = value; OnPropertyChanged(); }
+ }
+
+ public string TextChangedText
+ {
+ get => _textChangedText;
+ set { _textChangedText = value; OnPropertyChanged(); }
+ }
+
+ public string CompletedText
+ {
+ get => _completedText;
+ set { _completedText = value; OnPropertyChanged(); }
+ }
+
+ public string FocusedText
+ {
+ get => _focusedText;
+ set { _focusedText = value; OnPropertyChanged(); }
+ }
+
+ public string UnfocusedText
+ {
+ get => _unfocusedText;
+ set { _unfocusedText = value; OnPropertyChanged(); }
+ }
+
+ public bool HasShadow
+ {
+ get => _hasShadow;
+ set
+ {
+ if (_hasShadow != value)
+ {
+ _hasShadow = value;
+ EntryShadow = value
+ ? new Shadow
+ {
+ Radius = 10,
+ Opacity = 1.0f,
+ Brush = Colors.Black.AsPaint(),
+ Offset = new Point(5, 5)
+ }
+ : null;
+ OnPropertyChanged(nameof(HasShadow));
+ }
+ }
+ }
+
+ public Shadow EntryShadow
+ {
+ get => _entryShadow;
+ private set
+ {
+ if (_entryShadow != value)
+ {
+ _entryShadow = value;
+ OnPropertyChanged(nameof(EntryShadow));
+ }
+ }
+ }
+
+ public TextTransform TextTransform
+ {
+ get => _transform;
+ set
+ {
+ if (_transform != value)
+ {
+ _transform = value;
+ OnPropertyChanged(nameof(TextTransform));
+ }
+ }
+ }
+
+ public FontAttributes FontAttributes
+ {
+ get => _fontAttributes;
+ set
+ {
+ if (_fontAttributes != value)
+ {
+ _fontAttributes = value;
+ OnPropertyChanged(nameof(FontAttributes));
+ }
+ }
+ }
+
+ protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/ClearButtonVisiblityButton_TextEmpty.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/ClearButtonVisiblityButton_TextEmpty.png
new file mode 100644
index 000000000000..9447ed8dd79a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/ClearButtonVisiblityButton_TextEmpty.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/ClearButtonVisiblityButton_TextPresent.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/ClearButtonVisiblityButton_TextPresent.png
new file mode 100644
index 000000000000..04e03536606e
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/ClearButtonVisiblityButton_TextPresent.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/PlaceholderWithClearButtonVisible.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/PlaceholderWithClearButtonVisible.png
new file mode 100644
index 000000000000..67c459a1293e
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/PlaceholderWithClearButtonVisible.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCharacterSpacingWhenFontFamily.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCharacterSpacingWhenFontFamily.png
new file mode 100644
index 000000000000..c757de6f900b
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCharacterSpacingWhenFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCharacterSpacingWhenMaxLengthSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCharacterSpacingWhenMaxLengthSet.png
new file mode 100644
index 000000000000..4964c6df0b51
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyCharacterSpacingWhenMaxLengthSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png
new file mode 100644
index 000000000000..dc45efe55a13
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png
new file mode 100644
index 000000000000..66a8443a17e8
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png
new file mode 100644
index 000000000000..476f97874a00
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenTextAlignedVertically.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenTextAlignedVertically.png
new file mode 100644
index 000000000000..5981d4069dea
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearButtonVisiblityWhenTextAlignedVertically.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearVisiblityButtonWhenTextColorChanged.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearVisiblityButtonWhenTextColorChanged.png
new file mode 100644
index 000000000000..0ff357627167
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyClearVisiblityButtonWhenTextColorChanged.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..b73d41febd7a
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenPlaceholderColorSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenPlaceholderColorSet.png
new file mode 100644
index 000000000000..3aea2c251108
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenPlaceholderColorSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenPlaceholderTextSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenPlaceholderTextSet.png
new file mode 100644
index 000000000000..763ea54d393b
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntryControlWhenPlaceholderTextSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntry_WithShadow.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntry_WithShadow.png
new file mode 100644
index 000000000000..1d9d15f020a2
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyEntry_WithShadow.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..e90d42215628
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png
new file mode 100644
index 000000000000..411e213258b6
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..ac36fe21b64e
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnHorizontalTextAlignment.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnHorizontalTextAlignment.png
new file mode 100644
index 000000000000..0b68241d0662
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnHorizontalTextAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnVerticalTextAlignment.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnVerticalTextAlignment.png
new file mode 100644
index 000000000000..5cc52fbf5ccb
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordBasedOnVerticalTextAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordWhenFontSizeSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordWhenFontSizeSet.png
new file mode 100644
index 000000000000..b54654809a05
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordWhenFontSizeSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordWhenMaxLenghtSetValue.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordWhenMaxLenghtSetValue.png
new file mode 100644
index 000000000000..c1957f80d1a6
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyIsPasswordWhenMaxLenghtSetValue.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..68444c7955a3
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithCharacterSpacing.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithCharacterSpacing.png
new file mode 100644
index 000000000000..e115b9cfd56b
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontAttributes.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontAttributes.png
new file mode 100644
index 000000000000..3cbec0584847
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontAttributes.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontFamily.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontFamily.png
new file mode 100644
index 000000000000..2c4b92b752ac
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontSize.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontSize.png
new file mode 100644
index 000000000000..53331b487fce
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithFontSize.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithHorizontalAlignment.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithHorizontalAlignment.png
new file mode 100644
index 000000000000..e157c2259364
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithHorizontalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithPasswordTrue.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithPasswordTrue.png
new file mode 100644
index 000000000000..8a741d160787
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithPasswordTrue.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithShadow.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithShadow.png
new file mode 100644
index 000000000000..47b62ec96ba7
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithShadow.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithVerticalAlignment.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithVerticalAlignment.png
new file mode 100644
index 000000000000..ff9e72b160c3
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyPlaceholderWithVerticalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenAlingnedHorizontally.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenAlingnedHorizontally.png
new file mode 100644
index 000000000000..df5ebe294a0f
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenAlingnedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenAlingnedVertically.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenAlingnedVertically.png
new file mode 100644
index 000000000000..1d8999c111db
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenAlingnedVertically.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenCharacterSpacingSetValues.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenCharacterSpacingSetValues.png
new file mode 100644
index 000000000000..501946421f95
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenCharacterSpacingSetValues.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenClearButtonVisibleSetNever.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenClearButtonVisibleSetNever.png
new file mode 100644
index 000000000000..7aa34c76fd29
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenClearButtonVisibleSetNever.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontAttributesSet.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontAttributesSet.png
new file mode 100644
index 000000000000..019244febc69
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontAttributesSet.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontFamilySetValue.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontFamilySetValue.png
new file mode 100644
index 000000000000..8884953b30c5
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontFamilySetValue.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontSizeSetCorrectly.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontSizeSetCorrectly.png
new file mode 100644
index 000000000000..26a61899095b
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenFontSizeSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenIsPasswordTrueOrFalse.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenIsPasswordTrueOrFalse.png
new file mode 100644
index 000000000000..d9ea8da73526
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenIsPasswordTrueOrFalse.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenTextColorSetCorrectly.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenTextColorSetCorrectly.png
new file mode 100644
index 000000000000..bbd90aaad2f0
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyTextWhenTextColorSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..0e014cff5de7
Binary files /dev/null and b/src/Controls/tests/TestCases.Mac.Tests/snapshots/mac/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/EntryFeatureTests.cs b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/EntryFeatureTests.cs
new file mode 100644
index 000000000000..208e3993f2b2
--- /dev/null
+++ b/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/EntryFeatureTests.cs
@@ -0,0 +1,1038 @@
+using NUnit.Framework;
+using UITest.Appium;
+using UITest.Core;
+
+namespace Microsoft.Maui.TestCases.Tests;
+
+[Category(UITestCategories.Entry)]
+public class EntryFeatureTests : UITest
+{
+ public const string EntryFeatureMatrix = "Entry Feature Matrix";
+
+#if IOS
+ private const int CropBottomValue = 1550;
+#elif ANDROID
+ private const int CropBottomValue = 1150;
+#elif WINDOWS
+ private const int CropBottomValue = 400;
+#else
+ private const int CropBottomValue = 360;
+#endif
+
+ public EntryFeatureTests(TestDevice device)
+ : base(device)
+ {
+ }
+
+ protected override void FixtureSetup()
+ {
+ base.FixtureSetup();
+ App.NavigateToGallery(EntryFeatureMatrix);
+ }
+
+ [Test, Order(0)]
+ public void VerifyInitialEventStates()
+ {
+ App.WaitForElement("TestEntry");
+ Assert.That(App.WaitForElement("UnfocusedLabel").GetText(), Is.EqualTo("Unfocused: Not triggered"));
+ Assert.That(App.WaitForElement("CompletedLabel").GetText(), Is.EqualTo("Completed: Not triggered"));
+ Assert.That(App.WaitForElement("TextChangedLabel").GetText(), Is.EqualTo("TextChanged: Old='', New='Test Entry'"));
+ }
+
+ [Test, Order(4)]
+ public void VerifyEntryCompletedEvent()
+ {
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ App.PressEnter();
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("CompletedLabel").GetText(), Is.EqualTo("Completed: Event Triggered"));
+ }
+
+ [Test, Order(2)]
+ public void VerifyEntryTextChangedEvent()
+ {
+
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.EnterText("TestEntry", "New Text");
+
+#if !ANDROID
+ Assert.That(App.WaitForElement("TextChangedLabel").GetText(), Is.EqualTo("TextChanged: Old='New Tex', New='New Text'"));
+#else
+ Assert.That(App.WaitForElement("TextChangedLabel").GetText(), Is.EqualTo("TextChanged: Old='', New='New Text'"));
+#endif
+ }
+
+
+ [Test, Order(1)]
+ public void VerifyEntryFocusedEvent()
+ {
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("FocusedLabel").GetText(), Is.EqualTo("Focused: Event Triggered"));
+ }
+
+ [Test, Order(3)]
+ public void VerifyEntryUnfocusedEvent()
+ {
+ App.WaitForElement("TestEntry");
+ App.WaitForElement("SelectionLengthEntry");
+ App.Tap("SelectionLengthEntry");
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("UnfocusedLabel").GetText(), Is.EqualTo("Unfocused: Event Triggered"));
+ }
+
+ [Test]
+ public void VerifyClearButtonVisiblityWhenTextPresentOrEmpty()
+ {
+ Exception? exception = null;
+ App.WaitForElement("Entry Control");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandlingOrSetException(ref exception, "ClearButtonVisiblityButton_TextPresent");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ VerifyScreenshotWithKeyboardHandlingOrSetException(ref exception, "ClearButtonVisiblityButton_TextEmpty");
+ if (exception != null)
+ {
+ throw exception;
+ }
+ }
+
+ [Test]
+ public void VerifyClearButtonVisiblityWhenTextAlignedHorizontally()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("HEnd");
+ App.Tap("HEnd");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+
+ [Test]
+ public void VerifyClearButtonVisiblityWhenTextAlignedVertically()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("VEnd");
+ App.Tap("VEnd");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+
+#if TEST_FAILS_ON_IOS // When taking a screenshot of a password field (), iOS hides the password text for security reasons.
+ [Test]
+ public void VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+#endif
+
+#if TEST_FAILS_ON_ANDROID //After setting IsReadOnly to true, the Cursor remains visible on Android even when IsCursorVisible is set to false, which is not the expected behavior.
+ [Test]
+ public void VerifyClearButtonVisibilityWhenIsReadOnlyTrue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ReadOnlyTrue");
+ App.Tap("ReadOnlyTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+#endif
+
+ [Test]
+ public void VerifyClearVisiblityButtonWhenTextColorChanged()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextColorRed");
+ App.Tap("TextColorRed");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+
+ [Test]
+ public void VerifyTextWhenClearButtonVisibleSetNever()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ClearButtonNever");
+ App.Tap("ClearButtonNever");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+
+
+ [Test]
+ public void VerifyTextWhenAlingnedHorizontally()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("HCenter");
+ App.Tap("HCenter");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyTextWhenAlingnedVertically()
+ {
+ App.Tap("Options");
+ App.WaitForElement("VEnd");
+ App.Tap("VEnd");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+#if TEST_FAILS_ON_ANDROID //After setting IsReadOnly to true, the Cursor remains visible on Android even when IsCursorVisible is set to false, which is not the expected behavior.
+ [Test]
+ public void VerifyTextEntryWhenSetAsReadOnly()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ReadOnlyTrue");
+ App.Tap("ReadOnlyTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ // On Android, using App.EnterText in UI tests (e.g., with Appium UITest) can programmatically enter text into an Entry control even if its IsReadOnly property is set to true.
+ App.EnterText("TestEntry", "123");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("Test Entry"));
+ }
+#endif
+
+ [Test]
+ public void VerifyTextWhenFontFamilySetValue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontFamily");
+ App.EnterText("FontFamily", "MontserratBold");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyTextWhenCharacterSpacingSetValues()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyHorizontalTextAlignmentBasedOnCharacterSpacing()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("HCenter");
+ App.Tap("HCenter");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyVerticalTextAlignmentBasedOnCharacterSpacing()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("VEnd");
+ App.Tap("VEnd");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+#if TEST_FAILS_ON_IOS // When taking a screenshot of a password field (), iOS hides the password text for security reasons.
+ [Test]
+ public void VerifyIsPasswordBasedOnCharacterSpacing()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+#endif
+
+ [Test]
+ public void VerifyCharacterSpacingWhenFontFamily()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("FontFamily");
+ App.EnterText("FontFamily", "MontserratBold");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+#if TEST_FAILS_ON_IOS // When taking a screenshot of a password field (), iOS hides the password text for security reasons.
+ [Test]
+ public void VerifyTextWhenIsPasswordTrueOrFalse()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyIsPasswordBasedOnVerticalTextAlignment()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyIsPasswordBasedOnHorizontalTextAlignment()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("HEnd");
+ App.Tap("HEnd");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyIsPasswordWhenMaxLenghtSetValue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.EnterText("TextEntryChanged", "Test Entered Set MaxLenght");
+ App.WaitForElement("MaxLength");
+ App.ClearText("MaxLength");
+ App.EnterText("MaxLength", "6");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+#endif
+
+ [Test]
+ public void VerifyCharacterSpacingWhenMaxLengthSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.EnterText("TextEntryChanged", "Test Entered Set MaxLenght");
+ App.WaitForElement("MaxLength");
+ App.ClearText("MaxLength");
+ App.EnterText("MaxLength", "6");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyTextWhenMaxLengthSetValue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.EnterText("TextEntryChanged", "Test Entered Set MaxLenght");
+ App.WaitForElement("MaxLength");
+ App.ClearText("MaxLength");
+ App.EnterText("MaxLength", "6");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("Test E"));
+ }
+
+#if TEST_FAILS_ON_ANDROID //After setting IsReadOnly to true, the Cursor remains visible on Android even when IsCursorVisible is set to false, which is not the expected behavior.
+ [Test]
+ public void VerifyMaxLengthWhenIsReadOnlyTrue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.EnterText("TextEntryChanged", "Test Entered Set MaxLenght");
+ App.WaitForElement("ReadOnlyTrue");
+ App.Tap("ReadOnlyTrue");
+ App.WaitForElement("MaxLength");
+ App.ClearText("MaxLength");
+ App.EnterText("MaxLength", "6");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ // On Android, using App.EnterText in UI tests (e.g., with Appium UITest) can programmatically enter text into an Entry control even if its IsReadOnly property is set to true.
+ App.EnterText("TestEntry", "123");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("Test E"));
+
+ }
+#endif
+
+ [Test]
+ public void VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("VEnd");
+ App.Tap("VEnd");
+ App.WaitForElement("HEnd");
+ App.Tap("HEnd");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyTextWhenTextColorSetCorrectly()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextColorRed");
+ App.Tap("TextColorRed");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyTextWhenFontSizeSetCorrectly()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontSizeEntry");
+ App.ClearText("FontSizeEntry");
+ App.EnterText("FontSizeEntry", "20");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+#if TEST_FAILS_ON_IOS // When taking a screenshot of a password field (), iOS hides the password text for security reasons.
+ [Test]
+ public void VerifyIsPasswordWhenFontSizeSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.ClearText("FontSizeEntry");
+ App.EnterText("FontSizeEntry", "20");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+#endif
+
+#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_IOS && TEST_FAILS_ON_WINDOWS //related issue link: https://github.com/dotnet/maui/issues/29833
+ [Test]
+ public void VerifyTextWhenIsTextPredictionEnabledTrueOrFalse()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextPredictionTrue");
+ App.Tap("TextPredictionTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.EnterText("TestEntry", "Testig");
+ App.EnterText("TestEntry", " ");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("Testing "));
+ }
+
+ [Test]
+ public void VerifyTextWhenIsSpellCheckEnabledTrueOrFalse()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("SpellCheckTrue");
+ App.Tap("SpellCheckTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.EnterText("TestEntry", "Testig");
+ App.EnterText("TestEntry", " ");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+#endif
+
+ [Test]
+ public void VerifyTextWhenSelectionLengthSetValue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("SelectionLengthEntry");
+ App.ClearText("SelectionLengthEntry");
+ App.EnterText("SelectionLengthEntry", "5");
+ App.DismissKeyboard();
+ App.WaitForElement("UpdateCursorAndSelectionButton");
+ App.Tap("UpdateCursorAndSelectionButton");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("SelectionLengthEntry").GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ public void VerifyTextWhenCursorPositionValueSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("CursorPositionEntry");
+ App.ClearText("CursorPositionEntry");
+ App.EnterText("CursorPositionEntry", "5");
+ App.DismissKeyboard();
+ App.WaitForElement("UpdateCursorAndSelectionButton");
+ App.Tap("UpdateCursorAndSelectionButton");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("CursorPositionEntry").GetText(), Is.EqualTo("10"));
+ }
+
+#if TEST_FAILS_ON_IOS // When taking a screenshot of a password field (), iOS hides the password text for security reasons.
+ [Test]
+ public void VerifyIsPasswordWhenCursorPositionValueSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("CursorPositionEntry");
+ App.ClearText("CursorPositionEntry");
+ App.EnterText("CursorPositionEntry", "5");
+ App.DismissKeyboard();
+ App.WaitForElement("UpdateCursorAndSelectionButton");
+ App.Tap("UpdateCursorAndSelectionButton");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("CursorPositionEntry").GetText(), Is.EqualTo("10"));
+ }
+#endif
+
+ [Test]
+ public void VerifyCursorPositionWhenSelectionLengthSetValue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("CursorPositionEntry");
+ App.ClearText("CursorPositionEntry");
+ App.EnterText("CursorPositionEntry", "3");
+ App.WaitForElement("SelectionLengthEntry");
+ App.ClearText("SelectionLengthEntry");
+ App.EnterText("SelectionLengthEntry", "5");
+ App.DismissKeyboard();
+ App.WaitForElement("UpdateCursorAndSelectionButton");
+ App.Tap("UpdateCursorAndSelectionButton");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("CursorPositionEntry").GetText(), Is.EqualTo("10"));
+ Assert.That(App.WaitForElement("SelectionLengthEntry").GetText(), Is.EqualTo("0"));
+ }
+
+#if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_WINDOWS // On Windows, cursor position and selection length still work when the Entry is set to read-only
+ //On android After setting IsReadOnly to true, the Cursor remains visible on Android even when IsCursorVisible is set to false, which is not the expected behavior.
+ [Test]
+ public void VerifyCursorPositionWhenIsReadOnlyTrue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ReadOnlyTrue");
+ App.Tap("ReadOnlyTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ Assert.That(App.WaitForElement("CursorPositionEntry").GetText(), Is.EqualTo("0"));
+ }
+
+ [Test]
+ public void VerifySelectionLenghtWhenIsReadOnlyTrue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ReadOnlyTrue");
+ App.Tap("ReadOnlyTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("SelectionLengthEntry");
+ App.ClearText("SelectionLengthEntry");
+ App.EnterText("SelectionLengthEntry", "3");
+ App.WaitForElement("UpdateCursorAndSelectionButton");
+ App.Tap("UpdateCursorAndSelectionButton");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ Assert.That(App.WaitForElement("SelectionLengthEntry").GetText(), Is.EqualTo("3"));
+ }
+#endif
+
+ [Test]
+ public void VerifyTextWhenReturmCommandAndReturnCommandParameter()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.EnterText("TestEntry", "Test");
+ App.Tap("TestEntry");
+ App.PressEnter();
+ App.DismissKeyboard();
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("Command Executed with Parameter"));
+ }
+
+#if TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_WINDOWS //keybord type is not supported on Windows and Maccatalyst platforms
+ [Test]
+ public void VerifyTextWhenKeyboardTypeSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Numeric");
+ App.Tap("Numeric");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+
+#if TEST_FAILS_ON_ANDROID //related issue:https://github.com/dotnet/maui/issues/26968
+ [Test]
+ public void VerifyTextWhenReturnTypeSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Search");
+ App.Tap("Search");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling();
+ }
+
+#endif
+#endif
+
+#if TEST_FAILS_ON_ANDROID // On Android, using App.EnterText in UI tests (e.g., with Appium UITest) can programmatically enter text into an Entry control even if its IsEnabled property is set to false.
+ [Test]
+ public void VerifyEntryControlWhenIsEnabledTrueOrFalse()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.EnterText("TestEntry", "123");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("123"));
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("EnabledFalse");
+ App.Tap("EnabledFalse");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.EnterText("TestEntry", "123");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("Test Entry"));
+
+ }
+#endif
+
+ [Test]
+ public void VerifyEntryControlWhenIsVisibleTrueOrFalse()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("VisibleFalse");
+ App.Tap("VisibleFalse");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForNoElement("TestEntry");
+ }
+
+ [Test]
+ public void VerifyEntryControlWhenFlowDirectionSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyPlaceholderWhenFlowDirectionSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FlowDirectionRightToLeft");
+ App.Tap("FlowDirectionRightToLeft");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+
+ [Test]
+ public void VerifyEntryControlWhenPlaceholderTextSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PlaceholderText");
+ App.ClearText("PlaceholderText");
+ App.EnterText("PlaceholderText", "Enter your name");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.DismissKeyboard();
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyEntryControlWhenPlaceholderColorSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PlaceholderColorRed");
+ App.Tap("PlaceholderColorRed");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.ClearText("TestEntry");
+ App.DismissKeyboard();
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyEntryWhenTextChanged()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.EnterText("TextEntryChanged", "New Text Changed");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("New Text Changed"));
+ }
+
+ [Test]
+ public void VerifyTextWhenFontAttributesSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontAttributesBold");
+ App.Tap("FontAttributesBold");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyTextWhenTextTransFormSet()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextTransformUppercase");
+ App.Tap("TextTransformUppercase");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ Assert.That(App.WaitForElement("TestEntry").GetText(), Is.EqualTo("TEST ENTRY"));
+ }
+
+#if TEST_FAILS_ON_WINDOWS //related issue link: https://github.com/dotnet/maui/issues/29812
+ [Test]
+ public void VerifyEntry_WithShadow()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+
+ App.WaitForElement("ShadowCheckBox");
+ App.Tap("ShadowCheckBox");
+
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyPlaceholderWithShadow()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("ShadowCheckBox");
+ App.Tap("ShadowCheckBox");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+#endif
+
+ [Test]
+ public void VerifyPlaceholderWithClearButtonVisible()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ App.Tap("TestEntry");
+ VerifyScreenshotWithKeyboardHandling("PlaceholderWithClearButtonVisible");
+ }
+
+ [Test]
+ public void VerifyPlaceholderWithPasswordTrue()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("PlaceholderText");
+ App.ClearText("PlaceholderText");
+ App.EnterText("PlaceholderText", "Enter your password");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("PasswordTrue");
+ App.Tap("PasswordTrue");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyPlaceholderWithHorizontalAlignment()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("HCenter");
+ App.Tap("HCenter");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyPlaceholderWithVerticalAlignment()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("VStart");
+ App.Tap("VStart");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+#if TEST_FAILS_ON_WINDOWS //related issue link: https://github.com/dotnet/maui/issues/30071
+ [Test]
+ public void VerifyPlaceholderWithCharacterSpacing()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("CharacterSpacing");
+ App.ClearText("CharacterSpacing");
+ App.EnterText("CharacterSpacing", "5");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+#endif
+
+ [Test]
+ public void VerifyPlaceholderWithFontFamily()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontFamily");
+ App.EnterText("FontFamily", "MontserratBold");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyPlaceholderWithFontSize()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontSizeEntry");
+ App.ClearText("FontSizeEntry");
+ App.EnterText("FontSizeEntry", "20");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ [Test]
+ public void VerifyPlaceholderWithFontAttributes()
+ {
+ App.WaitForElement("Options");
+ App.Tap("Options");
+ App.WaitForElement("FontAttributesItalic");
+ App.Tap("FontAttributesItalic");
+ App.WaitForElement("TextEntryChanged");
+ App.ClearText("TextEntryChanged");
+ App.WaitForElement("Apply");
+ App.Tap("Apply");
+ App.WaitForElement("TestEntry");
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ }
+
+ ///
+ /// Helper method to handle keyboard visibility and take a screenshot with appropriate cropping
+ ///
+ /// Optional name for the screenshot
+ private void VerifyScreenshotWithKeyboardHandling(string? screenshotName = null)
+ {
+#if ANDROID // Skip keyboard on Android to address CI flakiness, Keyboard is not needed validation.
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+
+ // Using cropping instead of DismissKeyboard() on iOS to maintain focus during testing
+ if (string.IsNullOrEmpty(screenshotName))
+ VerifyScreenshot(cropBottom: CropBottomValue);
+ else
+ VerifyScreenshot(screenshotName, cropBottom: CropBottomValue);
+ }
+
+ ///
+ /// Helper method to handle keyboard visibility and set exception if screenshot verification fails
+ ///
+ /// Reference to exception variable
+ /// Name for the screenshot
+ private void VerifyScreenshotWithKeyboardHandlingOrSetException(ref Exception? exception, string screenshotName)
+ {
+#if ANDROID
+ if (App.IsKeyboardShown())
+ App.DismissKeyboard();
+#endif
+ VerifyScreenshotOrSetException(ref exception, screenshotName, cropBottom: CropBottomValue);
+
+ }
+}
\ No newline at end of file
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ClearButtonVisiblityButton_TextEmpty.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ClearButtonVisiblityButton_TextEmpty.png
new file mode 100644
index 000000000000..3c4967040a1d
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ClearButtonVisiblityButton_TextEmpty.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ClearButtonVisiblityButton_TextPresent.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ClearButtonVisiblityButton_TextPresent.png
new file mode 100644
index 000000000000..ebdf2f9fa78e
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ClearButtonVisiblityButton_TextPresent.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/PlaceholderWithClearButtonVisible.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/PlaceholderWithClearButtonVisible.png
new file mode 100644
index 000000000000..923892b1cd04
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/PlaceholderWithClearButtonVisible.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenFontFamily.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenFontFamily.png
new file mode 100644
index 000000000000..5ce37218ca86
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenMaxLengthSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenMaxLengthSet.png
new file mode 100644
index 000000000000..1122571ca2cf
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyCharacterSpacingWhenMaxLengthSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png
new file mode 100644
index 000000000000..cde8c69a34df
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png
new file mode 100644
index 000000000000..360d690f17f7
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenIsPasswordTrueOrFalse.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png
new file mode 100644
index 000000000000..397a0ace47b1
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenTextAlignedVertically.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenTextAlignedVertically.png
new file mode 100644
index 000000000000..27731fa6f54b
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearButtonVisiblityWhenTextAlignedVertically.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearVisiblityButtonWhenTextColorChanged.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearVisiblityButtonWhenTextColorChanged.png
new file mode 100644
index 000000000000..1c6c384bb196
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyClearVisiblityButtonWhenTextColorChanged.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..1eb1f0473118
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenPlaceholderColorSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenPlaceholderColorSet.png
new file mode 100644
index 000000000000..cc4dc382fca1
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenPlaceholderColorSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenPlaceholderTextSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenPlaceholderTextSet.png
new file mode 100644
index 000000000000..81cb8b3f74a6
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyEntryControlWhenPlaceholderTextSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..dc58784fac16
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png
new file mode 100644
index 000000000000..db07a04191bd
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..4492e5bff9b9
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnHorizontalTextAlignment.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnHorizontalTextAlignment.png
new file mode 100644
index 000000000000..9bb715479043
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnHorizontalTextAlignment.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnVerticalTextAlignment.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnVerticalTextAlignment.png
new file mode 100644
index 000000000000..b83ed3d5c168
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordBasedOnVerticalTextAlignment.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenFontSizeSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenFontSizeSet.png
new file mode 100644
index 000000000000..1cdc99b1e3d1
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenFontSizeSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenMaxLenghtSetValue.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenMaxLenghtSetValue.png
new file mode 100644
index 000000000000..a03d4f788412
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyIsPasswordWhenMaxLenghtSetValue.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..72f728abf454
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontAttributes.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontAttributes.png
new file mode 100644
index 000000000000..cee03169de02
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontAttributes.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontFamily.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontFamily.png
new file mode 100644
index 000000000000..c82426f76e44
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontSize.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontSize.png
new file mode 100644
index 000000000000..e823520105f3
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithFontSize.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithHorizontalAlignment.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithHorizontalAlignment.png
new file mode 100644
index 000000000000..e07c13c62aca
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithHorizontalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithPasswordTrue.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithPasswordTrue.png
new file mode 100644
index 000000000000..3a7e4a706f88
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithPasswordTrue.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithVerticalAlignment.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithVerticalAlignment.png
new file mode 100644
index 000000000000..9bf548123d1e
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyPlaceholderWithVerticalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedHorizontally.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedHorizontally.png
new file mode 100644
index 000000000000..5df211eaa421
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedVertically.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedVertically.png
new file mode 100644
index 000000000000..b7cc436590b3
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenAlingnedVertically.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenCharacterSpacingSetValues.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenCharacterSpacingSetValues.png
new file mode 100644
index 000000000000..80f80fc36794
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenCharacterSpacingSetValues.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenClearButtonVisibleSetNever.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenClearButtonVisibleSetNever.png
new file mode 100644
index 000000000000..c329be97bccb
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenClearButtonVisibleSetNever.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontAttributesSet.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontAttributesSet.png
new file mode 100644
index 000000000000..35fd733be6e2
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontAttributesSet.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontFamilySetValue.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontFamilySetValue.png
new file mode 100644
index 000000000000..0584136c1cb4
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontFamilySetValue.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontSizeSetCorrectly.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontSizeSetCorrectly.png
new file mode 100644
index 000000000000..0db3c3d8404a
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenFontSizeSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenIsPasswordTrueOrFalse.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenIsPasswordTrueOrFalse.png
new file mode 100644
index 000000000000..262482fcb47f
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenIsPasswordTrueOrFalse.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenTextColorSetCorrectly.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenTextColorSetCorrectly.png
new file mode 100644
index 000000000000..8e87a0053789
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyTextWhenTextColorSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..e9b39056b085
Binary files /dev/null and b/src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextEmpty.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextEmpty.png
new file mode 100644
index 000000000000..b1b22b33d80d
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextEmpty.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextPresent.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextPresent.png
new file mode 100644
index 000000000000..fcb42a9cee78
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/ClearButtonVisiblityButton_TextPresent.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/PlaceholderWithClearButtonVisible.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/PlaceholderWithClearButtonVisible.png
new file mode 100644
index 000000000000..48b8534f06f2
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/PlaceholderWithClearButtonVisible.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCharacterSpacingWhenFontFamily.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCharacterSpacingWhenFontFamily.png
new file mode 100644
index 000000000000..a0c1faefd58e
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCharacterSpacingWhenFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCharacterSpacingWhenMaxLengthSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCharacterSpacingWhenMaxLengthSet.png
new file mode 100644
index 000000000000..f3f84be7119b
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyCharacterSpacingWhenMaxLengthSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png
new file mode 100644
index 000000000000..b10babef425d
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisibilityWhenIsReadOnlyTrue.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png
new file mode 100644
index 000000000000..cb34010da221
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisiblityWhenTextAlignedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisiblityWhenTextAlignedVertically.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisiblityWhenTextAlignedVertically.png
new file mode 100644
index 000000000000..380bd98fef43
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearButtonVisiblityWhenTextAlignedVertically.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearVisiblityButtonWhenTextColorChanged.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearVisiblityButtonWhenTextColorChanged.png
new file mode 100644
index 000000000000..153f72e88847
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyClearVisiblityButtonWhenTextColorChanged.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..0e97425b76dc
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenPlaceholderColorSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenPlaceholderColorSet.png
new file mode 100644
index 000000000000..ad20164bd0dc
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenPlaceholderColorSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenPlaceholderTextSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenPlaceholderTextSet.png
new file mode 100644
index 000000000000..698a6d3a9ad1
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntryControlWhenPlaceholderTextSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntry_WithShadow.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntry_WithShadow.png
new file mode 100644
index 000000000000..7d11ad844ca2
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyEntry_WithShadow.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..19e067ee0358
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyHorizontalTextAlignmentBasedOnCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png
new file mode 100644
index 000000000000..8257114a589b
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyHorizontalTextAlignmentWhenVerticalTextAlignmentSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWhenFlowDirectionSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWhenFlowDirectionSet.png
new file mode 100644
index 000000000000..5a959d3e70aa
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWhenFlowDirectionSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithCharacterSpacing.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithCharacterSpacing.png
new file mode 100644
index 000000000000..d240c3a97d09
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithCharacterSpacing.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontAttributes.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontAttributes.png
new file mode 100644
index 000000000000..373d97df88b6
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontAttributes.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontFamily.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontFamily.png
new file mode 100644
index 000000000000..cb24e3ac9425
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontFamily.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontSize.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontSize.png
new file mode 100644
index 000000000000..df630b553c96
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithFontSize.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithHorizontalAlignment.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithHorizontalAlignment.png
new file mode 100644
index 000000000000..3d4bb5d2a534
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithHorizontalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithPasswordTrue.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithPasswordTrue.png
new file mode 100644
index 000000000000..a1361994902d
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithPasswordTrue.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithShadow.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithShadow.png
new file mode 100644
index 000000000000..ec8efda441c6
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithShadow.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithVerticalAlignment.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithVerticalAlignment.png
new file mode 100644
index 000000000000..7c20e26b87b9
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyPlaceholderWithVerticalAlignment.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenAlingnedHorizontally.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenAlingnedHorizontally.png
new file mode 100644
index 000000000000..b3f63b69a9bc
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenAlingnedHorizontally.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenAlingnedVertically.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenAlingnedVertically.png
new file mode 100644
index 000000000000..8f80cd1f1bf3
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenAlingnedVertically.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenCharacterSpacingSetValues.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenCharacterSpacingSetValues.png
new file mode 100644
index 000000000000..e5ec2bbff5fd
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenCharacterSpacingSetValues.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenClearButtonVisibleSetNever.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenClearButtonVisibleSetNever.png
new file mode 100644
index 000000000000..4ec866d4cb2b
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenClearButtonVisibleSetNever.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontAttributesSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontAttributesSet.png
new file mode 100644
index 000000000000..59017c3e9f8b
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontAttributesSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontFamilySetValue.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontFamilySetValue.png
new file mode 100644
index 000000000000..3bce5718e4cd
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontFamilySetValue.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontSizeSetCorrectly.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontSizeSetCorrectly.png
new file mode 100644
index 000000000000..cedbf0c23bd3
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenFontSizeSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenKeyboardTypeSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenKeyboardTypeSet.png
new file mode 100644
index 000000000000..a9f8a4587761
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenKeyboardTypeSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenReturnTypeSet.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenReturnTypeSet.png
new file mode 100644
index 000000000000..3d481719779f
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenReturnTypeSet.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenTextColorSetCorrectly.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenTextColorSetCorrectly.png
new file mode 100644
index 000000000000..27936b5f8839
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyTextWhenTextColorSetCorrectly.png differ
diff --git a/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png
new file mode 100644
index 000000000000..7ffdf2def9f7
Binary files /dev/null and b/src/Controls/tests/TestCases.iOS.Tests/snapshots/ios/VerifyVerticalTextAlignmentBasedOnCharacterSpacing.png differ