Example #1
0
        public async Task TextChangeEventsFireCorrectly(string initialText, string newText, bool eventExpected)
        {
            var entry = new EntryStub
            {
                Text = initialText,
            };

            var eventFiredCount = 0;

            entry.TextChanged += (sender, e) =>
            {
                eventFiredCount++;

                Assert.Equal(initialText, e.OldValue);
                Assert.Equal(newText ?? string.Empty, e.NewValue);
            };

            await SetValueAsync(entry, newText, SetNativeText);

            if (eventExpected)
            {
                Assert.Equal(1, eventFiredCount);
            }
            else
            {
                Assert.Equal(0, eventFiredCount);
            }
        }
Example #2
0
        public async Task FontFamilyInitializesCorrectly(string family)
        {
            var entry = new EntryStub
            {
                Text = "Test",
                Font = Font.OfSize(family, 10)
            };

            var handler = await CreateHandlerAsync(entry);

            var nativeEntry = GetNativeEntry(handler);

            var fontManager = handler.Services.GetRequiredService <IFontManager>();

            var nativeFont = fontManager.GetTypeface(Font.OfSize(family, 0.0));

            Assert.Equal(nativeFont, nativeEntry.Typeface);

            if (string.IsNullOrEmpty(family))
            {
                Assert.Equal(fontManager.DefaultTypeface, nativeEntry.Typeface);
            }
            else
            {
                Assert.NotEqual(fontManager.DefaultTypeface, nativeEntry.Typeface);
            }
        }
        public async Task ContentInitializesCorrectly()
        {
            bool result = await InvokeOnMainThreadAsync(() =>
            {
                var entry = new EntryStub()
                {
                    Text = "In a ScrollView"
                };
                var entryHandler = Activator.CreateInstance <EntryHandler>();
                entryHandler.SetMauiContext(MauiContext);
                entryHandler.SetVirtualView(entry);
                entry.Handler = entryHandler;

                var scrollView = new ScrollViewStub()
                {
                    Content = entry
                };

                var scrollViewHandler = CreateHandler(scrollView);

                for (int n = 0; n < scrollViewHandler.PlatformView.ChildCount; n++)
                {
                    var platformView = scrollViewHandler.PlatformView.GetChildAt(n);
                    if (platformView is AppCompatEditText)
                    {
                        return(true);
                    }
                }

                return(false);                // No AppCompatEditText
            });

            Assert.True(result, $"Expected (but did not find) a {nameof(AppCompatEditText)} child of the {nameof(NestedScrollView)}.");
        }
Example #4
0
        public async Task ContentInitializesCorrectly()
        {
            bool result = await InvokeOnMainThreadAsync(() =>
            {
                var entry = new EntryStub()
                {
                    Text = "In a ScrollView"
                };
                var entryHandler = Activator.CreateInstance <EntryHandler>();
                entryHandler.SetMauiContext(MauiContext);
                entryHandler.SetVirtualView(entry);
                entry.Handler = entryHandler;

                var scrollView = new ScrollViewStub()
                {
                    Content = entry
                };

                var scrollViewHandler = CreateHandler(scrollView);

                foreach (var nativeView in scrollViewHandler.NativeView.Subviews)
                {
                    if (nativeView is MauiTextField)
                    {
                        return(true);
                    }
                }

                return(false);                // No MauiTextField
            });

            Assert.True(result, $"Expected (but did not find) a {nameof(MauiTextField)} in the Subviews array");
        }
Example #5
0
        public async Task IsTextPredictionEnabledCorrectly(bool isEnabled)
        {
            var entry = new EntryStub()
            {
                IsTextPredictionEnabled = isEnabled
            };

            await ValidatePropertyInitValue(entry, () => entry.IsTextPredictionEnabled, GetNativeIsTextPredictionEnabled, isEnabled);
        }
Example #6
0
        public async Task IsPasswordInitializesCorrectly(bool isPassword)
        {
            var entry = new EntryStub()
            {
                IsPassword = isPassword
            };

            await ValidatePropertyInitValue(entry, () => entry.IsPassword, GetNativeIsPassword, isPassword);
        }
Example #7
0
        public async Task TextInitializesCorrectly()
        {
            var entry = new EntryStub()
            {
                Text = "Test"
            };

            await ValidatePropertyInitValue(entry, () => entry.Text, GetNativeText, entry.Text);
        }
