public void ShouldDumpObjectWithIndexer_NonIntegerArray_Ignored()
        {
            // Arrange
            var viewModelValidation = new ViewModelValidation
            {
                ["property1"] = new List <string> {
                    "error1"
                },
                ["property2"] = new List <string> {
                    "error2"
                },
            };

            var dumpOptions = new DumpOptions
            {
                IgnoreIndexers = false
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(viewModelValidation, dumpOptions);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var viewModelValidation = new ViewModelValidation\r\n{\r\n};");
        }
        public void ShouldDumpRecursiveTypes_CircularReference_Case3()
        {
            // Arrange
            var nestedItemB = new NestedItemB
            {
                Property = 1,
                Next     = null,
            };

            var nestedItemA = new NestedItemA
            {
                Property = 1,
                Next     = nestedItemB,
            };

            nestedItemB.Next = nestedItemA;

            // Act
            var dump = ObjectDumperCSharp.Dump(nestedItemA);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be(
                "var nestedItemA = new NestedItemA\r\n" +
                "{\r\n" +
                "  Next = new NestedItemB\r\n" +
                "  {\r\n" +
                "    Next = null, // Circular reference detected\r\n" +
                "    Property = 1\r\n" +
                "  },\r\n" +
                "  Property = 1\r\n" +
                "};");
        }
        public void ShouldEscapeStrings()
        {
            // Arrange
            var expectedPerson = new Person {
                Name = "Boris \"The Blade\", \\GANGSTA\\ aka 'The Bullet Dodger' \a \b \f \r\nOn a new\twith tab \v \0"
            };
            var dumpOptions = new DumpOptions {
                SetPropertiesOnly = true, IgnoreDefaultValues = true, MaxLevel = 1, ExcludeProperties = { "ByteArray" }
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(expectedPerson, dumpOptions);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();

            // Compare generated object with input
            var person = new Person
            {
                Name = "Boris \"The Blade\", \\GANGSTA\\ aka \'The Bullet Dodger\' \a \b \f \r\nOn a new\twith tab \v \0"
            };

            person.Should().BeEquivalentTo(expectedPerson);
        }
        public void ShouldDumpTypes_UsingCustomTypeFormatter()
        {
            // Arrange
            var typeMap = new TypeMap
            {
                Map = new Dictionary <Type, Type>
                {
                    { typeof(KeyTypeOne), typeof(HandlerTypeOne) },
                    { typeof(KeyTypeTwo), typeof(HandlerTypeTwo) }
                }
            };

            var dumpOptions = new DumpOptions
            {
                CustomTypeFormatter = new Dictionary <Type, Func <Type, string> >()
                {
                    { typeof(Type), o => $"typeof({o.Name})" }
                }
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(typeMap, dumpOptions);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var typeMap = new TypeMap\r\n{\r\n  Map = new Dictionary<Type, Type>\r\n  {\r\n    { typeof(KeyTypeOne), typeof(HandlerTypeOne) },\r\n    { typeof(KeyTypeTwo), typeof(HandlerTypeTwo) }\r\n  }\r\n};");
        }
        public void ShouldDumpObjectWithMaxLevel()
        {
            // Arrange
            var persons      = PersonFactory.GeneratePersons(count: 2).ToList();
            var organization = new Organization {
                Name = "superdev gmbh", Persons = persons
            };
            var options = new DumpOptions {
                MaxLevel = 1
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(organization, options);

            // Assert
            this.testOutputHelper.WriteLine(dump);

            dump.Should().NotBeNull();
            dump.Should().Be(
                "var organization = new Organization\r\n" +
                "{\r\n" +
                "  Name = \"superdev gmbh\",\r\n" +
                "  Persons = new List<Person>\r\n" +
                "  {\r\n" +
                "  },\r\n" +
                "  IsAfterCollection = true\r\n" +
                "};");
        }
        public void ShouldDumpGenericClass_WithMultipleGenericTypeArguments()
        {
            // Arrange
            var person       = PersonFactory.GeneratePersons(count: 1).First();
            var genericClass = new GenericClass <string, float, Person> {
                Prop1 = "Test", Prop2 = 123.45f, Prop3 = person
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(genericClass);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be(
                "var genericClass = new GenericClass<string, float, Person>\r\n" +
                "{\r\n" +
                "  Prop1 = \"Test\",\r\n" +
                "  Prop2 = 123.45f,\r\n" +
                "  Prop3 = new Person\r\n" +
                "  {\r\n" +
                "    Name = \"Person 1\",\r\n" +
                "    Char = '',\r\n" +
                "    Age = 2,\r\n" +
                "    GetOnly = 11,\r\n" +
                "    Bool = false,\r\n    Byte = 0,\r\n    ByteArray = new byte[]\r\n    {\r\n      1,\r\n      2,\r\n      3,\r\n      4\r\n    },\r\n    SByte = 0,\r\n    Float = 0f,\r\n    Uint = 0u,\r\n    Long = 0L,\r\n    ULong = 0UL,\r\n    Short = 0,\r\n    UShort = 0,\r\n    Decimal = 0m,\r\n    Double = 0d,\r\n    DateTime = DateTime.MinValue,\r\n    NullableDateTime = null,\r\n    Enum = DateTimeKind.Unspecified\r\n  }\r\n};");
        }
        public void ShouldDumpValueOfBuiltInType(object value, string expectedOutput)
        {
            // Act
            var dump = ObjectDumperCSharp.Dump(value);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be(expectedOutput);
        }
        public void ShouldDumpEnumerable()
        {
            // Arrange
            var persons = PersonFactory.GeneratePersons(count: 2).ToList();

            // Act
            var dump = ObjectDumperCSharp.Dump(persons);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be(
                "var listOfPersons = new List<Person>\r\n" +
                "{\r\n" +
                "  new Person\r\n" +
                "  {\r\n" +
                "    Name = \"Person 1\",\r\n" +
                "    Char = '',\r\n" +
                "    Age = 3,\r\n" +
                "    GetOnly = 11,\r\n" +
                "    Bool = false,\r\n" +
                "    Byte = 0,\r\n" +
                "    ByteArray = new byte[]\r\n" +
                "    {\r\n      1,\r\n      2,\r\n      3,\r\n      4\r\n    },\r\n    SByte = 0,\r\n    Float = 0f,\r\n    Uint = 0u,\r\n    Long = 0L,\r\n    ULong = 0UL,\r\n    Short = 0,\r\n    UShort = 0,\r\n    Decimal = 0m,\r\n    Double = 0d,\r\n    DateTime = DateTime.MinValue,\r\n    NullableDateTime = null,\r\n    Enum = DateTimeKind.Unspecified\r\n" +
                "  },\r\n" +
                "  new Person\r\n" +
                "  {\r\n" +
                "    Name = \"Person 2\",\r\n" +
                "    Char = '',\r\n" +
                "    Age = 3,\r\n" +
                "    GetOnly = 11,\r\n" +
                "    Bool = false,\r\n" +
                "    Byte = 0,\r\n" +
                "    ByteArray = new byte[]\r\n" +
                "    {\r\n" +
                "      1,\r\n" +
                "      2,\r\n" +
                "      3,\r\n" +
                "      4\r\n" +
                "    },\r\n" +
                "    SByte = 0,\r\n" +
                "    Float = 0f,\r\n" +
                "    Uint = 0u,\r\n" +
                "    Long = 0L,\r\n" +
                "    ULong = 0UL,\r\n" +
                "    Short = 0,\r\n" +
                "    UShort = 0,\r\n" +
                "    Decimal = 0m,\r\n" +
                "    Double = 0d,\r\n" +
                "    DateTime = DateTime.MinValue,\r\n" +
                "    NullableDateTime = null,\r\n" +
                "    Enum = DateTimeKind.Unspecified\r\n" +
                "  }\r\n" +
                "};");
        }
        public void ShouldDumpDateTimeMinValue()
        {
            // Arrange
            var datetime = DateTime.MinValue;

            // Act
            var dump = ObjectDumperCSharp.Dump(datetime);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var dateTime = DateTime.MinValue;");
        }
        public void ShouldDumpGuid()
        {
            // Arrange
            var guid = new Guid("024CC229-DEA0-4D7A-9FC8-722E3A0C69A3");

            // Act
            var dump = ObjectDumperCSharp.Dump(guid);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var guid = new Guid(\"024cc229-dea0-4d7a-9fc8-722e3a0c69a3\");");
        }
        public void ShouldDumpDateTimeOffsetMaxValue()
        {
            // Arrange
            var offset = DateTimeOffset.MaxValue;

            // Act
            var dump = ObjectDumperCSharp.Dump(offset);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be($"var dateTimeOffset = DateTimeOffset.MaxValue;");
        }
Пример #12
0
        public void ShouldDumpRuntimeType_BuiltInType()
        {
            // Arrange
            var type = typeof(string);

            // Act
            var dump = ObjectDumperCSharp.Dump(type);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var runtimeType = typeof(string);");
        }
Пример #13
0
        public void ShouldDumpCultureInfo()
        {
            // Arrange
            var cultureInfo = new CultureInfo("de-CH");

            // Act
            var dump = ObjectDumperCSharp.Dump(cultureInfo);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var cultureInfo = new CultureInfo(\"de-CH\");");
        }
Пример #14
0
        public void ShouldDumpArray_OneDimensional()
        {
            // Arrange
            var array = new string[] { "aaa", "bbb" };

            // Act
            var dump = ObjectDumperCSharp.Dump(array);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var stringArray = new string[]\r\n{\r\n  \"aaa\",\r\n  \"bbb\"\r\n};");
        }
        public void ShouldDumpEnumerable()
        {
            // Arrange
            var persons = PersonFactory.GeneratePersons(count: 2).ToList();

            // Act
            var dump = ObjectDumperCSharp.Dump(persons);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var listPerson = new List<Person>\n\r{\n\r  new Person\n\r  {\n\r    Name = \"Person 1\",\n\r    Char = '',\n\r    Age = 3,\n\r    GetOnly = 11,\n\r    Bool = false,\n\r    Byte = 0,\n\r    ByteArray = new Byte[]\n\r    {\n\r      1,\n\r      2,\n\r      3,\n\r      4\n\r    },\n\r    SByte = 0,\n\r    Float = 0f,\n\r    Uint = 0,\n\r    Long = 0L,\n\r    ULong = 0L,\n\r    Short = 0,\n\r    UShort = 0,\n\r    Decimal = 0m,\n\r    Double = 0d,\n\r    DateTime = DateTime.MinValue,\n\r    NullableDateTime = null,\n\r    Enum = System.DateTimeKind.Unspecified\n\r  },\n\r  new Person\n\r  {\n\r    Name = \"Person 2\",\n\r    Char = '',\n\r    Age = 3,\n\r    GetOnly = 11,\n\r    Bool = false,\n\r    Byte = 0,\n\r    ByteArray = new Byte[]\n\r    {\n\r      1,\n\r      2,\n\r      3,\n\r      4\n\r    },\n\r    SByte = 0,\n\r    Float = 0f,\n\r    Uint = 0,\n\r    Long = 0L,\n\r    ULong = 0L,\n\r    Short = 0,\n\r    UShort = 0,\n\r    Decimal = 0m,\n\r    Double = 0d,\n\r    DateTime = DateTime.MinValue,\n\r    NullableDateTime = null,\n\r    Enum = System.DateTimeKind.Unspecified\n\r  }\n\r};");
        }
        public void ShouldDumpRuntimeType()
        {
            // Arrange
            var type = typeof(Person);

            // Act
            var dump = ObjectDumperCSharp.Dump(type);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var runtimeType = typeof(ObjectDumping.Tests.Testdata.Person);");
        }
Пример #17
0
        public void ShouldDumpValueTuple_Arity0()
        {
            // Arrange
            var valueTuple = ValueTuple.Create();

            // Act
            var dump = ObjectDumperCSharp.Dump(valueTuple);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var valueTuple = ValueTuple.Create();");
        }
        public void ShouldDumpEnum()
        {
            // Arrange
            var dateTimeKind = DateTimeKind.Utc;

            // Act
            var dump = ObjectDumperCSharp.Dump(dateTimeKind);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var dateTimeKind = System.DateTimeKind.Utc;");
        }
        public void ShouldDumpObject()
        {
            // Arrange
            var person = PersonFactory.GetPersonThomas();

            // Act
            var dump = ObjectDumperCSharp.Dump(person);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var person = new Person\r\n{\r\n  Name = \"Thomas\",\r\n  Char = '',\r\n  Age = 30,\r\n  GetOnly = 11,\r\n  Bool = false,\r\n  Byte = 0,\r\n  ByteArray = new Byte[]\r\n  {\r\n    1,\r\n    2,\r\n    3,\r\n    4\r\n  },\r\n  SByte = 0,\r\n  Float = 0f,\r\n  Uint = 0,\r\n  Long = 0L,\r\n  ULong = 0L,\r\n  Short = 0,\r\n  UShort = 0,\r\n  Decimal = 0m,\r\n  Double = 0d,\r\n  DateTime = DateTime.MinValue,\r\n  NullableDateTime = null,\r\n  Enum = System.DateTimeKind.Unspecified\r\n};");
        }
        public void ShouldDumpDateTimeOffset()
        {
            // Arrange
            var offset = new DateTimeOffset(2000, 01, 01, 23, 59, 59, TimeSpan.Zero);

            // Act
            var dump = ObjectDumperCSharp.Dump(offset);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be($"var dateTimeOffset = DateTimeOffset.ParseExact(\"2000-01-01T23:59:59.0000000+00:00\", \"O\", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);");
        }
Пример #21
0
        public void ShouldDumpValueTuple_WithDefaultValue()
        {
            // Arrange
            (int Id, string FirstName, string LastName)valueTuple = default;

            // Act
            var dump = ObjectDumperCSharp.Dump(valueTuple);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var valueTuple = (0, null, null);");
        }
Пример #22
0
        public void ShouldDumpValueTuple_Arity3()
        {
            // Arrange
            var valueTuple = (1, "Bill", "Gates");

            // Act
            var dump = ObjectDumperCSharp.Dump(valueTuple);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var valueTuple = (1, \"Bill\", \"Gates\");");
        }
        public void ShouldDumpNullableObject()
        {
            // Arrange
            DateTime?datetime = null;

            // Act
            var dump = ObjectDumperCSharp.Dump(datetime);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var x = null;");
        }
Пример #24
0
        public void ShouldDumpEnum_WithMultipleFlags()
        {
            // Arrange
            var methodAttributes = MethodAttributes.PrivateScope | MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig;

            // Act
            var dump = ObjectDumperCSharp.Dump(methodAttributes);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var methodAttributes = MethodAttributes.PrivateScope | MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.HideBySig;");
        }
Пример #25
0
    /// <summary>
    ///     Serializes the given <see cref="element" /> to string with additional options <see cref="dumpOptions" />.
    /// </summary>
    /// <param name="element">Object to be dumped to string using the given <paramref name="dumpOptions" />.</param>
    /// <param name="dumpOptions">Further options to customize the dump output.</param>
    /// <returns></returns>
    public static string Dump(object element, DumpOptions dumpOptions)
    {
        if (dumpOptions == null)
        {
            dumpOptions = new DumpOptions();
        }

        if (dumpOptions.DumpStyle == DumpStyle.Console)
        {
            return(ObjectDumperConsole.Dump(element, dumpOptions));
        }

        return(ObjectDumperCSharp.Dump(element, dumpOptions));
    }
Пример #26
0
        public void ShouldDumpRecursiveTypes_RecursivePerson()
        {
            // Arrange
            var person = new RecursivePerson();

            person.Parent = person;

            // Act
            var dump = ObjectDumperCSharp.Dump(person);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var recursivePerson = new RecursivePerson\r\n{\r\n};");
        }
        public void ShouldDumpNestedObjects()
        {
            // Arrange
            var persons      = PersonFactory.GeneratePersons(count: 2).ToList();
            var organization = new Organization {
                Name = "superdev gmbh", Persons = persons
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(organization);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var organization = new Organization\r\n{\r\n  Name = \"superdev gmbh\",\r\n  Persons = new List<Person>\r\n  {\r\n    new Person\r\n    {\r\n      Name = \"Person 1\",\r\n      Char = '',\r\n      Age = 3,\r\n      GetOnly = 11,\r\n      Bool = false,\r\n      Byte = 0,\r\n      ByteArray = new Byte[]\r\n      {\r\n        1,\r\n        2,\r\n        3,\r\n        4\r\n      },\r\n      SByte = 0,\r\n      Float = 0f,\r\n      Uint = 0,\r\n      Long = 0L,\r\n      ULong = 0L,\r\n      Short = 0,\r\n      UShort = 0,\r\n      Decimal = 0m,\r\n      Double = 0d,\r\n      DateTime = DateTime.MinValue,\r\n      NullableDateTime = null,\r\n      Enum = System.DateTimeKind.Unspecified\r\n    },\r\n    new Person\r\n    {\r\n      Name = \"Person 2\",\r\n      Char = '',\r\n      Age = 3,\r\n      GetOnly = 11,\r\n      Bool = false,\r\n      Byte = 0,\r\n      ByteArray = new Byte[]\r\n      {\r\n        1,\r\n        2,\r\n        3,\r\n        4\r\n      },\r\n      SByte = 0,\r\n      Float = 0f,\r\n      Uint = 0,\r\n      Long = 0L,\r\n      ULong = 0L,\r\n      Short = 0,\r\n      UShort = 0,\r\n      Decimal = 0m,\r\n      Double = 0d,\r\n      DateTime = DateTime.MinValue,\r\n      NullableDateTime = null,\r\n      Enum = System.DateTimeKind.Unspecified\r\n    }\r\n  }\r\n};");
        }
        public void ShouldDumpMultipleGenericTypes()
        {
            // Arrange
            var person       = PersonFactory.GeneratePersons(count: 1).First();
            var genericClass = new GenericClass <string, float, Person> {
                Prop1 = "Test", Prop2 = 123.45f, Prop3 = person
            };

            // Act
            var dump = ObjectDumperCSharp.Dump(genericClass);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be("var genericClass = new GenericClass<String, Single, Person>\n\r{\n\r  Prop1 = \"Test\",\n\r  Prop2 = 123.45f,\n\r  Prop3 = new Person\n\r  {\n\r    Name = \"Person 1\",\n\r    Char = '',\n\r    Age = 2,\n\r    GetOnly = 11,\n\r    Bool = false,\n\r    Byte = 0,\n\r    ByteArray = new Byte[]\n\r    {\n\r      1,\n\r      2,\n\r      3,\n\r      4\n\r    },\n\r    SByte = 0,\n\r    Float = 0f,\n\r    Uint = 0,\n\r    Long = 0L,\n\r    ULong = 0L,\n\r    Short = 0,\n\r    UShort = 0,\n\r    Decimal = 0m,\n\r    Double = 0d,\n\r    DateTime = DateTime.MinValue,\n\r    NullableDateTime = null,\n\r    Enum = System.DateTimeKind.Unspecified\n\r  }\n\r};");
        }
Пример #29
0
        public void ShouldDumpEnumerable_EmptyCollection()
        {
            // Arrange
            var persons = new List <Person>();

            // Act
            var dump = ObjectDumperCSharp.Dump(persons);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be(
                "var listOfPersons = new List<Person>\r\n" +
                "{\r\n" +
                "};");
        }
        public void ShouldDumpDateTime_DateTimeKind_Local()
        {
            // Arrange
            var dateTime = new DateTime(2000, 01, 01, 23, 59, 59, DateTimeKind.Local);

            // Act
            var dump = ObjectDumperCSharp.Dump(dateTime);

            // Assert
            this.testOutputHelper.WriteLine(dump);
            dump.Should().NotBeNull();
            dump.Should().Be($"var dateTime = DateTime.ParseExact(\"2000-01-01T23:59:59.0000000{GetUtcOffsetString()}\", \"O\", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);");

            var returnedDateTime = DateTime.ParseExact($"2000-01-01T23:59:59.0000000{GetUtcOffsetString()}", "O", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);

            returnedDateTime.Should().Be(dateTime);
        }