public ArrowDescription(PlatformAttribute attribute,
			Method method,
			TestResult result,
			MessageLimiter textConditioner)
		{
			ParseRange(attribute, result.StackTrace);
			ParseMessage(result.Message, textConditioner);
			Test = method;
		}
 public ArrowDescription(PlatformAttribute attribute,
                         Method method,
                         TestResult result,
                         MessageLimiter textConditioner)
 {
     ParseRange(attribute, result.StackTrace);
     ParseMessage(result.Message, textConditioner);
     Test = method;
 }
		private void ParseMessage(string message, MessageLimiter limiter)
		{
			string expected = TestResultParser.Expected(message);
			string actual = TestResultParser.Actual(message);
			int differAt = TestResultParser.DifferAt(message, expected, actual);
			string correct;
			string incorrect;

			limiter.AdjustExpectedActualLengths(ref expected, ref actual, differAt, out correct, out incorrect);
			Expected = expected;
			Correct = correct;
			Incorrect = incorrect;
		}
        private void ParseMessage(string message, MessageLimiter limiter)
        {
            string expected = TestResultParser.Expected(message);
            string actual   = TestResultParser.Actual(message);
            int    differAt = TestResultParser.DifferAt(message, expected, actual);
            string correct;
            string incorrect;

            limiter.AdjustExpectedActualLengths(ref expected, ref actual, differAt, out correct, out incorrect);
            Expected  = expected;
            Correct   = correct;
            Incorrect = incorrect;
        }
		public void MessageLimiter_Null_Null()
		{
			MessageLimiter underTest = new MessageLimiter(true, 40, true);
			string expected = null;
			string actual = null;
			string correct;
			string incorrect;

            underTest.AdjustExpectedActualLengths(ref expected, ref actual, 0, out correct, out incorrect);

			Assert.Null(expected);
			Assert.Null(actual);
			Assert.Null(correct);
			Assert.Null(incorrect);
		}
		public void MessageLimiter_ShortenDoesNothingUnder10Chars_NoChange()
		{// Arbitrary value picked that where we will do nothing because shortining would make things worse.
			MessageLimiter underTest = new MessageLimiter(true, 9, false);
			string expected = "abcdefghij";
			string actual = "abbdefghij";
			string correct;
			string incorrect;

            underTest.AdjustExpectedActualLengths(ref expected, ref actual, 0, out correct, out incorrect);

			Assert.Equal("abcdefghij", expected);
			Assert.Equal("abbdefghij", actual);
			Assert.Equal("ab", correct);
			Assert.Equal("bdefghij", incorrect);
		}
		public void MessageLimiter_EscapeCharNoConvert_NoChange()
		{
			MessageLimiter underTest = new MessageLimiter(true, 20, false);
			string expected = "fifty\tfive\n";
			string actual = "fifty\tfivi\n";
			string correct;
			string incorrect;

            underTest.AdjustExpectedActualLengths(ref expected, ref actual, 10, out correct, out incorrect);

			Assert.Equal("fifty\tfive\n", expected);
			Assert.Equal("fifty\tfivi\n", actual);
			Assert.Equal("fifty\tfiv", correct);
			Assert.Equal("i\n", incorrect);
		}
		public void MessageLimiter_LongNonShortening_NoChange()
		{
			MessageLimiter underTest = new MessageLimiter(false, 1, false);
			string expected = "fifty";
			string actual = "fofty";
			string correct;
			string incorrect;

			underTest.AdjustExpectedActualLengths(ref expected, ref actual, 1, out correct, out incorrect);

			Assert.Equal("fifty", expected);
			Assert.Equal("fofty", actual);
			Assert.Equal("f", correct);
			Assert.Equal("ofty", incorrect);
		}
		public void MessageLimiter_Empty_Empty()
		{
			MessageLimiter underTest = new MessageLimiter(true, 40, true);
			string expected = String.Empty;
			string actual = String.Empty;
			string correct;
			string incorrect;

			underTest.AdjustExpectedActualLengths(ref expected, ref actual, 0, out correct, out incorrect);

			Assert.Equal(String.Empty, expected);
			Assert.Equal(String.Empty, actual);
			Assert.Equal(String.Empty, correct);
			Assert.Equal(String.Empty, incorrect);
		}
		public void MessageLimiter_ShortenDifferFront_EndElipsis()
		{// Arbitrary value picked that where we will do nothing because shortining would make things worse.
			MessageLimiter underTest = new MessageLimiter(true, 10, false);
			string expected = "abcdefghijklmnopqrstuvwxyz";
			string actual = "aacdefghijklmnopqrstuvwxyz";
			string correct;
			string incorrect;

            underTest.AdjustExpectedActualLengths(ref expected, ref actual, 1, out correct, out incorrect);

			Assert.Equal("abcdefg...", expected);
			Assert.Equal("aacdefg...", actual);
			Assert.Equal("a", correct);
			Assert.Equal("acdefg...", incorrect);
		}
		public void MessageLimiter_ContainsSlash_StartNotMoved()
		{// Arbitrary value picked that where we will do nothing because shortining would make things worse.
			MessageLimiter underTest = new MessageLimiter(true, 10, true);
			string expected = "C:\\somereallylongpath\\atEnd.?";
			string actual = "C:\\somereallylongpath\\itEnd.?";
			string correct;
			string incorrect;

			underTest.AdjustExpectedActualLengths(ref expected, ref actual, 22, out correct, out incorrect);

			Assert.Equal("...atEnd.?", expected);
			Assert.Equal("...itEnd.?", actual);
			Assert.Equal("...", correct);
			Assert.Equal("itEnd.?", incorrect);
		}
		public void MessageLimiter_ContainsNonPrintable_Escaped()
		{// Arbitrary value picked that where we will do nothing because shortining would make things worse.
			MessageLimiter underTest = new MessageLimiter(true, 10, true);
			string expected = "Supercalifragilisticexpealidoc\ti\nous";
			string actual = "Supercalifragilisticexpealidoc\to\nous";
			string correct;
			string incorrect;

			underTest.AdjustExpectedActualLengths(ref expected, ref actual, 35, out correct, out incorrect);

			Assert.Equal("...\\ti\\nous", expected);
			Assert.Equal("...\\to\\nous", actual);
			Assert.Equal("...\\t", correct);
			Assert.Equal("o\\nous", incorrect);
		}
		public void MessageLimiter_ShortenDifferEnd_FrontElipsis2()
		{// Arbitrary value picked that where we will do nothing because shortining would make things worse.
			MessageLimiter underTest = new MessageLimiter(true, 10, false);
			string expected = "Supercalifragilisticexpealidocious";
			string actual = "Supercalifragilisticxpealidocious";
			string correct;
			string incorrect;

            underTest.AdjustExpectedActualLengths(ref expected, ref actual, 20, out correct, out incorrect);

			Assert.Equal("...icex...", expected);
			Assert.Equal("...icxp...", actual);
			Assert.Equal("...ic", correct);
			Assert.Equal("xp...", incorrect);
		}