Example #8
0
        public async Task PlaceholderInitializesCorrectly()
        {
            var entry = new EntryStub()
            {
                Text = "Placeholder"
            };

            await ValidatePropertyInitValue(entry, () => entry.Placeholder, GetNativePlaceholder, entry.Placeholder);
        }
Example #9
0
        public async Task TextColorInitializesCorrectly()
        {
            var entry = new EntryStub()
            {
                Text      = "Test",
                TextColor = Color.Yellow
            };

            await ValidatePropertyInitValue(entry, () => entry.TextColor, GetNativeTextColor, entry.TextColor);
        }
Example #10
0
        public async Task PlaceholderColorInitializesCorrectly()
        {
            var entry = new EntryStub()
            {
                Placeholder      = "Test",
                PlaceholderColor = Colors.Yellow
            };

            await ValidatePropertyInitValue(entry, () => entry.PlaceholderColor, GetNativePlaceholderColor, entry.PlaceholderColor);
        }
Example #11
0
        public async Task IsPasswordUpdatesCorrectly(bool setValue, bool unsetValue)
        {
            var entry = new EntryStub();

            await ValidatePropertyUpdatesValue(
                entry,
                nameof(IEntry.IsPassword),
                GetNativeIsPassword,
                setValue,
                unsetValue);
        }
Example #12
0
        public async Task IsTextPredictionEnabledUpdatesCorrectly(bool setValue, bool unsetValue)
        {
            var entry = new EntryStub();

            await ValidatePropertyUpdatesValue(
                entry,
                nameof(IEntry.IsTextPredictionEnabled),
                GetNativeIsTextPredictionEnabled,
                setValue,
                unsetValue);
        }
Example #13
0
        public async Task TextColorUpdatesCorrectly(uint setValue, uint unsetValue)
        {
            var entry = new EntryStub();

            var setColor   = Color.FromUint(setValue);
            var unsetColor = Color.FromUint(unsetValue);

            await ValidatePropertyUpdatesValue(
                entry,
                nameof(IEntry.TextColor),
                GetNativeTextColor,
                setColor,
                unsetColor);
        }
Example #14
0
        public async Task TextUpdatesCorrectly(string setValue, string unsetValue)
        {
            var entry = new EntryStub();

            await ValidatePropertyUpdatesValue(
                entry,
                nameof(IEntry.Text),
                h =>
            {
                var n = GetNativeText(h);
                if (string.IsNullOrEmpty(n))
                {
                    n = null;                             // native platforms may not upport null text
                }
                return(n);
            },
                setValue,
                unsetValue);
        }
Example #15
0
        public async Task ContentInitializesCorrectly()
        {
            bool result = await InvokeOnMainThreadAsync(() =>
            {
                var entry = new EntryStub()
                {
                    Text = "In a ScrollView"
                };
                var entryHandler = Activator.CreateInstance <EntryHandler>();
                entryHandler.SetMauiContext(MauiContext);
                entryHandler.SetVirtualView(entry);
                entry.Handler = entryHandler;

                var scrollView = new ScrollViewStub()
                {
                    Content = entry
                };

                var scrollViewHandler = CreateHandler(scrollView);

                foreach (var platformView in scrollViewHandler.PlatformView.Subviews)
                {
                    // ScrollView on iOS uses an intermediate ContentView to handle conetent measurement/arrangement
                    if (platformView is ContentView contentView)
                    {
                        foreach (var content in contentView.Subviews)
                        {
                            if (content is MauiTextField)
                            {
                                return(true);
                            }
                        }
                    }
                }

                return(false);                // No MauiTextField
            });

            Assert.True(result, $"Expected (but did not find) a {nameof(MauiTextField)} in the Subviews array");
        }
Example #16
0
        public async Task ReturnTypeInitializesCorrectly()
        {
            var xplatReturnType = ReturnType.Next;
            var entry           = new EntryStub()
            {
                Text       = "Test",
                ReturnType = xplatReturnType
            };

            ImeAction expectedValue = ImeAction.Next;

            var values = await GetValueAsync(entry, (handler) =>
            {
                return(new
                {
                    ViewValue = entry.ReturnType,
                    PlatformViewValue = GetNativeReturnType(handler)
                });
            });

            Assert.Equal(xplatReturnType, values.ViewValue);
            Assert.Equal(expectedValue, values.PlatformViewValue);
        }
