public void CanSetMessage()
        {
            AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
            builder.SetMessage("Message");
            Assert.AreEqual("Message", builder.ToAssertionFailure().Message);

            builder.SetMessage(null);
            Assert.IsNull(builder.ToAssertionFailure().Message);

            builder.SetMessage("New Message", null);
            Assert.AreEqual("New Message", builder.ToAssertionFailure().Message);

            builder.SetMessage("New Message: {0}", "Hello!");
            Assert.AreEqual("New Message: Hello!", builder.ToAssertionFailure().Message);

            builder.SetMessage(null, null);
            Assert.IsNull(builder.ToAssertionFailure().Message);
        }
        /// <summary>
        /// Reports an assertion failure.
        /// </summary>
        /// <param name="testContext"></param>
        /// <param name="testInfoData"></param>
        /// <param name="testStepResult"></param>
        public void Run(ITestContext testContext, TestInfoData testInfoData, TestStepResult testStepResult)
        {
            if (testStepResult.TestOutcome == TestOutcome.Failed)
            {
                MbUnitCppAssertionFailure failure = testStepResult.Failure;
                var builder = new AssertionFailureBuilder(failure.Description);

                if (failure.HasExpectedValue && failure.HasActualValue && failure.Diffing)
                {
                    builder.AddRawExpectedAndActualValuesWithDiffs(failure.ExpectedValue, failure.ActualValue);
                }
                else if (failure.HasUnexpectedValue && failure.HasActualValue && failure.Diffing)
                {
                    builder.AddRawLabeledValuesWithDiffs("Unexpected Value", failure.UnexpectedValue, "Actual Value", failure.ActualValue);
                }
                else
                {
                    if (failure.HasExpectedValue)
                        builder.AddRawExpectedValue(failure.ExpectedValue);

                    if (failure.HasActualValue)
                        builder.AddRawActualValue(failure.ActualValue);

                    if (failure.HasUnexpectedValue)
                        builder.AddRawLabeledValue("Unexpected Value", failure.UnexpectedValue);
                }

                foreach (var extra in failure.ExtraLabeledValues)
                {
                    builder.AddRawLabeledValue(extra.First, extra.Second);
                }

                if (failure.Message.Length > 0)
                    builder.SetMessage(failure.Message);

                builder.SetStackTrace(testInfoData.GetStackTraceData(failure.Line));
                builder.ToAssertionFailure().WriteTo(testContext.LogWriter.Failures);
            }
        }
 public void AutomaticStackTraceUsedIfNotSet()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     Assert.Contains(builder.ToAssertionFailure().StackTrace.ToString(), "AutomaticStackTraceUsedIfNotSet");
 }
 public void CanSetStackTraceToNullToOmit()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     builder.SetStackTrace(null);
     Assert.IsNull(builder.ToAssertionFailure().StackTrace);
 }
 public void CanSetStackTrace()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     builder.SetStackTrace(new StackTraceData("Stack"));
     Assert.AreEqual("Stack", builder.ToAssertionFailure().StackTrace.ToString());
 }
 public void ConstructorSetsDescription()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     Assert.AreEqual("Description", builder.ToAssertionFailure().Description);
 }
        public void CanAddInnerFailures()
        {
            AssertionFailure inner1 = new AssertionFailureBuilder("Inner1").ToAssertionFailure();
            AssertionFailure inner2 = new AssertionFailureBuilder("Inner2").ToAssertionFailure();
            AssertionFailure inner3 = new AssertionFailureBuilder("Inner3").ToAssertionFailure();

            AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
            builder.AddInnerFailures(new[] { inner1, inner2 });
            builder.AddInnerFailure(inner3);

            Assert.Over.Pairs(new[] { inner1, inner2, inner3 }, builder.ToAssertionFailure().InnerFailures,
                Assert.AreEqual);
        }
