瀏覽代碼

Slider (RangeBase) test for #824 with Binding which behind scenes is using weakobservable

donandren 8 年之前
父節點
當前提交
8f3ce463f0
共有 1 個文件被更改,包括 23 次插入4 次删除
  1. 23 4
      tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs

+ 23 - 4
tests/Avalonia.Controls.UnitTests/Primitives/RangeBaseTests.cs

@@ -7,6 +7,7 @@ using Avalonia.Controls.Primitives;
 using Avalonia.Controls.Templates;
 using Avalonia.Data;
 using Avalonia.Markup.Xaml.Data;
+using Avalonia.Styling;
 using Xunit;
 
 namespace Avalonia.Controls.UnitTests.Primitives
@@ -91,8 +92,10 @@ namespace Avalonia.Controls.UnitTests.Primitives
             Assert.Throws<ArgumentException>(() => target.Value = double.NegativeInfinity);
         }
 
-        [Fact]
-        public void SetValue_Should_Not_Cause_StackOverflow()
+        [Theory]
+        [InlineData(true)]
+        [InlineData(false)]
+        public void SetValue_Should_Not_Cause_StackOverflow(bool useXamlBinding)
         {
             var viewModel = new TestStackOverflowViewModel()
             {
@@ -105,16 +108,32 @@ namespace Avalonia.Controls.UnitTests.Primitives
             {
                 Template = new FuncControlTemplate<RangeBase>(c =>
                 {
-                    return track = new Track()
+                    track = new Track()
                     {
                         Width = 100,
                         Orientation = Orientation.Horizontal,
                         [~~Track.MinimumProperty] = c[~~RangeBase.MinimumProperty],
                         [~~Track.MaximumProperty] = c[~~RangeBase.MaximumProperty],
-                        [~~Track.ValueProperty] = c[~~RangeBase.ValueProperty],
+
                         Name = "PART_Track",
                         Thumb = new Thumb()
                     };
+
+                    if (useXamlBinding)
+                    {
+                        track.Bind(Track.ValueProperty, new Binding("Value")
+                                                    {
+                                                        Mode = BindingMode.TwoWay,
+                                                        Source = c,
+                                                        Priority = BindingPriority.Style
+                                                    });
+                    }
+                    else
+                    {
+                        track[~~Track.ValueProperty] = c[~~RangeBase.ValueProperty];
+                    }
+
+                    return track;
                 }),
                 Minimum = 0,
                 Maximum = 100,