Browse Source

Use async in selector tests.

pull/58/head
Steven Kirk 11 years ago
parent
commit
e7651dfcf2
  1. 43
      Tests/Perspex.Styling.UnitTests/SelectorTests_Class.cs
  2. 26
      Tests/Perspex.Styling.UnitTests/SelectorTests_Descendent.cs
  3. 29
      Tests/Perspex.Styling.UnitTests/SelectorTests_Id.cs
  4. 29
      Tests/Perspex.Styling.UnitTests/SelectorTests_OfType.cs
  5. 34
      Tests/Perspex.Styling.UnitTests/SelectorTests_Template.cs

43
Tests/Perspex.Styling.UnitTests/SelectorTests_Class.cs

@ -8,6 +8,7 @@ namespace Perspex.Styling.UnitTests
{ {
using System.Linq; using System.Linq;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks;
using Moq; using Moq;
using Perspex.Styling; using Perspex.Styling;
using Xunit; using Xunit;
@ -24,7 +25,7 @@ namespace Perspex.Styling.UnitTests
} }
[Fact] [Fact]
public void Class_Matches_Control_With_Class() public async Task Class_Matches_Control_With_Class()
{ {
var control = new Control1 var control = new Control1
{ {
@ -32,12 +33,13 @@ namespace Perspex.Styling.UnitTests
}; };
var target = new Selector().Class("foo"); var target = new Selector().Class("foo");
var activator = target.GetActivator(control);
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Class_Doesnt_Match_Control_Without_Class() public async Task Class_Doesnt_Match_Control_Without_Class()
{ {
var control = new Control1 var control = new Control1
{ {
@ -45,12 +47,13 @@ namespace Perspex.Styling.UnitTests
}; };
var target = new Selector().Class("foo"); var target = new Selector().Class("foo");
var activator = target.GetActivator(control);
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
} }
[Fact] [Fact]
public void Class_Matches_Control_With_TemplatedParent() public async Task Class_Matches_Control_With_TemplatedParent()
{ {
var control = new Control1 var control = new Control1
{ {
@ -59,25 +62,26 @@ namespace Perspex.Styling.UnitTests
}; };
var target = new Selector().Class("foo"); var target = new Selector().Class("foo");
var activator = target.GetActivator(control);
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Class_Tracks_Additions() public async Task Class_Tracks_Additions()
{ {
var control = new Control1(); var control = new Control1();
var target = new Selector().Class("foo"); var target = new Selector().Class("foo");
var activator = target.GetActivator(control); var activator = target.GetActivator(control);
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
control.Classes.Add("foo"); control.Classes.Add("foo");
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Class_Tracks_Removals() public async Task Class_Tracks_Removals()
{ {
var control = new Control1 var control = new Control1
{ {
@ -87,30 +91,25 @@ namespace Perspex.Styling.UnitTests
var target = new Selector().Class("foo"); var target = new Selector().Class("foo");
var activator = target.GetActivator(control); var activator = target.GetActivator(control);
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
control.Classes.Remove("foo"); control.Classes.Remove("foo");
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
} }
[Fact] [Fact]
public void Multiple_Classes() public async Task Multiple_Classes()
{ {
var control = new Control1(); var control = new Control1();
var target = new Selector().Class("foo").Class("bar"); var target = new Selector().Class("foo").Class("bar");
var activator = target.GetActivator(control); var activator = target.GetActivator(control);
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
control.Classes.Add("foo"); control.Classes.Add("foo");
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
control.Classes.Add("bar"); control.Classes.Add("bar");
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
control.Classes.Remove("bar"); control.Classes.Remove("bar");
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
}
private static bool ActivatorValue(Selector selector, IStyleable control)
{
return selector.GetActivator(control).Take(1).ToEnumerable().Single();
} }
public class Control1 : TestControlBase public class Control1 : TestControlBase

26
Tests/Perspex.Styling.UnitTests/SelectorTests_Descendent.cs

@ -9,6 +9,7 @@ namespace Perspex.Styling.UnitTests
using System; using System;
using System.Linq; using System.Linq;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks;
using Moq; using Moq;
using Perspex.Collections; using Perspex.Collections;
using Perspex.Styling; using Perspex.Styling;
@ -17,7 +18,7 @@ namespace Perspex.Styling.UnitTests
public class SelectorTests_Descendent public class SelectorTests_Descendent
{ {
[Fact] [Fact]
public void Descendent_Matches_Control_When_It_Is_Child_OfType() public async Task Descendent_Matches_Control_When_It_Is_Child_OfType()
{ {
var parent = new Mock<TestLogical1>(); var parent = new Mock<TestLogical1>();
var child = new Mock<TestLogical2>(); var child = new Mock<TestLogical2>();
@ -26,12 +27,13 @@ namespace Perspex.Styling.UnitTests
child.Setup(x => x.LogicalParent).Returns(parent.Object); child.Setup(x => x.LogicalParent).Returns(parent.Object);
var selector = new Selector().OfType(parent.Object.GetType()).Descendent().OfType(child.Object.GetType()); var selector = new Selector().OfType(parent.Object.GetType()).Descendent().OfType(child.Object.GetType());
var activator = selector.GetActivator(childStyleable.Object);
Assert.True(ActivatorValue(selector, childStyleable.Object)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Descendent_Matches_Control_When_It_Is_Descendent_OfType() public async Task Descendent_Matches_Control_When_It_Is_Descendent_OfType()
{ {
var grandparent = new Mock<TestLogical1>(); var grandparent = new Mock<TestLogical1>();
var parent = new Mock<TestLogical2>(); var parent = new Mock<TestLogical2>();
@ -41,12 +43,13 @@ namespace Perspex.Styling.UnitTests
child.Setup(x => x.LogicalParent).Returns(parent.Object); child.Setup(x => x.LogicalParent).Returns(parent.Object);
var selector = new Selector().OfType(grandparent.Object.GetType()).Descendent().OfType(child.Object.GetType()); var selector = new Selector().OfType(grandparent.Object.GetType()).Descendent().OfType(child.Object.GetType());
var activator = selector.GetActivator(child.Object);
Assert.True(ActivatorValue(selector, child.Object)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Descendent_Matches_Control_When_It_Is_Descendent_OfType_And_Class() public async Task Descendent_Matches_Control_When_It_Is_Descendent_OfType_And_Class()
{ {
var grandparent = new Mock<TestLogical1>(); var grandparent = new Mock<TestLogical1>();
var parent = new Mock<TestLogical2>(); var parent = new Mock<TestLogical2>();
@ -58,12 +61,13 @@ namespace Perspex.Styling.UnitTests
child.Setup(x => x.LogicalParent).Returns(parent.Object); child.Setup(x => x.LogicalParent).Returns(parent.Object);
var selector = new Selector().OfType(grandparent.Object.GetType()).Class("foo").Descendent().OfType(child.Object.GetType()); var selector = new Selector().OfType(grandparent.Object.GetType()).Class("foo").Descendent().OfType(child.Object.GetType());
var activator = selector.GetActivator(child.Object);
Assert.True(ActivatorValue(selector, child.Object)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Descendent_Doesnt_Match_Control_When_It_Is_Descendent_OfType_But_Wrong_Class() public async Task Descendent_Doesnt_Match_Control_When_It_Is_Descendent_OfType_But_Wrong_Class()
{ {
var grandparent = new Mock<TestLogical1>(); var grandparent = new Mock<TestLogical1>();
var parent = new Mock<TestLogical2>(); var parent = new Mock<TestLogical2>();
@ -75,13 +79,9 @@ namespace Perspex.Styling.UnitTests
child.Setup(x => x.LogicalParent).Returns(parent.Object); child.Setup(x => x.LogicalParent).Returns(parent.Object);
var selector = new Selector().OfType<TestLogical1>().Class("foo").Descendent().OfType<TestLogical3>(); var selector = new Selector().OfType<TestLogical1>().Class("foo").Descendent().OfType<TestLogical3>();
var activator = selector.GetActivator(child.Object);
Assert.False(ActivatorValue(selector, child.Object)); Assert.False(await activator.Take(1));
}
private static bool ActivatorValue(Selector selector, IStyleable control)
{
return selector.GetActivator(control).Take(1).ToEnumerable().Single();
} }
public abstract class TestLogical : ILogical, IStyleable public abstract class TestLogical : ILogical, IStyleable

29
Tests/Perspex.Styling.UnitTests/SelectorTests_Id.cs

@ -8,6 +8,7 @@ namespace Perspex.Styling.UnitTests
{ {
using System.Linq; using System.Linq;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks;
using Moq; using Moq;
using Perspex.Styling; using Perspex.Styling;
using Xunit; using Xunit;
@ -24,59 +25,57 @@ namespace Perspex.Styling.UnitTests
} }
[Fact] [Fact]
public void Id_Matches_Control_With_Correct_Name() public async Task Id_Matches_Control_With_Correct_Name()
{ {
var control = new Control1 { Name = "foo" }; var control = new Control1 { Name = "foo" };
var target = new Selector().Name("foo"); var target = new Selector().Name("foo");
var activator = target.GetActivator(control);
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Id_Doesnt_Match_Control_Of_Wrong_Name() public async Task Id_Doesnt_Match_Control_Of_Wrong_Name()
{ {
var control = new Control1 { Name = "foo" }; var control = new Control1 { Name = "foo" };
var target = new Selector().Name("bar"); var target = new Selector().Name("bar");
var activator = target.GetActivator(control);
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
} }
[Fact] [Fact]
public void Id_Doesnt_Match_Control_With_TemplatedParent() public async Task Id_Doesnt_Match_Control_With_TemplatedParent()
{ {
var control = new Control1 { TemplatedParent = new Mock<ITemplatedControl>().Object }; var control = new Control1 { TemplatedParent = new Mock<ITemplatedControl>().Object };
var target = new Selector().Name("foo"); var target = new Selector().Name("foo");
var activator = target.GetActivator(control);
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
} }
[Fact] [Fact]
public void When_Id_Matches_Control_Other_Selectors_Are_Subscribed() public async Task When_Id_Matches_Control_Other_Selectors_Are_Subscribed()
{ {
var control = new Control1 { Name = "foo" }; var control = new Control1 { Name = "foo" };
var target = new Selector().Name("foo").SubscribeCheck(); var target = new Selector().Name("foo").SubscribeCheck();
var result = target.GetActivator(control).ToEnumerable().Take(1).ToArray(); var result = await target.GetActivator(control).Take(1);
Assert.Equal(1, control.SubscribeCheckObservable.SubscribedCount); Assert.Equal(1, control.SubscribeCheckObservable.SubscribedCount);
} }
[Fact] [Fact]
public void When_Id_Doesnt_Match_Control_Other_Selectors_Are_Not_Subscribed() public async Task When_Id_Doesnt_Match_Control_Other_Selectors_Are_Not_Subscribed()
{ {
var control = new Control1 { Name = "foo" }; var control = new Control1 { Name = "foo" };
var target = new Selector().Name("bar").SubscribeCheck(); var target = new Selector().Name("bar").SubscribeCheck();
var result = target.GetActivator(control).ToEnumerable().Take(1).ToArray(); var result = await target.GetActivator(control).Take(1);
Assert.Equal(0, control.SubscribeCheckObservable.SubscribedCount); Assert.Equal(0, control.SubscribeCheckObservable.SubscribedCount);
} }
private static bool ActivatorValue(Selector selector, IStyleable control)
{
return selector.GetActivator(control).Take(1).ToEnumerable().Single();
}
public class Control1 : TestControlBase public class Control1 : TestControlBase
{ {
} }

29
Tests/Perspex.Styling.UnitTests/SelectorTests_OfType.cs

@ -8,6 +8,7 @@ namespace Perspex.Styling.UnitTests
{ {
using System.Linq; using System.Linq;
using System.Reactive.Linq; using System.Reactive.Linq;
using System.Threading.Tasks;
using Moq; using Moq;
using Perspex.Styling; using Perspex.Styling;
using Xunit; using Xunit;
@ -24,59 +25,57 @@ namespace Perspex.Styling.UnitTests
} }
[Fact] [Fact]
public void OfType_Matches_Control_Of_Correct_Type() public async Task OfType_Matches_Control_Of_Correct_Type()
{ {
var control = new Control1(); var control = new Control1();
var target = new Selector().OfType<Control1>(); var target = new Selector().OfType<Control1>();
var activator = target.GetActivator(control);
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void OfType_Doesnt_Match_Control_Of_Wrong_Type() public async Task OfType_Doesnt_Match_Control_Of_Wrong_Type()
{ {
var control = new Control2(); var control = new Control2();
var target = new Selector().OfType<Control1>(); var target = new Selector().OfType<Control1>();
var activator = target.GetActivator(control);
Assert.False(ActivatorValue(target, control)); Assert.False(await activator.Take(1));
} }
[Fact] [Fact]
public void OfType_Matches_Control_With_TemplatedParent() public async Task OfType_Matches_Control_With_TemplatedParent()
{ {
var control = new Control1 { TemplatedParent = new Mock<ITemplatedControl>().Object }; var control = new Control1 { TemplatedParent = new Mock<ITemplatedControl>().Object };
var target = new Selector().OfType<Control1>(); var target = new Selector().OfType<Control1>();
var activator = target.GetActivator(control);
Assert.True(ActivatorValue(target, control)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void When_OfType_Matches_Control_Other_Selectors_Are_Subscribed() public async Task When_OfType_Matches_Control_Other_Selectors_Are_Subscribed()
{ {
var control = new Control1(); var control = new Control1();
var target = new Selector().OfType<Control1>().SubscribeCheck(); var target = new Selector().OfType<Control1>().SubscribeCheck();
var result = target.GetActivator(control).ToEnumerable().Take(1).ToArray(); var result = await target.GetActivator(control).Take(1);
Assert.Equal(1, control.SubscribeCheckObservable.SubscribedCount); Assert.Equal(1, control.SubscribeCheckObservable.SubscribedCount);
} }
[Fact] [Fact]
public void When_OfType_Doesnt_Match_Control_Other_Selectors_Are_Not_Subscribed() public async Task When_OfType_Doesnt_Match_Control_Other_Selectors_Are_Not_Subscribed()
{ {
var control = new Control1(); var control = new Control1();
var target = new Selector().OfType<Control2>().SubscribeCheck(); var target = new Selector().OfType<Control2>().SubscribeCheck();
var result = target.GetActivator(control).ToEnumerable().Take(1).ToArray(); var result = await target.GetActivator(control).Take(1);
Assert.Equal(0, control.SubscribeCheckObservable.SubscribedCount); Assert.Equal(0, control.SubscribeCheckObservable.SubscribedCount);
} }
private static bool ActivatorValue(Selector selector, IStyleable control)
{
return selector.GetActivator(control).Take(1).ToEnumerable().Single();
}
public class Control1 : TestControlBase public class Control1 : TestControlBase
{ {
} }

34
Tests/Perspex.Styling.UnitTests/SelectorTests_Template.cs

@ -13,11 +13,12 @@ namespace Perspex.Styling.UnitTests
using Perspex.Styling; using Perspex.Styling;
using Perspex.VisualTree; using Perspex.VisualTree;
using Xunit; using Xunit;
using System.Threading.Tasks;
public class SelectorTests_Template public class SelectorTests_Template
{ {
[Fact] [Fact]
public void Control_In_Template_Is_Matched_With_Template_Selector() public async Task Control_In_Template_Is_Matched_With_Template_Selector()
{ {
var target = new Mock<IVisual>(); var target = new Mock<IVisual>();
var templatedControl = target.As<ITemplatedControl>(); var templatedControl = target.As<ITemplatedControl>();
@ -26,26 +27,27 @@ namespace Perspex.Styling.UnitTests
var border = (Border)target.Object.GetVisualChildren().Single(); var border = (Border)target.Object.GetVisualChildren().Single();
var selector = new Selector().Template().OfType<Border>(); var selector = new Selector().Template().OfType<Border>();
var activator = selector.GetActivator(border);
Assert.True(ActivatorValue(selector, border)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Nested_Control_In_Template_Is_Matched_With_Template_Selector() public async Task Nested_Control_In_Template_Is_Matched_With_Template_Selector()
{ {
var target = new Mock<IVisual>(); var target = new Mock<IVisual>();
var templatedControl = target.As<ITemplatedControl>(); var templatedControl = target.As<ITemplatedControl>();
this.BuildVisualTree(target); this.BuildVisualTree(target);
var textBlock = (TextBlock)target.Object.VisualChildren.Single().VisualChildren.Single(); var textBlock = (TextBlock)target.Object.VisualChildren.Single().VisualChildren.Single();
var selector = new Selector().Template().OfType<TextBlock>(); var selector = new Selector().Template().OfType<TextBlock>();
var activator = selector.GetActivator(textBlock);
Assert.True(ActivatorValue(selector, textBlock)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Control_In_Template_Is_Matched_With_TypeOf_TemplatedControl() public async Task Control_In_Template_Is_Matched_With_TypeOf_TemplatedControl()
{ {
var target = new Mock<IVisual>(); var target = new Mock<IVisual>();
var templatedControl = target.As<ITemplatedControl>(); var templatedControl = target.As<ITemplatedControl>();
@ -54,12 +56,13 @@ namespace Perspex.Styling.UnitTests
var border = (Border)target.Object.VisualChildren.Single(); var border = (Border)target.Object.VisualChildren.Single();
var selector = new Selector().OfType(templatedControl.Object.GetType()).Template().OfType<Border>(); var selector = new Selector().OfType(templatedControl.Object.GetType()).Template().OfType<Border>();
var activator = selector.GetActivator(border);
Assert.True(ActivatorValue(selector, border)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Control_In_Template_Is_Matched_With_Correct_TypeOf_And_Class_Of_TemplatedControl() public async Task Control_In_Template_Is_Matched_With_Correct_TypeOf_And_Class_Of_TemplatedControl()
{ {
var target = new Mock<IVisual>(); var target = new Mock<IVisual>();
var templatedControl = target.As<ITemplatedControl>(); var templatedControl = target.As<ITemplatedControl>();
@ -71,14 +74,14 @@ namespace Perspex.Styling.UnitTests
styleable.Setup(x => x.StyleKey).Returns(styleKey); styleable.Setup(x => x.StyleKey).Returns(styleKey);
styleable.Setup(x => x.Classes).Returns(new Classes("foo")); styleable.Setup(x => x.Classes).Returns(new Classes("foo"));
var border = (Border)target.Object.VisualChildren.Single(); var border = (Border)target.Object.VisualChildren.Single();
var selector = new Selector().OfType(styleKey).Class("foo").Template().OfType<Border>(); var selector = new Selector().OfType(styleKey).Class("foo").Template().OfType<Border>();
var activator = selector.GetActivator(border);
Assert.True(ActivatorValue(selector, border)); Assert.True(await activator.Take(1));
} }
[Fact] [Fact]
public void Control_In_Template_Is_Not_Matched_With_Correct_TypeOf_And_Wrong_Class_Of_TemplatedControl() public async Task Control_In_Template_Is_Not_Matched_With_Correct_TypeOf_And_Wrong_Class_Of_TemplatedControl()
{ {
var target = new Mock<IVisual>(); var target = new Mock<IVisual>();
var templatedControl = target.As<ITemplatedControl>(); var templatedControl = target.As<ITemplatedControl>();
@ -87,15 +90,10 @@ namespace Perspex.Styling.UnitTests
styleable.Setup(x => x.Classes).Returns(new Classes("bar")); styleable.Setup(x => x.Classes).Returns(new Classes("bar"));
var border = (Border)target.Object.VisualChildren.Single(); var border = (Border)target.Object.VisualChildren.Single();
var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType<Border>(); var selector = new Selector().OfType(templatedControl.Object.GetType()).Class("foo").Template().OfType<Border>();
var activator = selector.GetActivator(border);
Assert.False(ActivatorValue(selector, border)); Assert.False(await activator.Take(1));
}
private static bool ActivatorValue(Selector selector, IStyleable control)
{
return selector.GetActivator(control).Take(1).ToEnumerable().Single();
} }
private void BuildVisualTree<T>(Mock<T> templatedControl) where T : class, IVisual private void BuildVisualTree<T>(Mock<T> templatedControl) where T : class, IVisual

Loading…
Cancel
Save