Esempio n. 8
0
        /// <summary>
        /// Returns the diff as an assertion failure.
        /// </summary>
        /// <param name="expected">The expected fragment used to format the diff.</param>
        /// <param name="actual">The actual fragment used to format the diff.</param>
        /// <returns>The resulting assertion failure.</returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="expected"/> or <paramref name="actual"/> is null.</exception>
        public AssertionFailure ToAssertionFailure(NodeFragment expected, NodeFragment actual)
        {
            bool showActual = ((targets & DiffTargets.Actual) != 0);
            bool showExpected = ((targets & DiffTargets.Expected) != 0);
            var builder = new AssertionFailureBuilder(diffType.Description, new NullFormatter());
            const XmlPathRenderingOptions options = XmlPathRenderingOptions.UseIndentation;

            if (showActual && showExpected)
            {
                var actualFormatted = XmlPathRenderer.Run(path, actual, options);
                var expectedFormatted = XmlPathRenderer.Run(path, expected, options);
                builder.AddRawExpectedAndActualValuesWithDiffs(expectedFormatted, actualFormatted);
            }
            else if (showActual)
            {
                var actualFormatted = XmlPathRenderer.Run(path, actual, options);
                builder.AddRawActualValue(actualFormatted);
            }
            else if (showExpected)
            {
                var expectedFormatted = XmlPathRenderer.Run(path, expected, options);
                builder.AddRawExpectedValue(expectedFormatted);
            }

            return builder.ToAssertionFailure();
        }
        public void TruncatesDiffContextWhenTooLong()
        {
            string expectedValue = "z" + new string('x', AssertionFailure.MaxFormattedValueLength) + "z";
            string actualValue = "Z" + new string('x', AssertionFailure.MaxFormattedValueLength) + "Z";

            AssertionFailureBuilder builder = new AssertionFailureBuilder("description");
            builder.AddRawExpectedAndActualValuesWithDiffs(expectedValue, actualValue);
            AssertionFailure failure = builder.ToAssertionFailure();
            TestLog.Write(failure);

            int split = AssertionFailureBuilder.CompressedDiffContextLength / 2;
            Assert.AreEqual("\"z" + new string('x', split) + "..." + new string('x', split) + "z\"",
                failure.LabeledValues[0].FormattedValue.ToString());
            Assert.AreEqual("\"Z" + new string('x', split) + "..." + new string('x', split) + "Z\"",
                failure.LabeledValues[1].FormattedValue.ToString());
        }
        public void ShowsLabeledValuesWithDiffs_Difference()
        {
            AssertionFailureBuilder builder = new AssertionFailureBuilder("description");
            builder.AddRawLabeledValuesWithDiffs("Left", "acde", "Right", "bcef");

            DiffSet diffSet = DiffSet.GetDiffSet("\"acde\"", "\"bcef\"").Simplify();
            StructuredTextWriter expectedValueWriter = new StructuredTextWriter();
            diffSet.WriteTo(expectedValueWriter, DiffStyle.LeftOnly);
            StructuredTextWriter actualValueWriter = new StructuredTextWriter();
            diffSet.WriteTo(actualValueWriter, DiffStyle.RightOnly);

            Assert.AreElementsEqual(new[]
            {
                new AssertionFailure.LabeledValue("Left", expectedValueWriter.ToStructuredText()),
                new AssertionFailure.LabeledValue("Right", actualValueWriter.ToStructuredText())
            }, builder.ToAssertionFailure().LabeledValues);
        }
        public void ShowsExpectedAndActualValueWithDiffs_RepresentationalEquality()
        {
            AssertionFailureBuilder builder = new AssertionFailureBuilder("description");
            builder.AddRawExpectedAndActualValuesWithDiffs(1, 1u);

            Assert.AreElementsEqual(new[]
            {
                new AssertionFailure.LabeledValue("Expected Value & Actual Value", new StructuredText("1")),
                new AssertionFailure.LabeledValue("Remark", "Both values look the same when formatted but they are distinct instances.")
            }, builder.ToAssertionFailure().LabeledValues);
        }
        public void ShowsExpectedAndActualValueWithDiffs_ReferentialEquality()
        {
            const string str = "123";

            AssertionFailureBuilder builder = new AssertionFailureBuilder("description");
            builder.AddRawExpectedAndActualValuesWithDiffs(str, str);

            Assert.AreElementsEqual(new[]
            {
                new AssertionFailure.LabeledValue("Expected Value & Actual Value", new StructuredText("\"123\"")),
                new AssertionFailure.LabeledValue("Remark", "Both values are the same instance.")
            }, builder.ToAssertionFailure().LabeledValues);
        }
 public void CanAddFormattedLabeledValueAsLabeledValueStruct()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     builder.AddLabeledValue(new AssertionFailure.LabeledValue("Abc", new StructuredText("123")));
     Assert.AreElementsEqual(new[]
     {
         new AssertionFailure.LabeledValue("Abc", new StructuredText("123"))
     }, builder.ToAssertionFailure().LabeledValues);
 }
 public void CanAddFormattedLabeledValueAsPlainTextString()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     builder.AddLabeledValue("Abc", "123");
     Assert.AreElementsEqual(new[]
     {
         new AssertionFailure.LabeledValue("Abc", "123")
     }, builder.ToAssertionFailure().LabeledValues);
 }
 public void CanAddRawLabeledValue()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     builder.AddRawLabeledValue("Abc", 123);
     builder.AddRawLabeledValue("Def", 3.0m);
     Assert.AreElementsEqual(new[]
     {
         new AssertionFailure.LabeledValue("Abc", "123"),
         new AssertionFailure.LabeledValue("Def", "3.0m")
     }, builder.ToAssertionFailure().LabeledValues);
 }
 public void CanAddRawExpectedValue()
 {
     AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
     builder.AddRawExpectedValue("Abc");
     Assert.AreElementsEqual(new[]
     {
         new AssertionFailure.LabeledValue("Expected Value", "\"Abc\"")
     }, builder.ToAssertionFailure().LabeledValues);
 }
