maui-linux/Xamarin.Forms.Core.UnitTests/ButtonUnitTest.cs

231 строка
6.4 KiB
C#
Исходник Обычный вид История

2016-03-22 23:02:25 +03:00
using System;
using System.Diagnostics;
2016-03-22 23:02:25 +03:00
using NUnit.Framework;
namespace Xamarin.Forms.Core.UnitTests
{
[TestFixture]
public class ButtonUnitTest
: CommandSourceTests<Button>
{
[SetUp]
public override void Setup ()
{
base.Setup ();
Device.PlatformServices = new MockPlatformServices ();
}
[TearDown]
public override void TearDown ()
{
base.TearDown ();
Device.PlatformServices = null;
}
[Test]
public void MeasureInvalidatedOnTextChange ()
{
var button = new Button ();
bool fired = false;
button.MeasureInvalidated += (sender, args) => fired = true;
button.Text = "foo";
Assert.True (fired);
}
[Test]
Add pressed and released events to Button (#446) * Add pressed and released events to Button * Update ButtonRenderer.cs * Apply safely casting to android button renderer * Use safety casting for Android buttin renderer * [Windows] Fix modal pages being laid out below soft buttons (#395) * Add sample HanselForms and TwitterDemo to ControlGallery (#651) * [Controls] Add Hanselforms sample * Remove extra twitter sample * [Controls]Add TwitterDemo sample * [Controls] Fix build * Slider should show user-set value on initial load (#378) * [UWP] Use toolbar foreground color on primary items (#640) * Avoid duplicating code in OmPlatform (#591) * [iOS] Entry should not pass a newline to the next responder (#397) * UITextField should not return so that the next field does not get passed a newline * Added code sample * [XamlC] import members on x:Static and factories (#642) * [Xaml] support short Properties for PropertyCondition (#645) * Xamlc compile data triggers (#648) * [Xaml] DataTrigger and PropertyCondition no longer use a ServiceProvider * [XamlC] avoid generating ServiceProvider for unused ProvideValue * fix tests * Fix comment typo * [UWP] Fix TextBox style for foreground focus color (#618) * Adding image to use for CellsGalleryImageUrlCellList UI test * Update ImageCellListPage to use an image we control; Update CellsGalleryImageUrlCellList test to wait longer than 1s for images to load if necessary * fix nre when changing content in datepickerselected (#494) * Make CellsGalleryImageUrlCellList test finish early if possible * [iOS] Change keyboard type while keyboard is visible (#443) * Change keyboard while changing text * add sample code * [Android] Fix NavigationPage dispose crash when it parents a MasterDetailPage (#577) * fix navigation page dispose crash * changes after review * [XamlC] detect duplicate x:Name at compile time (#655) * [XamlC] detect duplicate x:Name at compile time * invoking methods with the right arguments produces better results * Make UWP toolbar display rules consistent with other platforms (#638) * Allow subscriber to be collected if MessagingCenter is the only reference to it (#617) * Repro * Make messaging center callbacks weak references * Preserve attribute * Fix test method name * Watch for collection of actual delegate target instead of wrapper delegate * Preserve the original platform instance when changing main page * Better tests for lambda situations * Update tests, make callback target a weakreference if it's the subscriber * Ensure old Platform MessagingCenter subs are gone before creating new Platform * [iOS] Prevent multiple ListView cells from being swiped simultaneously (#578) * disable multiple cell swipe * add sample code * refactored * convert to weakreference * remove null setting * change weakreference setting place * remove if * revert isopen changes * add instructions * [WinRT/UWP] Apply BackgroundColor to Stepper buttons (#581) * [WinRT/UWP] Apply BackgroundColor to Stepper buttons * Add explanatory text; use nameof * Move explanatory text to a label * Return group instead of internal class (#461) * [iOS/Android] Move Map camera to correct region on layout change (#548) * Move to region on layout change * remove visibility check * [iOS] Platform specifics for controlling Picker SelectedIndex change behavior (#540) * picker selected index could change when picker view is dismissed * use enum * [iOS] Ignore intermittent failing test on XTC (#666) * [UITest] Update to UITest 2.0.5 (#665) * Rebase the current branch onto upstream latest
2017-02-02 21:23:31 +03:00
public void TestClickedvent ()
2016-03-22 23:02:25 +03:00
{
var view = new Button ();
bool activated = false;
view.Clicked += (sender, e) => activated = true;
((IButtonController) view).SendClicked ();
Assert.True (activated);
}
Add pressed and released events to Button (#446) * Add pressed and released events to Button * Update ButtonRenderer.cs * Apply safely casting to android button renderer * Use safety casting for Android buttin renderer * [Windows] Fix modal pages being laid out below soft buttons (#395) * Add sample HanselForms and TwitterDemo to ControlGallery (#651) * [Controls] Add Hanselforms sample * Remove extra twitter sample * [Controls]Add TwitterDemo sample * [Controls] Fix build * Slider should show user-set value on initial load (#378) * [UWP] Use toolbar foreground color on primary items (#640) * Avoid duplicating code in OmPlatform (#591) * [iOS] Entry should not pass a newline to the next responder (#397) * UITextField should not return so that the next field does not get passed a newline * Added code sample * [XamlC] import members on x:Static and factories (#642) * [Xaml] support short Properties for PropertyCondition (#645) * Xamlc compile data triggers (#648) * [Xaml] DataTrigger and PropertyCondition no longer use a ServiceProvider * [XamlC] avoid generating ServiceProvider for unused ProvideValue * fix tests * Fix comment typo * [UWP] Fix TextBox style for foreground focus color (#618) * Adding image to use for CellsGalleryImageUrlCellList UI test * Update ImageCellListPage to use an image we control; Update CellsGalleryImageUrlCellList test to wait longer than 1s for images to load if necessary * fix nre when changing content in datepickerselected (#494) * Make CellsGalleryImageUrlCellList test finish early if possible * [iOS] Change keyboard type while keyboard is visible (#443) * Change keyboard while changing text * add sample code * [Android] Fix NavigationPage dispose crash when it parents a MasterDetailPage (#577) * fix navigation page dispose crash * changes after review * [XamlC] detect duplicate x:Name at compile time (#655) * [XamlC] detect duplicate x:Name at compile time * invoking methods with the right arguments produces better results * Make UWP toolbar display rules consistent with other platforms (#638) * Allow subscriber to be collected if MessagingCenter is the only reference to it (#617) * Repro * Make messaging center callbacks weak references * Preserve attribute * Fix test method name * Watch for collection of actual delegate target instead of wrapper delegate * Preserve the original platform instance when changing main page * Better tests for lambda situations * Update tests, make callback target a weakreference if it's the subscriber * Ensure old Platform MessagingCenter subs are gone before creating new Platform * [iOS] Prevent multiple ListView cells from being swiped simultaneously (#578) * disable multiple cell swipe * add sample code * refactored * convert to weakreference * remove null setting * change weakreference setting place * remove if * revert isopen changes * add instructions * [WinRT/UWP] Apply BackgroundColor to Stepper buttons (#581) * [WinRT/UWP] Apply BackgroundColor to Stepper buttons * Add explanatory text; use nameof * Move explanatory text to a label * Return group instead of internal class (#461) * [iOS/Android] Move Map camera to correct region on layout change (#548) * Move to region on layout change * remove visibility check * [iOS] Platform specifics for controlling Picker SelectedIndex change behavior (#540) * picker selected index could change when picker view is dismissed * use enum * [iOS] Ignore intermittent failing test on XTC (#666) * [UITest] Update to UITest 2.0.5 (#665) * Rebase the current branch onto upstream latest
2017-02-02 21:23:31 +03:00
[Test]
public void TestPressedEvent ()
{
var view = new Button();
bool pressed = false;
view.Pressed += (sender, e) => pressed = true;
((IButtonController)view).SendPressed();
Assert.True(pressed);
}
[Test]
public void TestReleasedEvent ()
{
var view = new Button();
bool released = false;
view.Released += (sender, e) => released = true;
((IButtonController)view).SendReleased();
Assert.True(released);
}
2016-03-22 23:02:25 +03:00
protected override Button CreateSource()
{
return new Button();
}
protected override void Activate (Button source)
{
((IButtonController) source).SendClicked();
}
protected override BindableProperty IsEnabledProperty
{
get { return Button.IsEnabledProperty; }
}
protected override BindableProperty CommandProperty
{
get { return Button.CommandProperty; }
}
protected override BindableProperty CommandParameterProperty
{
get { return Button.CommandParameterProperty; }
}
[Test]
public void TestBindingContextPropagation ()
{
var context = new object ();
var button = new Button ();
button.BindingContext = context;
var source = new FileImageSource ();
button.Image = source;
Assert.AreSame (context, source.BindingContext);
button = new Button ();
source = new FileImageSource ();
button.Image = source;
button.BindingContext = context;
Assert.AreSame (context, source.BindingContext);
}
[Test]
public void TestImageSourcePropertiesChangedTriggerResize ()
{
var source = new FileImageSource ();
var button = new Button { Image = source };
bool fired = false;
button.MeasureInvalidated += (sender, e) => fired = true;
Assert.Null (source.File);
source.File = "foo.png";
Assert.NotNull (source.File);
Assert.True (fired);
}
[Test]
public void AssignToFontStructUpdatesFontFamily (
[Values (NamedSize.Default, NamedSize.Large, NamedSize.Medium, NamedSize.Small, NamedSize.Micro)] NamedSize size,
[Values (FontAttributes.None, FontAttributes.Bold, FontAttributes.Italic, FontAttributes.Bold | FontAttributes.Italic)] FontAttributes attributes)
{
var button = new Button {Platform = new UnitPlatform ()};
double startSize = button.FontSize;
var startAttributes = button.FontAttributes;
bool firedSizeChanged = false;
bool firedAttributesChanged = false;
button.PropertyChanged += (sender, args) => {
if (args.PropertyName == Label.FontSizeProperty.PropertyName)
firedSizeChanged = true;
if (args.PropertyName == Label.FontAttributesProperty.PropertyName)
firedAttributesChanged = true;
};
button.Font = Font.OfSize ("Testing123", size).WithAttributes (attributes);
Assert.AreEqual (Device.GetNamedSize (size, typeof (Label), true), button.FontSize);
Assert.AreEqual (attributes, button.FontAttributes);
Assert.AreEqual (startSize != button.FontSize, firedSizeChanged);
Assert.AreEqual (startAttributes != button.FontAttributes, firedAttributesChanged);
}
[Test]
public void AssignToFontFamilyUpdatesFont ()
{
var button = new Button {Platform = new UnitPlatform ()};
button.FontFamily = "CrazyFont";
Assert.AreEqual (button.Font, Font.OfSize ("CrazyFont", button.FontSize));
}
[Test]
public void AssignToFontSizeUpdatesFont ()
{
var button = new Button {Platform = new UnitPlatform ()};
button.FontSize = 1000;
Assert.AreEqual (button.Font, Font.SystemFontOfSize (1000));
}
[Test]
public void AssignToFontAttributesUpdatesFont ()
{
var button = new Button {Platform = new UnitPlatform ()};
button.FontAttributes = FontAttributes.Italic | FontAttributes.Bold;
Assert.AreEqual (button.Font, Font.SystemFontOfSize (button.FontSize, FontAttributes.Bold | FontAttributes.Italic));
}
[Test]
public void CommandCanExecuteUpdatesEnabled ()
{
var button = new Button ();
bool result = false;
var bindingContext = new {
Command = new Command (() => { }, () => result)
};
button.SetBinding (Button.CommandProperty, "Command");
button.BindingContext = bindingContext;
Assert.False (button.IsEnabled);
result = true;
bindingContext.Command.ChangeCanExecute ();
Assert.True (button.IsEnabled);
}
[Test]
public void ButtonContentLayoutTypeConverterTest()
{
var converter = new Button.ButtonContentTypeConverter();
Assert.True(converter.CanConvertFrom(typeof(string)));
AssertButtonContentLayoutsEqual(new Button.ButtonContentLayout(Button.ButtonContentLayout.ImagePosition.Left, 10), converter.ConvertFromInvariantString("left,10"));
AssertButtonContentLayoutsEqual(new Button.ButtonContentLayout(Button.ButtonContentLayout.ImagePosition.Right, 10), converter.ConvertFromInvariantString("right"));
AssertButtonContentLayoutsEqual(new Button.ButtonContentLayout(Button.ButtonContentLayout.ImagePosition.Top, 20), converter.ConvertFromInvariantString("top,20"));
AssertButtonContentLayoutsEqual(new Button.ButtonContentLayout(Button.ButtonContentLayout.ImagePosition.Left, 15), converter.ConvertFromInvariantString("15"));
AssertButtonContentLayoutsEqual(new Button.ButtonContentLayout(Button.ButtonContentLayout.ImagePosition.Bottom, 0), converter.ConvertFromInvariantString("Bottom, 0"));
Assert.Throws<InvalidOperationException>(() => converter.ConvertFromInvariantString(""));
}
private void AssertButtonContentLayoutsEqual(Button.ButtonContentLayout layout1, object layout2)
{
var bcl = (Button.ButtonContentLayout)layout2;
Assert.AreEqual(layout1.Position, bcl.Position);
Assert.AreEqual(layout1.Spacing, bcl.Spacing);
}
2016-03-22 23:02:25 +03:00
}
2016-09-26 23:29:47 +03:00
}