Browse Source

Reinstate Descendent selector tests.

Now we have logical tree back.
pull/39/head
Steven Kirk 12 years ago
parent
commit
09c1f41cd4
  1. 1
      Perspex.Controls/Perspex.Controls.csproj
  2. 3
      Perspex.SceneGraph/ILogical.cs
  3. 1
      Perspex.SceneGraph/Perspex.SceneGraph.csproj
  4. 96
      Perspex.Styling.UnitTests/SelectorTests_Descendent.cs
  5. 5
      Perspex.Styling/Selectors.cs

1
Perspex.Controls/Perspex.Controls.csproj

@ -36,7 +36,6 @@
<ItemGroup> <ItemGroup>
<Compile Include="Border.cs" /> <Compile Include="Border.cs" />
<Compile Include="Button.cs" /> <Compile Include="Button.cs" />
<Compile Include="ILogical.cs" />
<Compile Include="RadioButton.cs" /> <Compile Include="RadioButton.cs" />
<Compile Include="CheckBox.cs" /> <Compile Include="CheckBox.cs" />
<Compile Include="ColumnDefinition.cs" /> <Compile Include="ColumnDefinition.cs" />

3
Perspex.Controls/ILogical.cs → Perspex.SceneGraph/ILogical.cs

@ -4,9 +4,8 @@
// </copyright> // </copyright>
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
namespace Perspex.Controls namespace Perspex
{ {
using System.Collections.Generic;
using Perspex.Collections; using Perspex.Collections;
/// <summary> /// <summary>

1
Perspex.SceneGraph/Perspex.SceneGraph.csproj

@ -45,6 +45,7 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ILogical.cs" />
<Compile Include="Media\Brush.cs" /> <Compile Include="Media\Brush.cs" />
<Compile Include="Media\Brushes.cs" /> <Compile Include="Media\Brushes.cs" />
<Compile Include="Media\Color.cs" /> <Compile Include="Media\Color.cs" />

96
Perspex.Styling.UnitTests/SelectorTests_Descendent.cs

@ -11,6 +11,7 @@ namespace Perspex.Styling.UnitTests
using System.Reactive.Linq; using System.Reactive.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq; using Moq;
using Perspex.Collections;
using Perspex.Styling; using Perspex.Styling;
[TestClass] [TestClass]
@ -19,67 +20,64 @@ namespace Perspex.Styling.UnitTests
[TestMethod] [TestMethod]
public void Descendent_Matches_Control_When_It_Is_Child_OfType() public void Descendent_Matches_Control_When_It_Is_Child_OfType()
{ {
Assert.Inconclusive("Need to implement logical tree."); var parent = new Mock<TestLogical1>();
////var parent = new Mock<TestLogical1>(); var child = new Mock<TestLogical2>();
////var child = new Mock<TestLogical2>(); var childStyleable = child.As<IStyleable>();
////child.Setup(x => x.LogicalParent).Returns(parent.Object);
////var selector = new Selector().OfType(parent.Object.GetType()).Descendent().OfType(child.Object.GetType()); child.Setup(x => x.LogicalParent).Returns(parent.Object);
////Assert.IsTrue(ActivatorValue(selector, child.Object)); var selector = new Selector().OfType(parent.Object.GetType()).Descendent().OfType(child.Object.GetType());
Assert.IsTrue(ActivatorValue(selector, childStyleable.Object));
} }
[TestMethod] [TestMethod]
public void Descendent_Matches_Control_When_It_Is_Descendent_OfType() public void Descendent_Matches_Control_When_It_Is_Descendent_OfType()
{ {
Assert.Inconclusive("Need to implement logical tree."); var grandparent = new Mock<TestLogical1>();
////var grandparent = new Mock<TestLogical1>(); var parent = new Mock<TestLogical2>();
////var parent = new Mock<TestLogical2>(); var child = new Mock<TestLogical3>();
////var child = new Mock<TestLogical3>();
////parent.Setup(x => x.LogicalParent).Returns(grandparent.Object); parent.Setup(x => x.LogicalParent).Returns(grandparent.Object);
////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());
////Assert.IsTrue(ActivatorValue(selector, child.Object)); Assert.IsTrue(ActivatorValue(selector, child.Object));
} }
[TestMethod] [TestMethod]
public void Descendent_Matches_Control_When_It_Is_Descendent_OfType_And_Class() public void Descendent_Matches_Control_When_It_Is_Descendent_OfType_And_Class()
{ {
Assert.Inconclusive("Need to implement logical tree."); var grandparent = new Mock<TestLogical1>();
////var grandparent = new Mock<TestLogical1>(); var parent = new Mock<TestLogical2>();
////var parent = new Mock<TestLogical2>(); var child = new Mock<TestLogical3>();
////var child = new Mock<TestLogical3>();
////grandparent.Setup(x => x.Classes).Returns(new Classes("foo")); grandparent.Setup(x => x.Classes).Returns(new Classes("foo"));
////parent.Setup(x => x.LogicalParent).Returns(grandparent.Object); parent.Setup(x => x.LogicalParent).Returns(grandparent.Object);
////parent.Setup(x => x.Classes).Returns(new Classes()); parent.Setup(x => x.Classes).Returns(new Classes());
////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());
////Assert.IsTrue(ActivatorValue(selector, child.Object)); Assert.IsTrue(ActivatorValue(selector, child.Object));
} }
[TestMethod] [TestMethod]
public void Descendent_Doesnt_Match_Control_When_It_Is_Descendent_OfType_But_Wrong_Class() public void Descendent_Doesnt_Match_Control_When_It_Is_Descendent_OfType_But_Wrong_Class()
{ {
Assert.Inconclusive("Need to implement logical tree."); var grandparent = new Mock<TestLogical1>();
////var grandparent = new Mock<TestLogical1>(); var parent = new Mock<TestLogical2>();
////var parent = new Mock<TestLogical2>(); var child = new Mock<TestLogical3>();
////var child = new Mock<TestLogical3>();
////grandparent.Setup(x => x.Classes).Returns(new Classes("bar")); grandparent.Setup(x => x.Classes).Returns(new Classes("bar"));
////parent.Setup(x => x.LogicalParent).Returns(grandparent.Object); parent.Setup(x => x.LogicalParent).Returns(grandparent.Object);
////parent.Setup(x => x.Classes).Returns(new Classes("foo")); parent.Setup(x => x.Classes).Returns(new Classes("foo"));
////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>();
////Assert.IsFalse(ActivatorValue(selector, child.Object)); Assert.IsFalse(ActivatorValue(selector, child.Object));
} }
private static bool ActivatorValue(Selector selector, IStyleable control) private static bool ActivatorValue(Selector selector, IStyleable control)
@ -87,16 +85,26 @@ namespace Perspex.Styling.UnitTests
return selector.GetActivator(control).Take(1).ToEnumerable().Single(); return selector.GetActivator(control).Take(1).ToEnumerable().Single();
} }
////public abstract class TestLogical1 : TestLogical public abstract class TestLogical : ILogical, IStyleable
////{ {
////} public abstract Classes Classes { get; }
public abstract string Id { get; }
public abstract IReadOnlyPerspexList<ILogical> LogicalChildren { get; }
public abstract ILogical LogicalParent { get; }
public abstract ITemplatedControl TemplatedParent { get; }
public abstract IDisposable Bind(PerspexProperty property, IObservable<object> source, BindingPriority priority = BindingPriority.LocalValue);
}
public abstract class TestLogical1 : TestLogical
{
}
////public abstract class TestLogical2 : TestLogical public abstract class TestLogical2 : TestLogical
////{ {
////} }
////public abstract class TestLogical3 : TestLogical public abstract class TestLogical3 : TestLogical
////{ {
////} }
} }
} }

5
Perspex.Styling/Selectors.cs

@ -33,13 +33,12 @@ namespace Perspex.Styling
SelectorString = " ", SelectorString = " ",
GetObservable = control => GetObservable = control =>
{ {
// TODO: This needs to traverse the logical tree, not the visual. ILogical c = (ILogical)control;
IVisual c = (IVisual)control;
List<IObservable<bool>> descendentMatches = new List<IObservable<bool>>(); List<IObservable<bool>> descendentMatches = new List<IObservable<bool>>();
while (c != null) while (c != null)
{ {
c = c.VisualParent; c = c.LogicalParent;
if (c is IStyleable) if (c is IStyleable)
{ {

Loading…
Cancel
Save