Esempio n. 17
0
            /// <summary>
            /// Asserts that the XML fragment contains the searched element or attribute, that it has the expected value, and that this element or attribute is unique in the entire fragment.
            /// </summary>
            /// <remarks>
            /// <para>
            /// If <paramref name="expectedValue"/> is set to <c>null</c>, the assertion behaves like <see cref="Assert.Xml.Exists(string, IXmlPathLoose, XmlOptions, string, object[])"/>.
            /// </para>
            /// </remarks>
            /// <param name="actualXml">The actual XML fragment.</param>
            /// <param name="searchedPath">The path of the searched element or attribute in the XML fragment.</param>
            /// <param name="options">Options for the search.</param>
            /// <param name="expectedValue">The expected value of the searched item (element or attribute).</param>
            /// <param name="messageFormat">The custom assertion message format, or null if none.</param>
            /// <param name="messageArgs">The custom assertion message arguments, or null if none.</param>
            /// <exception cref="AssertionException">Thrown if the verification failed unless the current <see cref="AssertionContext.AssertionFailureBehavior" /> indicates otherwise.</exception>
            /// <exception cref="ArgumentNullException">Thrown if <paramref name="actualXml"/>, <paramref name="searchedPath"/>, or <paramref name="options"/> is null.</exception>
            public static void IsUnique(string actualXml, IXmlPathLoose searchedPath, XmlOptions options, string expectedValue, string messageFormat, params object[] messageArgs)
            {
                if (actualXml == null)
                    throw new ArgumentNullException("actualXml");
                if (searchedPath == null)
                    throw new ArgumentNullException("searchedPath");
                if (options == null)
                    throw new ArgumentNullException("options");

                AssertionHelper.Verify(() =>
                {
                    NodeFragment actual;

                    try
                    {
                        actual = Parser.Run(actualXml, options.Value);
                    }
                    catch (XmlException exception)
                    {
                        return new AssertionFailureBuilder("Cannot parse the actual XML fragment.")
                            .SetMessage(messageFormat, messageArgs)
                            .AddException(exception)
                            .ToAssertionFailure();
                    }

                    int count = actual.CountAt(searchedPath, expectedValue, options.Value);

                    if (count == 1)
                        return null;

                    var builder = new AssertionFailureBuilder("Expected the XML fragment to contain only once the searched XML element or attribute, " +
                        (count == 0 ? "but none was found." : "But several were found."))
                        .SetMessage(messageFormat, messageArgs)
                        .AddLabeledValue("Item searched", searchedPath.ToString())
                        .AddRawLabeledValue("Number of items found", count);

                    if (expectedValue != null)
                    {
                        builder.AddLabeledValue("Expected value", expectedValue);
                    }

                    return builder.ToAssertionFailure();
                });
            }
        public void CanAddExceptions()
        {
            AssertionFailureBuilder builder = new AssertionFailureBuilder("Description");
            builder.AddException(new InvalidOperationException("Boom 1"));
            builder.AddException(new InvalidOperationException("Boom 2"));

            Assert.Over.Pairs(new[] { "Boom 1", "Boom 2" }, builder.ToAssertionFailure().Exceptions,
                (expectedSubstring, actual) => Assert.Contains(actual.ToString(), expectedSubstring));
        }