/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/CSharp/Test/Symbol/SymbolDisplay/ObjectDisplayTests.cs
382 строки
23 KB
Jared Parsons
generated move
28 сен 2020, 19:36
28 сен 2020, 19:36
1cca63b
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Threading; using Roslyn.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.CSharp.UnitTests { public class ObjectDisplayTests { [Fact] public void IntegralPrimitives() { unchecked { Assert.Equal("1", FormatPrimitive((byte)1)); Assert.Equal(@"123", FormatPrimitive((byte)123)); Assert.Equal("255", FormatPrimitive((byte)-1)); Assert.Equal("1", FormatPrimitive((sbyte)1)); Assert.Equal(@"123", FormatPrimitive((sbyte)123)); Assert.Equal("-1", FormatPrimitive((sbyte)-1)); Assert.Equal("1", FormatPrimitive((ushort)1)); Assert.Equal(@"123", FormatPrimitive((ushort)123)); Assert.Equal("65535", FormatPrimitive((ushort)-1)); Assert.Equal("1", FormatPrimitive((short)1)); Assert.Equal(@"123", FormatPrimitive((short)123)); Assert.Equal("-1", FormatPrimitive((short)-1)); Assert.Equal("1", FormatPrimitive((uint)1)); Assert.Equal(@"123", FormatPrimitive((uint)123)); Assert.Equal("4294967295", FormatPrimitive((uint)-1)); Assert.Equal("1", FormatPrimitive((int)1)); Assert.Equal(@"123", FormatPrimitive((int)123)); Assert.Equal("-1", FormatPrimitive((int)-1)); Assert.Equal("1", FormatPrimitive((ulong)1)); Assert.Equal(@"123", FormatPrimitive((ulong)123)); Assert.Equal("18446744073709551615", FormatPrimitive((ulong)-1)); Assert.Equal("1", FormatPrimitive((long)1)); Assert.Equal(@"123", FormatPrimitive((long)123)); Assert.Equal("-1", FormatPrimitive((long)-1)); Assert.Equal("0x01", FormatPrimitiveUsingHexadecimalNumbers((byte)1)); Assert.Equal(@"0x7f", FormatPrimitiveUsingHexadecimalNumbers((byte)0x7f)); Assert.Equal("0xff", FormatPrimitiveUsingHexadecimalNumbers((byte)-1)); Assert.Equal("0x01", FormatPrimitiveUsingHexadecimalNumbers((sbyte)1)); Assert.Equal(@"0x7f", FormatPrimitiveUsingHexadecimalNumbers((sbyte)0x7f)); Assert.Equal("0xffffffff", FormatPrimitiveUsingHexadecimalNumbers((sbyte)-1)); // As in dev11. Assert.Equal(@"0xfffffffe", FormatPrimitiveUsingHexadecimalNumbers((sbyte)(-2))); Assert.Equal("0x0001", FormatPrimitiveUsingHexadecimalNumbers((ushort)1)); Assert.Equal(@"0x007f", FormatPrimitiveUsingHexadecimalNumbers((ushort)0x7f)); Assert.Equal("0xffff", FormatPrimitiveUsingHexadecimalNumbers((ushort)-1)); Assert.Equal("0x0001", FormatPrimitiveUsingHexadecimalNumbers((short)1)); Assert.Equal(@"0x007f", FormatPrimitiveUsingHexadecimalNumbers((short)0x7f)); Assert.Equal("0xffffffff", FormatPrimitiveUsingHexadecimalNumbers((short)-1)); // As in dev11. Assert.Equal(@"0xfffffffe", FormatPrimitiveUsingHexadecimalNumbers((short)(-2))); Assert.Equal("0x00000001", FormatPrimitiveUsingHexadecimalNumbers((uint)1)); Assert.Equal(@"0x0000007f", FormatPrimitiveUsingHexadecimalNumbers((uint)0x7f)); Assert.Equal("0xffffffff", FormatPrimitiveUsingHexadecimalNumbers((uint)-1)); Assert.Equal("0x00000001", FormatPrimitiveUsingHexadecimalNumbers((int)1)); Assert.Equal(@"0x0000007f", FormatPrimitiveUsingHexadecimalNumbers((int)0x7f)); Assert.Equal("0xffffffff", FormatPrimitiveUsingHexadecimalNumbers((int)-1)); Assert.Equal(@"0xfffffffe", FormatPrimitiveUsingHexadecimalNumbers((int)(-2))); Assert.Equal("0x0000000000000001", FormatPrimitiveUsingHexadecimalNumbers((ulong)1)); Assert.Equal(@"0x000000000000007f", FormatPrimitiveUsingHexadecimalNumbers((ulong)0x7f)); Assert.Equal("0xffffffffffffffff", FormatPrimitiveUsingHexadecimalNumbers((ulong)-1)); Assert.Equal("0x0000000000000001", FormatPrimitiveUsingHexadecimalNumbers((long)1)); Assert.Equal(@"0x000000000000007f", FormatPrimitiveUsingHexadecimalNumbers((long)0x7f)); Assert.Equal("0xffffffffffffffff", FormatPrimitiveUsingHexadecimalNumbers((long)-1)); Assert.Equal(@"0xfffffffffffffffe", FormatPrimitiveUsingHexadecimalNumbers((long)(-2))); } } [Fact] public void Booleans() { Assert.Equal(@"true", FormatPrimitive(true)); Assert.Equal(@"false", FormatPrimitive(false)); } [Fact] public void NullLiterals() { Assert.Equal(@"null", FormatPrimitive(null)); } [Fact] public void Decimals() { Assert.Equal(@"2", FormatPrimitive((decimal)2)); } [Fact] public void Floats() { Assert.Equal(@"2", FormatPrimitive((float)2)); } [Fact] public void Doubles() { Assert.Equal(@"2", FormatPrimitive((double)2)); } [Fact] public void Characters() { Assert.Equal("120 'x'", ObjectDisplay.FormatLiteral('x', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints)); Assert.Equal("120 x", ObjectDisplay.FormatLiteral('x', ObjectDisplayOptions.IncludeCodePoints)); Assert.Equal("0x0078 'x'", ObjectDisplay.FormatLiteral('x', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x0078 x", ObjectDisplay.FormatLiteral('x', ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("39 '\\''", ObjectDisplay.FormatLiteral('\'', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints)); Assert.Equal("39 '", ObjectDisplay.FormatLiteral('\'', ObjectDisplayOptions.IncludeCodePoints)); Assert.Equal("0x001e '\\u001e'", ObjectDisplay.FormatLiteral('\u001e', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x001e \u001e", ObjectDisplay.FormatLiteral('\u001e', ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x0008 '\\b'", ObjectDisplay.FormatLiteral('\b', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x0009 '\\t'", ObjectDisplay.FormatLiteral('\t', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x000a '\\n'", ObjectDisplay.FormatLiteral('\n', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x000b '\\v'", ObjectDisplay.FormatLiteral('\v', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x000d '\\r'", ObjectDisplay.FormatLiteral('\r', ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); Assert.Equal("0x000d \r", ObjectDisplay.FormatLiteral('\r', ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseHexadecimalNumbers)); } [Fact] public void Characters_QuotesAndEscaping() { Assert.Equal(QuoteAndEscapingCombinations('a'), new[] { "a", "a", "'a'", "'a'", "97 a", "97 a", "97 'a'", "97 'a'", }); Assert.Equal(QuoteAndEscapingCombinations('\t'), new[] { "\t", "\\t", "'\t'", "'\\t'", "9 \t", "9 \\t", "9 '\t'", "9 '\\t'", }); // Miscellaneous symbol Assert.Equal(QuoteAndEscapingCombinations('\u26f4'), new[] { "\u26f4", "\u26f4", "'\u26f4'", "'\u26f4'", "9972 \u26f4", "9972 \u26f4", "9972 '\u26f4'", "9972 '\u26f4'", }); // Control character Assert.Equal(QuoteAndEscapingCombinations('\u007f'), new[] { "\u007f", "\\u007f", "'\u007f'", "'\\u007f'", "127 \u007f", "127 \\u007f", "127 '\u007f'", "127 '\\u007f'", }); // Quote Assert.Equal(QuoteAndEscapingCombinations('\''), new[] { "'", "'", "'\\''", "'\\''", "39 '", "39 '", "39 '\\''", "39 '\\''", }); } private static IEnumerable<string> QuoteAndEscapingCombinations(char ch) { return new[] { ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.None), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.EscapeNonPrintableCharacters), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.UseQuotes), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.UseQuotes), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.None), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.EscapeNonPrintableCharacters), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.UseQuotes), ObjectDisplay.FormatLiteral(ch, ObjectDisplayOptions.IncludeCodePoints | ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.UseQuotes), }; } [Fact] public void Strings() { Assert.Equal("", ObjectDisplay.FormatLiteral("", ObjectDisplayOptions.None)); Assert.Equal(@"a", ObjectDisplay.FormatLiteral(@"a", ObjectDisplayOptions.None)); Assert.Equal(@"ab", ObjectDisplay.FormatLiteral(@"ab", ObjectDisplayOptions.None)); Assert.Equal(@"\", ObjectDisplay.FormatLiteral(@"\", ObjectDisplayOptions.None)); Assert.Equal(@"\a", ObjectDisplay.FormatLiteral(@"\a", ObjectDisplayOptions.None)); Assert.Equal(@"a\b", ObjectDisplay.FormatLiteral(@"a\b", ObjectDisplayOptions.None)); Assert.Equal(@"ab\c", ObjectDisplay.FormatLiteral(@"ab\c", ObjectDisplayOptions.None)); Assert.Equal(@"ab\cd", ObjectDisplay.FormatLiteral(@"ab\cd", ObjectDisplayOptions.None)); Assert.Equal(@"ab\cd\", ObjectDisplay.FormatLiteral(@"ab\cd\", ObjectDisplayOptions.None)); Assert.Equal(@"ab\cd\e", ObjectDisplay.FormatLiteral(@"ab\cd\e", ObjectDisplayOptions.None)); Assert.Equal(@"\\\\", ObjectDisplay.FormatLiteral(@"\\\\", ObjectDisplayOptions.None)); Assert.Equal(@"""""", ObjectDisplay.FormatLiteral("", ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal(@"""\""\""""", ObjectDisplay.FormatLiteral(@"""""", ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal(@"""'""", ObjectDisplay.FormatLiteral(@"'", ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal(@"""ab""", ObjectDisplay.FormatLiteral(@"ab", ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal(@"""\\""", ObjectDisplay.FormatLiteral(@"\", ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal("\"x\"", ObjectDisplay.FormatLiteral("x", ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal("x", ObjectDisplay.FormatLiteral("x", ObjectDisplayOptions.None)); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 255; i++) { sb.Append((char)i); } var s = sb.ToString(); var expected = "\"\\0\\u0001\\u0002\\u0003\\u0004\\u0005\\u0006\\a\\b\\t\\n\\v\\f\\r\\u000e\\u000f\\u0010" + "\\u0011\\u0012\\u0013\\u0014\\u0015\\u0016\\u0017\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d" + "\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[" + "\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\u007f\\u0080\\u0081\\u0082\\u0083\\u0084\\u0085" + "\\u0086\\u0087\\u0088\\u0089\\u008a\\u008b\\u008c\\u008d\\u008e\\u008f\\u0090\\u0091\\u0092" + "\\u0093\\u0094\\u0095\\u0096\\u0097\\u0098\\u0099\\u009a\\u009b\\u009c\\u009d\\u009e\\u009f" + " ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèé" + "êëìíîïðñòóôõö÷øùúûüýþ\""; Assert.Equal( expected, ObjectDisplay.FormatLiteral(s, ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); expected = "\0\u0001\u0002\u0003\u0004\u0005\u0006\a\u0008\u0009\u000a\u000b\f\u000d\u000e\u000f\u0010" + "\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d" + "\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[" + "\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007f\u0080\u0081\u0082\u0083\u0084\u0085" + "\u0086\u0087\u0088\u0089\u008a\u008b\u008c\u008d\u008e\u008f\u0090\u0091\u0092" + "\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009a\u009b\u009c\u009d\u009e\u009f" + " ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèé" + "êëìíîïðñòóôõö÷øùúûüýþ"; Assert.Equal( expected, ObjectDisplay.FormatLiteral(s, ObjectDisplayOptions.None)); var arabic = "انتخابات مبكرة، بعد يوم حافل بالاحداث السياسية، بعد"; s = ObjectDisplay.FormatLiteral(arabic, ObjectDisplayOptions.None); Assert.Equal(arabic, s); var hebrew = "והמנהלים רפואיים של ארבעת קופות החולים. בסיום הפגישה הבהיר"; s = ObjectDisplay.FormatLiteral(hebrew, ObjectDisplayOptions.None); Assert.Equal(hebrew, s); } [Fact] public void Strings_QuotesAndEscaping() { Assert.Equal(QuoteAndEscapingCombinations(""), new[] { "", "", "\"\"", "\"\"" }); Assert.Equal(QuoteAndEscapingCombinations("a"), new[] { "a", "a", "\"a\"", "\"a\"" }); Assert.Equal(QuoteAndEscapingCombinations("\t"), new[] { "\t", "\\t", "\"\t\"", "\"\\t\"" }); Assert.Equal(QuoteAndEscapingCombinations("\u26F4"), new[] { "\u26F4", "\u26F4", "\"\u26F4\"", "\"\u26F4\"" }); // Miscellaneous symbol Assert.Equal(QuoteAndEscapingCombinations("\u007f"), new[] { "\u007f", "\\u007f", "\"\u007f\"", "\"\\u007f\"" }); // Control character Assert.Equal(QuoteAndEscapingCombinations("\""), new[] { "\"", "\"", "\"\\\"\"", "\"\\\"\"" }); // Quote } private static IEnumerable<string> QuoteAndEscapingCombinations(string s) { return new[] { ObjectDisplay.FormatLiteral(s, ObjectDisplayOptions.None), ObjectDisplay.FormatLiteral(s, ObjectDisplayOptions.EscapeNonPrintableCharacters), ObjectDisplay.FormatLiteral(s, ObjectDisplayOptions.UseQuotes), ObjectDisplay.FormatLiteral(s, ObjectDisplayOptions.EscapeNonPrintableCharacters | ObjectDisplayOptions.UseQuotes), }; } [Fact] public void Strings_Verbatim() { Assert.Equal("@\"\n\"", ObjectDisplay.FormatLiteral("\n", ObjectDisplayOptions.UseQuotes)); Assert.Equal("@\"\"\"\n\"", ObjectDisplay.FormatLiteral("\"\n", ObjectDisplayOptions.UseQuotes)); } [Fact, WorkItem(529850, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/529850")] public void CultureInvariance() { using (new CultureContext(new CultureInfo("de-DE", useUserOverride: false))) { var decimalValue = new Decimal(12.5); Assert.Equal("12,5", decimalValue.ToString()); Assert.Equal("12.5", ObjectDisplay.FormatLiteral(decimalValue, ObjectDisplayOptions.None)); Assert.Equal("12.5", ObjectDisplay.FormatLiteral(decimalValue, ObjectDisplayOptions.None, CultureInfo.InvariantCulture)); Assert.Equal("12,5", ObjectDisplay.FormatLiteral(decimalValue, ObjectDisplayOptions.None, CultureInfo.CurrentCulture)); Assert.Equal("12.5M", ObjectDisplay.FormatLiteral(decimalValue, ObjectDisplayOptions.IncludeTypeSuffix)); double doubleValue = 12.5; Assert.Equal("12,5", doubleValue.ToString()); Assert.Equal("12.5", ObjectDisplay.FormatLiteral(doubleValue, ObjectDisplayOptions.None)); Assert.Equal("12.5", ObjectDisplay.FormatLiteral(doubleValue, ObjectDisplayOptions.None, CultureInfo.InvariantCulture)); Assert.Equal("12,5", ObjectDisplay.FormatLiteral(doubleValue, ObjectDisplayOptions.None, CultureInfo.CurrentCulture)); Assert.Equal("12.5D", ObjectDisplay.FormatLiteral(doubleValue, ObjectDisplayOptions.IncludeTypeSuffix)); float singleValue = 12.5F; Assert.Equal("12,5", singleValue.ToString()); Assert.Equal("12.5", ObjectDisplay.FormatLiteral(singleValue, ObjectDisplayOptions.None)); Assert.Equal("12.5", ObjectDisplay.FormatLiteral(singleValue, ObjectDisplayOptions.None, CultureInfo.InvariantCulture)); Assert.Equal("12,5", ObjectDisplay.FormatLiteral(singleValue, ObjectDisplayOptions.None, CultureInfo.CurrentCulture)); Assert.Equal("12.5F", ObjectDisplay.FormatLiteral(singleValue, ObjectDisplayOptions.IncludeTypeSuffix)); int intValue = 12; Assert.Equal("12", intValue.ToString()); Assert.Equal("12", ObjectDisplay.FormatLiteral(intValue, ObjectDisplayOptions.None)); Assert.Equal("12", ObjectDisplay.FormatLiteral(intValue, ObjectDisplayOptions.None, CultureInfo.InvariantCulture)); Assert.Equal("12", ObjectDisplay.FormatLiteral(intValue, ObjectDisplayOptions.None, CultureInfo.CurrentCulture)); } } [Fact] public void TypeSuffixes() { bool boolValue = true; Assert.Equal("true", FormatPrimitiveIncludingTypeSuffix(boolValue)); byte sbyteValue = 0x2A; Assert.Equal("42", FormatPrimitiveIncludingTypeSuffix(sbyteValue)); byte byteValue = 0x2A; Assert.Equal("42", FormatPrimitiveIncludingTypeSuffix(byteValue)); short shortValue = 0x2A; Assert.Equal("42", FormatPrimitiveIncludingTypeSuffix(shortValue)); ushort ushortValue = 0x2A; Assert.Equal("42", FormatPrimitiveIncludingTypeSuffix(ushortValue)); int intValue = 0x2A; Assert.Equal("42", FormatPrimitiveIncludingTypeSuffix(intValue)); uint uintValue = 0x2A; Assert.Equal("42U", FormatPrimitiveIncludingTypeSuffix(uintValue)); long longValue = 0x2A; Assert.Equal("42L", FormatPrimitiveIncludingTypeSuffix(longValue)); ulong ulongValue = 0x2A; Assert.Equal("42UL", FormatPrimitiveIncludingTypeSuffix(ulongValue)); float floatValue = 3.14159F; Assert.Equal("3.14159F", FormatPrimitiveIncludingTypeSuffix(floatValue)); double doubleValue = 26.2; Assert.Equal("26.2D", FormatPrimitiveIncludingTypeSuffix(doubleValue)); decimal decimalValue = 12.5M; Assert.Equal("12.5M", FormatPrimitiveIncludingTypeSuffix(decimalValue, useHexadecimalNumbers: true)); } [Fact] public void StringEscaping() { const string value = "a\tb"; Assert.Equal("a\tb", ObjectDisplay.FormatPrimitive(value, ObjectDisplayOptions.None)); Assert.Equal("\"a\tb\"", ObjectDisplay.FormatPrimitive(value, ObjectDisplayOptions.UseQuotes)); Assert.Equal("a\\tb", ObjectDisplay.FormatPrimitive(value, ObjectDisplayOptions.EscapeNonPrintableCharacters)); Assert.Equal("\"a\\tb\"", ObjectDisplay.FormatPrimitive(value, ObjectDisplayOptions.UseQuotes | ObjectDisplayOptions.EscapeNonPrintableCharacters)); } private string FormatPrimitive(object obj, bool quoteStrings = false) { var options = quoteStrings ? ObjectDisplayOptions.UseQuotes : ObjectDisplayOptions.None; return ObjectDisplay.FormatPrimitive(obj, options | ObjectDisplayOptions.EscapeNonPrintableCharacters); } private string FormatPrimitiveUsingHexadecimalNumbers(object obj, bool quoteStrings = false) { var options = quoteStrings ? ObjectDisplayOptions.UseQuotes : ObjectDisplayOptions.None; return ObjectDisplay.FormatPrimitive(obj, options | ObjectDisplayOptions.UseHexadecimalNumbers | ObjectDisplayOptions.EscapeNonPrintableCharacters); } private string FormatPrimitiveIncludingTypeSuffix(object obj, bool useHexadecimalNumbers = false) { var options = useHexadecimalNumbers ? ObjectDisplayOptions.UseHexadecimalNumbers : ObjectDisplayOptions.None; return ObjectDisplay.FormatPrimitive(obj, options | ObjectDisplayOptions.IncludeTypeSuffix | ObjectDisplayOptions.EscapeNonPrintableCharacters); } } }