/// <summary>
 /// Asserts two values are equal.
 /// </summary>
 /// <typeparam name="T">Type of values.</typeparam>
 /// <param name="manager">The test manager.</param>
 /// <param name="expected">The expected value.</param>
 /// <param name="actual">The actual value.</param>
 /// <param name="context">The description of the context under which both values are compared.</param>
 public static void AssertAreEqual <T>(IProtocolTestsManager manager, T expected, T actual, string context)
 {
     manager.Assert(
         Object.Equals(expected, actual),
         string.Format("expected \'{0}\', actual \'{1}\' ({2})", MessageRuntimeHelper.Describe(expected), MessageRuntimeHelper.Describe(actual), context)
         );
 }
        /// <summary>
        /// Asserts two values are equal.
        /// </summary>
        /// <typeparam name="T">Type of values.</typeparam>
        /// <param name="manager">The test manager.</param>
        /// <param name="expected">The expected value.</param>
        /// <param name="actual">The actual value.</param>
        /// <param name="context">The description of the context under which both values are compared.</param>
        public static void AssertAreEqual <T>(IProtocolTestsManager manager, IList <T> expected, IList <T> actual, string context)
        {
            bool listEqual = false;

            if (expected != null && actual != null)
            {
                listEqual = expected.All(actual.Contains) && expected.Count == actual.Count;
            }
            else if (expected == null && actual == null)
            {
                listEqual = true;
            }

            StringBuilder expectedDescribeBuilder = new StringBuilder();

            foreach (var item in expected)
            {
                expectedDescribeBuilder.AppendFormat("{0},", MessageRuntimeHelper.Describe <object>(item));
            }

            StringBuilder actualDescribeBuilder = new StringBuilder();

            foreach (var item in actual)
            {
                actualDescribeBuilder.AppendFormat("{0},", MessageRuntimeHelper.Describe <object>(item));
            }
            if (expectedDescribeBuilder.Length > 0)
            {
                expectedDescribeBuilder.Remove(expectedDescribeBuilder.Length - 1, 1);
            }
            if (actualDescribeBuilder.Length > 0)
            {
                actualDescribeBuilder.Remove(actualDescribeBuilder.Length - 1, 1);
            }

            manager.Assert(
                listEqual,
                string.Format("expected \'{0}\', actual \'{1}\' ({2})", expectedDescribeBuilder.ToString(), actualDescribeBuilder.ToString(), context)
                );
        }
 /// <summary>
 /// Asserts a value is not null.
 /// </summary>
 /// <param name="manager">The test manager.</param>
 /// <param name="actual">The value under check.</param>
 /// <param name="context">The context under which the value is checked.</param>
 public static void AssertNotNull(IProtocolTestsManager manager, object actual, string context)
 {
     manager.Assert(actual != null, string.Format("expected non-null value ({0})", context));
 }