internal Action <ObjTestA> checkTestAProc(ObjTestA a) { return((b) => { Assert.Equal(a.GetType(), b.GetType()); Assert.Equal(a.A, b.A); Assert.Equal(a.B, b.B); if (a is ObjTestB ab) { ObjTestB bb = b as ObjTestB; Assert.Equal(ab.E, bb.E); if (ab.D == null) { Assert.Null(bb.D); } else { checkTestAProc(ab.D)(bb.D); } if (ab.C == null) { Assert.Null(bb.C); } else { checkTestAProc(ab.C)(bb.C); } } }); }
public async Task Test_Polymorphic_Nest_Buffer(int len) { BinarySerializerOptions options = new BinarySerializerOptions() { DefaultBufferSize = 1 }; ObjTestB n1 = new ObjTestB() { D = new ObjTestB() { B = new string('A', len) } }; await Test(n1, CheckProc(n1), options); options = new BinarySerializerOptions() { DefaultBufferSize = 30 }; n1 = new ObjTestB() { A = 1, B = new string('A', len), C = new ObjTestB() { A = 2, D = new ObjTestB() { B = new string('C', len), E = 1, C = new ObjTestB() { }, D = new ObjTestA() { A = 3, B = new string('D', len) } } }, D = new ObjTestB() { B = new string('E', len), D = new ObjTestA() { B = new string('F', len), A = 1 }, E = 1 }, E = null }; await Test(n1, CheckProc(n1), options); }
public async Task Test_NestObjBuffer(int len) { BinarySerializerOptions options = new BinarySerializerOptions() { DefaultBufferSize = 1 }; ObjTestB a = new ObjTestB() { A = 1, B = new string('A', len), C = new ObjTestB() { A = 1, B = new string('B', len) }, E = null }; Action <ObjTestB> check = CheckProc(a); await Test(a, check, options); a.C.C = new ObjTestB() { A = 2, B = new string('C', len), C = new ObjTestB() { A = 3, B = new string('D', len), C = new ObjTestB() { A = 4, B = new string('E', len), E = 2, C = new ObjTestB() { A = 5, B = null, E = null, D = new ObjTestA() { A = 1, B = new string('A', len) } } }, E = 1 }, E = null }; await Test(a, check, options); }
public async Task Test_Polymorphic_Nest() { ObjTestB n1 = new ObjTestB() { D = new ObjTestB() { B = "D1" } }; await Test(n1, CheckProc(n1)); n1 = new ObjTestB() { A = 1, B = "A", C = new ObjTestB() { A = 2, D = new ObjTestB() { B = "C1", E = 1, C = new ObjTestB() { }, D = new ObjTestA() { A = 3, B = "C2" } } }, D = new ObjTestB() { B = "D1", D = new ObjTestA() { B = "A1", A = 1 }, E = 1 }, E = null }; await Test(n1, CheckProc(n1)); }
public async Task Test_NestObj() { Type type = typeof(ObjTestA); ObjTestB a = new ObjTestB() { A = 1, B = null, C = null, E = null }; await Test <ObjTestB>(null, (obj) => Assert.Null(obj)); void check(ObjTestB b) { Assert.Equal(a.A, b.A); Assert.Equal(a.B, b.B); if (a.C == null) { Assert.Equal(a.C, b.C); } if (a.C != null) { Assert.Equal(a.C.A, b.C.A); Assert.Equal(a.C.B, b.C.B); } } await Test(a, check); a.B = "AAA"; a.C = new ObjTestB() { A = 2, B = "222", }; await Test(a, check); }
private Action <ObjTestB> CheckProc(ObjTestB a) { void check(ObjTestB b) { Assert.Equal(a.A, b.A); Assert.Equal(a.B, b.B); if (a.C == null) { Assert.Equal(a.C, b.C); } if (a.D == null) { Assert.Equal(a.D, b.D); } else { Assert.Equal(a.D.GetType(), b.D.GetType()); Assert.Equal(a.D.A, b.D.A); Assert.Equal(a.D.B, b.D.B); if (a.D is ObjTestB) { var subCheck = CheckProc(a.D as ObjTestB); subCheck(b.D as ObjTestB); } } ObjTestB c1 = a.C; ObjTestB c2 = b.C; while (c1 != null) { var subCheck = CheckProc(c1); subCheck(c2); c1 = c1.C; c2 = c2.C; } } return(check); }
public void Test_Diff_Obj_Complex() { ObjTestB a = new ObjTestB() { A = 1, B = "B", C = new ObjTestB() { A = 2, B = "B" } }; byte[] data = BinarySerializer.Serialize(a); var b = BinarySerializer.Deserialize <DiffObjTestB>(data); Assert.Equal((uint)1, b.A); Assert.Equal("B", b.B); Assert.Equal("B", b.C.B); }
public async Task Test_Polymorphic() { ObjTestA a = new ObjTestB() { A = 1, B = null, E = 2 }; void check(ObjTestA b) { Assert.Equal(a.A, b.A); Assert.Equal(a.B, b.B); } await Test <ObjTestA>(a, check); //object c = new ObjTestB() //{ // A = 1 //}; //await Test<object>(c, b=> //{ // Assert.IsType<ObjTestB>(b); // ObjTestB x = b as ObjTestB; // Assert.Equal((uint)1, x.A); //}); //c = new object(); //await Test<object>(c, b => //{ // Assert.True(b.GetType() == typeof(object)); //}); }