using System.Threading; using System.Windows.Controls; using System.Windows.Input; using Caliburn.Composition; using Caliburn.Events.Brokering; using Caliburn.Messaging; using Caliburn.Metadata; using Caliburn.Views; using MbUnit.Framework; namespace Tests.Caliburn.The_core_framework_can { [TestFixture(ApartmentState = ApartmentState.STA)] public class by_using_the_ViewManager { private ViewManager _viewManager; [SetUp] public void Before_Each() { _viewManager = new ViewManager(); } [Test] public void register_default_properties_for_controls() { _viewManager.RegisterDefaults( new ElementDefaults("Click", (c) => c.DataContext, (c,o) => c.DataContext = o) ); ElementDefaults defaults = _viewManager.GetDefaults(typeof(Button)); Assert.IsNotNull(defaults); Assert.AreEqual("Click", defaults.DefaultEventName); Button b = new Button(); b.DataContext = "test"; Assert.AreEqual(b.DataContext, defaults.GetDefaultValue(b)); defaults.SetDefaultValue(b, "anotherTest"); Assert.AreEqual("anotherTest", b.DataContext); } [Test] public void register_an_ActionMessage_with_event_trigger() { ActionMessage message = new ActionMessage(); message.Action = "SomeMethod"; message.Trigger = "Click"; TestMessageSource source = new TestMessageSource(); _viewManager.AddMessageSource(source, message); Assert.IsTrue(Helper.HasWiredEvent(source, "Click")); } [Test] public void register_an_ActionMessage_with_default_event() { ActionMessage message = new ActionMessage(); message.Action = "SomeMethod"; TestMessageSource source = new TestMessageSource(); _viewManager.RegisterDefaults( new ElementDefaults("Click", (c) => c.Test, (c, o) => c.Test = o) ); _viewManager.AddMessageSource(source, message); Assert.IsTrue(Helper.HasWiredEvent(source, "Click")); } [Test] public void register_an_ActionMessage_with_InputGesture() { MouseGesture gesture = new MouseGesture(MouseAction.RightClick, ModifierKeys.Alt); ActionMessage message = new ActionMessage(); message.Action = "SomeMethod"; message.Trigger = gesture; Button button = new Button(); _viewManager.AddMessageSource(button, message); bool isBound = false; foreach(InputBinding binding in button.InputBindings) { if(binding.Gesture == gesture && binding.Command != null) { isBound = true; break; } } Assert.IsTrue(isBound); } [Test] public void register_an_EventMessage_with_event_trigger() { EventMessage message = new EventMessage(); message.Trigger = "Click"; message.Publication = new Publication("event://someEvent"); TestMessageSource source = new TestMessageSource(); _viewManager.AddMessageSource(source, message); Assert.IsTrue(Helper.HasWiredEvent(source, "Click")); } [Test] public void register_an_EventMessage_with_default_event() { EventMessage message = new EventMessage(); message.Publication = new Publication("event://someEvent"); TestMessageSource source = new TestMessageSource(); _viewManager.RegisterDefaults( new ElementDefaults("Click", (c) => c.Test, (c, o) => c.Test = o) ); _viewManager.AddMessageSource(source, message); Assert.IsTrue(Helper.HasWiredEvent(source, "Click")); } [Test] public void register_an_EventMessage_with_InputGesture() { MouseGesture gesture = new MouseGesture(MouseAction.RightClick, ModifierKeys.Alt); EventMessage message = new EventMessage(); message.Publication = new Publication("event://someEvent"); message.Trigger = gesture; Button button = new Button(); _viewManager.AddMessageSource(button, message); bool isBound = false; foreach (InputBinding binding in button.InputBindings) { if (binding.Gesture == gesture && binding.Command != null) { isBound = true; break; } } Assert.IsTrue(isBound); } } }