diff SilverlightValidation/SilverlightValidation.Tests/TestSupport/CommandCanExecuteAssertHelper.cs @ 97:1adc1ae981ea

Tests added to SilverlightValidation.Tests
author stevenhollidge <stevenhollidge@hotmail.com>
date Sat, 05 May 2012 16:39:00 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SilverlightValidation/SilverlightValidation.Tests/TestSupport/CommandCanExecuteAssertHelper.cs	Sat May 05 16:39:00 2012 +0100
@@ -0,0 +1,162 @@
+using System;
+using System.Windows.Input;
+using NUnit.Framework;
+
+namespace SilverlightValidation.Tests.TestSupport
+{
+    public static class CommandCanExecuteAssertHelper
+    {
+        #region Assert methods (using helper)
+
+        #region Can/cannot execute
+
+        /// <summary>
+        /// Raises an assertion if the supplied command's CanExecute method returns false.
+        /// </summary>
+        /// <remarks>
+        /// CanExecute is passed null.
+        /// </remarks>
+        /// <param name="command">The command.</param>
+        public static void AssertCanExecute(this ICommand command)
+        {
+            if (command == null) throw new ArgumentNullException("command");
+
+            Assert.IsTrue(command.CanExecute(null));
+        }
+
+        /// <summary>
+        /// Raises an assertion if the supplied command's CanExecute method returns false.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="command">The command.</param>
+        /// <param name="value">A value to pass to CanExecute.</param>
+        public static void AssertCanExecute<T>(this ICommand command, T value)
+        {
+            if (command == null) throw new ArgumentNullException("command");
+
+            Assert.IsTrue(command.CanExecute(value));
+        }
+
+        /// <summary>
+        /// Raises an assertion if the supplied command's CanExecute method returns true.
+        /// </summary>
+        /// <remarks>
+        /// CanExecute is passed null.
+        /// </remarks>
+        /// <param name="command">The command.</param>
+        public static void AssertCannotExecute(this ICommand command)
+        {
+            if (command == null) throw new ArgumentNullException("command");
+
+            Assert.IsTrue(!command.CanExecute(null));
+        }
+
+        /// <summary>
+        /// Raises an assertion if the supplied command's CanExecute method returns true.
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="command">The command.</param>
+        /// <param name="value">A value to pass to CanExecute.</param>
+        public static void AssertCannotExecute<T>(this ICommand command, T value)
+        {
+            if (command == null) throw new ArgumentNullException("command");
+
+            Assert.IsTrue(!command.CanExecute(value));
+        }
+
+        #endregion
+
+        #region Assert is raised/Assert is not raised (CommandCanExecute)
+
+        /// <summary>
+        /// Raises an assertion if the action is invoked and the supplied command
+        /// raises a CommandCanExecuteChanged event.
+        /// </summary>
+        /// <param name = "command">The command.</param>
+        /// <param name = "action">The action to invoke.</param>
+        public static void AssertIsNotRaised(this ICommand command, Action action)
+        {
+            Assert.IsTrue(IsNotRaised(command, action));
+        }
+
+        /// <summary>
+        /// Raises an assertion if the action is invoked and the supplied command
+        /// does not raise at least one CommandCanExecuteChanged event.
+        /// </summary>
+        /// <param name = "command">The command.</param>
+        /// <param name = "action">The action to invoke.</param>
+        public static void AssertIsRaised(this ICommand command, Action action)
+        {
+            Assert.IsTrue(IsRaised(command, action));
+        }
+
+        /// <summary>
+        /// Raises an assertion if the action is invoked and the supplied command
+        /// does raise the number of CommandCanExecuteChanged events as defined by the 
+        /// supplied predicate.
+        /// </summary>
+        /// <param name = "command">The command.</param>
+        /// <param name = "predicate">The predicate.</param>
+        /// <param name = "action">The action to invoke.</param>
+        public static void AssertIsRaised(this ICommand command, Predicate<int> predicate, Action action)
+        {
+            Assert.IsTrue(IsRaised(command, predicate, action));
+        }
+
+        #endregion
+
+        #endregion
+
+        #region Is raised/Is not raised methods (CommandCanExecute)
+
+        /// <summary>
+        ///   Determines if the specified CommandCanExecuteChanged event is
+        ///   not raised when the supplied action is invoked.
+        /// </summary>
+        /// <param name = "command">The command.</param>
+        /// <param name = "action">The action to invoke.</param>
+        public static bool IsNotRaised(this ICommand command, Action action)
+        {
+            return !IsRaised(command, action);
+        }
+
+        /// <summary>
+        ///   Determines if the specified CommandCanExecuteChanged event is
+        ///   raised one or more times when the supplied action is invoked.
+        /// </summary>
+        /// <param name = "command">The command.</param>
+        /// <param name = "action">The action to invoke.</param>
+        /// <returns>
+        ///   <c>true</c> if the specified command is raised; otherwise, <c>false</c>.
+        /// </returns>
+        public static bool IsRaised(this ICommand command, Action action)
+        {
+            return IsRaised(command, count => count > 0, action);
+        }
+
+        /// <summary>
+        ///   Determines if the specified CommandCanExecuteChanged event is 
+        ///   raised the number of times as defined by the predicate when the supplied action is invoked.
+        /// </summary>
+        /// <param name = "command">The command.</param>
+        /// <param name = "predicate">A predicate.</param>
+        /// <param name = "action">The action to invoke.</param>
+        /// <returns>
+        ///   <c>true</c> if the specified command's CanExecuteChanged event is raised; otherwise, <c>false</c>.
+        /// </returns>
+        public static bool IsRaised(this ICommand command, Predicate<int> predicate, Action action)
+        {
+            if (predicate == null) throw new ArgumentNullException("predicate");
+            if (action == null) throw new ArgumentNullException("action");
+
+            using (var watcher = new CommandCanExecuteChangedEventWatcher(command))
+            {
+                action();
+
+                return predicate(watcher.RaisedCount);
+            }
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file