Example #17
0
        public async Task CharacterSpacingInitializesCorrectly()
        {
            string originalText          = "Some Test Text";
            var    xplatCharacterSpacing = 4;

            var entry = new EntryStub()
            {
                CharacterSpacing = xplatCharacterSpacing,
                Text             = originalText
            };

            var values = await GetValueAsync(entry, (handler) =>
            {
                return(new
                {
                    ViewValue = entry.CharacterSpacing,
                    NativeViewValue = GetNativeCharacterSpacing(handler)
                });
            });

            Assert.Equal(xplatCharacterSpacing, values.ViewValue);
            Assert.Equal(xplatCharacterSpacing, values.NativeViewValue);
        }
Example #18
0
        public async Task VerticalTextAlignmentInitializesCorrectily()
        {
            var xplatVerticalTextAlignment = TextAlignment.End;

            var entry = new EntryStub
            {
                Text = "Test",
                VerticalTextAlignment = xplatVerticalTextAlignment
            };

            Android.Views.GravityFlags expectedValue = Android.Views.GravityFlags.Bottom;

            var values = await GetValueAsync(entry, (handler) =>
            {
                return(new
                {
                    ViewValue = entry.VerticalTextAlignment,
                    PlatformViewValue = GetNativeVerticalTextAlignment(handler)
                });
            });

            Assert.Equal(xplatVerticalTextAlignment, values.ViewValue);
            values.PlatformViewValue.AssertHasFlag(expectedValue);
        }
Example #19
0
        public async Task HorizontalTextAlignmentInitializesCorrectly()
        {
            var xplatHorizontalTextAlignment = TextAlignment.End;

            var entry = new EntryStub()
            {
                Text = "Test",
                HorizontalTextAlignment = xplatHorizontalTextAlignment
            };

            Android.Views.TextAlignment expectedValue = Android.Views.TextAlignment.ViewEnd;

            var values = await GetValueAsync(entry, (handler) =>
            {
                return(new
                {
                    ViewValue = entry.HorizontalTextAlignment,
                    PlatformViewValue = GetNativeHorizontalTextAlignment(handler)
                });
            });

            Assert.Equal(xplatHorizontalTextAlignment, values.ViewValue);
            values.PlatformViewValue.AssertHasFlag(expectedValue);
        }
Example #20
0
        public async Task CharacterSpacingInitializesCorrectly()
        {
            var xplatCharacterSpacing = 4;

            var entry = new EntryStub()
            {
                CharacterSpacing = xplatCharacterSpacing,
                Text             = "Some Test Text"
            };

            float expectedValue = entry.CharacterSpacing.ToEm();

            var values = await GetValueAsync(entry, (handler) =>
            {
                return(new
                {
                    ViewValue = entry.CharacterSpacing,
                    PlatformViewValue = GetNativeCharacterSpacing(handler)
                });
            });

            Assert.Equal(xplatCharacterSpacing, values.ViewValue);
            Assert.Equal(expectedValue, values.PlatformViewValue, EmCoefficientPrecision);
        }
        public async Task VerticalTextAlignmentInitializesCorrectily()
        {
            var xplatVerticalTextAlignment = TextAlignment.End;

            var entry = new EntryStub
            {
                Text = "Test",
                VerticalTextAlignment = xplatVerticalTextAlignment
            };

            UIControlContentVerticalAlignment expectedValue = UIControlContentVerticalAlignment.Bottom;

            var values = await GetValueAsync(entry, (handler) =>
            {
                return(new
                {
                    ViewValue = entry.VerticalTextAlignment,
                    NativeViewValue = GetNativeVerticalTextAlignment(handler)
                });
            });

            Assert.Equal(xplatVerticalTextAlignment, values.ViewValue);
            values.NativeViewValue.AssertHasFlag(expectedValue);
        }
Example #22
0
        public async Task FontFamilyInitializesCorrectly(string family)
        {
            var entry = new EntryStub
            {
                Text = "Test",
                Font = Font.OfSize(family, 10)
            };

            var(services, nativeFont) = await GetValueAsync(entry, handler => (handler.Services, GetNativeEntry(handler).Font));

            var fontManager = services.GetRequiredService <IFontManager>();

            var expectedNativeFont = fontManager.GetFont(Font.OfSize(family, 0.0));

            Assert.Equal(expectedNativeFont.FamilyName, nativeFont.FamilyName);
            if (string.IsNullOrEmpty(family))
            {
                Assert.Equal(fontManager.DefaultFont.FamilyName, nativeFont.FamilyName);
            }
            else
            {
                Assert.NotEqual(fontManager.DefaultFont.FamilyName, nativeFont.FamilyName);
            }
        }