// -----------------------------------------------------------------------
//
// Copyright 2014 MIT Licence. See licence.md for more information.
//
// -----------------------------------------------------------------------
namespace Perspex.Styling.UnitTests
{
using System.Linq;
using System.Reactive.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using Perspex.Styling;
[TestClass]
public class SelectorTests_Id
{
[TestMethod]
public void Id_Priority_Is_Style()
{
var control = new Control1();
var target = new Selector().Id("foo");
Assert.AreEqual(BindingPriority.Style, target.Priority);
}
[TestMethod]
public void Id_Matches_Control_With_Correct_Id()
{
var control = new Control1 { Id = "foo" };
var target = new Selector().Id("foo");
Assert.IsTrue(ActivatorValue(target, control));
}
[TestMethod]
public void Id_Doesnt_Match_Control_Of_Wrong_Id()
{
var control = new Control1 { Id = "foo" };
var target = new Selector().Id("bar");
Assert.IsFalse(ActivatorValue(target, control));
}
[TestMethod]
public void Id_Doesnt_Match_Control_With_TemplatedParent()
{
var control = new Control1 { TemplatedParent = new Mock().Object };
var target = new Selector().Id("foo");
Assert.IsFalse(ActivatorValue(target, control));
}
[TestMethod]
public void When_Id_Matches_Control_Other_Selectors_Are_Subscribed()
{
var control = new Control1 { Id = "foo" };
var target = new Selector().Id("foo").SubscribeCheck();
var result = target.GetActivator(control).ToEnumerable().Take(1).ToArray();
Assert.AreEqual(1, control.SubscribeCheckObservable.SubscribedCount);
}
[TestMethod]
public void When_Id_Doesnt_Match_Control_Other_Selectors_Are_Not_Subscribed()
{
var control = new Control1 { Id = "foo" };
var target = new Selector().Id("bar").SubscribeCheck();
var result = target.GetActivator(control).ToEnumerable().Take(1).ToArray();
Assert.AreEqual(0, control.SubscribeCheckObservable.SubscribedCount);
}
private static bool ActivatorValue(Selector selector, IStyleable control)
{
return selector.GetActivator(control).Take(1).ToEnumerable().Single();
}
public class Control1 : TestControlBase
{
}
}
}