using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using x0.Jester; // ReSharper disable UnusedMember.Global // ReSharper disable UnusedMember.Local // ReSharper disable UnusedType.Local namespace x0.JesterTests { [ExcludeFromCodeCoverage] public static class SerializeTestsSamples { public class CustomList : List { public CustomList() { } public CustomList(IEnumerable collection) : base(collection) { } } public class CustomDict : Dictionary { } public class SampleObject { public const string IntFieldName = "AltIntField"; public string StringField; [JesterProperty(Name = IntFieldName)] public int IntField; public IDictionary ImplicitDictField; public IEnumerable ImplicitArrayField1; public IEnumerable ImplicitArrayField2; public string[] ExplicitArrayField; } public class SampleDataObject { public string StringField; public sbyte SbyteField; public byte ByteField; public short ShortField; public ushort UshortField; public int IntField; public uint UintField; public long LongField; public ulong UlongField; public float FloatField; public double DoubleField; public bool BoolField; public DateTime DateTimeField; public int[] IntArray; public long[] LongArray; public List IntList; public List LongList; public List StringList; public IList IntIList; public IList LongIList; public IList StringIList; public IReadOnlyList IntRoList; public IReadOnlyList LongRoList; public IReadOnlyList StringRoList; public CustomList CustomList; public IList CustomIList; public IReadOnlyList CustomRoList; public CustomList CustomStringList; public IList CustomStringIList; public IReadOnlyList CustomStringRoList; public CustomList CustomObjectList; public IList CustomObjectIList; public IReadOnlyList CustomObjectRoList; public Color CustomFixedConvObject; public Path CustomDynamicConvObject; } public class SampleDataObjectWithInjection1 { public string StringField; public ulong UlongField; public readonly int IntField; [JesterCreator] public SampleDataObjectWithInjection1(int intField) { IntField = intField; } } public class SampleDataObjectWithInjection2 { public string StringField; public ulong UlongField; public readonly int IntField; [JesterCreator] public SampleDataObjectWithInjection2(int IntField) { this.IntField = IntField; } } public class SampleDataObjectWithInjection3 { public string StringField; public ulong UlongField; [JesterProperty(Name = "numField")] public readonly int IntField; [JesterCreator] public SampleDataObjectWithInjection3(int numField) { IntField = numField; } } [JesterFactory(typeof(SampleDataObjectWithInjection4))] public class SampleDataObjectWithInjection4 { public string StringField; public readonly ulong UlongField; public readonly int IntField; public SampleDataObjectWithInjection4(int intField, ulong ulongField) { IntField = intField; UlongField = ulongField; } [JesterCreator] public static SampleDataObjectWithInjection4 Create(int intField, ulong ulongField) => new SampleDataObjectWithInjection4(intField, ulongField); } [JesterFactory(typeof(SampleDataObjectWithInjection5))] public class SampleDataObjectWithInjection5 { public string StringField; public readonly ulong UlongField; [JesterProperty(Name = "numField")] public readonly int IntField; public SampleDataObjectWithInjection5(int intField, ulong ulongField) { IntField = intField; UlongField = ulongField; } [JesterCreator] public static SampleDataObjectWithInjection5 Create(int numField, ulong ulongField) => new SampleDataObjectWithInjection5(numField, ulongField); } public class SampleDataObjectWithBrokenInjection { public string StringField; public ulong UlongField; public readonly int IntField; [JesterCreator] public SampleDataObjectWithBrokenInjection(int intFieldWithWrongName) { IntField = intFieldWithWrongName; } } public class SimpleWrapper { public int IntField = 13; [JesterProperty(WriteDefaultValue = true)] public string StringField = "pre-populated value"; [JesterProperty(WriteDefaultValue = true)] public IEnumerable ArrayField = Array.Empty(); public int? NullableByteField = 28; public int? NullableIntField = 55; public long? NullableLongField; public Color? NullableColorField1; public Color? NullableColorField2 = new Color { R = 1, G = 11, B = 111, }; public object ObjectField; } [JesterSerialize(Serialize = JesterSerializeMembers.Explicit)] public class ExplicitFieldsSample { public int IntField; [JesterProperty] public long LongField; } public struct Color { public byte R; public byte G; public byte B; public override string ToString() => $"#{R:X2}{G:X2}{B:X2}"; } public class Path { public IEnumerable Items { get; } public Path(IEnumerable items) => Items = new List(items); public override string ToString() => string.Join(' ', Items); public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) { return false; } if (ReferenceEquals(this, obj)) { return true; } if (obj.GetType() != GetType()) { return false; } return Equals(ToString(), obj.ToString()); } public override int GetHashCode() => Items?.GetHashCode() ?? 0; } } }