public void ExpectedAndActualAreUsedInMessage()
        {
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Expected: 2" + Environment.NewLine +
                "Actual:   1";

            AssertActualExpectedException ex =
                new AssertActualExpectedException(2, 1, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void ArraysShowDifferencePoint()
        {
            int[] actualValue = new int[] { 1, 2, 3, 4, 5 };
            int[] expectedValue = new int[] { 1, 2, 5, 7, 9 };

            string expectedMessage =
                "Message" + Environment.NewLine +
                "Position: First difference is at position 2" + Environment.NewLine +
                "Expected: System.Int32[] { 1, 2, 5, 7, 9 }" + Environment.NewLine +
                "Actual:   System.Int32[] { 1, 2, 3, 4, 5 }";

            AssertActualExpectedException ex =
                new AssertActualExpectedException(expectedValue, actualValue, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void ExpectedValueWrapsForMultiline()
        {
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Position: First difference is at position 0" + Environment.NewLine +
                "Expected: line 1" + Environment.NewLine +
                "          line 2" + Environment.NewLine +
                "Actual:   actual";

            AssertActualExpectedException ex =
                new AssertActualExpectedException(
                    "line 1" + Environment.NewLine + "line 2",
                    "actual",
                    "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void OneStringOneNullDoesNotShowDifferencePoint()
        {
            string actualValue = null;
            string expectedValue = "first test 1";
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Expected: first test 1" + Environment.NewLine +
                "Actual:   (null)";

            AssertActualExpectedException ex =
                new AssertActualExpectedException(expectedValue, actualValue, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void OneStringAddsValueToEndOfTheOtherString()
        {
            string actualValue = "first test";
            string expectedValue = "first test 1";
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Position: First difference is at position 10" + Environment.NewLine +
                "Expected: first test 1" + Environment.NewLine +
                "Actual:   first test";

            AssertActualExpectedException ex =
                new AssertActualExpectedException(expectedValue, actualValue, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void DifferentVisibleValueDifferentTypes()
        {
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Expected: 2" + Environment.NewLine +
                "Actual:   1";

            AssertActualExpectedException ex =
                new AssertActualExpectedException("2", 1, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void SameVisibleValueDifferentTypes()
        {
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Expected: 1 (System.String)" + Environment.NewLine +
                "Actual:   1 (System.Int32)";

            AssertActualExpectedException ex =
                new AssertActualExpectedException("1", 1, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void StringsDifferInTheMiddle()
        {
            string actualValue = "first test";
            string expectedValue = "first failure";
            string expectedMessage =
                "Message" + Environment.NewLine +
                "Position: First difference is at position 6" + Environment.NewLine +
                "Expected: first failure" + Environment.NewLine +
                "Actual:   first test";

            AssertActualExpectedException ex =
                new AssertActualExpectedException(expectedValue, actualValue, "Message");

            Assert.Equal(expectedMessage, ex.Message);
        }
        public void PreservesExpectedAndActual()
        {
            AssertActualExpectedException ex =
                new AssertActualExpectedException(2, 1, null);

            Assert.Equal("1", ex.Actual);
            Assert.Equal("2", ex.Expected);
            Assert.Null(ex.UserMessage);
        }