public void TestUnknownStorage() { var bs = new BinarySerializer(); var bd = new BinaryDeserializer(); bd.Options.AllowUnknownFields = true; var data = "20 01 00 " + XS(typeof(SampleUnknown)) + " 03 00 " + XS("A", RoughType.String, "X", RoughType.Int, "Z", RoughType.Bool) + " 01 00 " + XS("qq") + " 02 00 02 01 00 00 03 00 01 00 00"; var w = new SampleUnknown(); bd.FromBytes(w, SX(data)); Assert.AreEqual(258, w.X); Assert.AreEqual(2, w.Storage.Fields.Count); Assert.AreEqual("A", w.Storage.Fields[0].Name); Assert.AreEqual("qq", w.Storage.Fields[0].Value); Assert.AreEqual("Z", w.Storage.Fields[1].Name); Assert.AreEqual(true, w.Storage.Fields[1].Value); Assert.AreEqual(data, XS(bs.ToBytes(w))); bd.FromBytes(w, SX("20 01 00 00 00")); Assert.AreEqual(0, w.Storage.Fields.Count); Assert.AreEqual("20 01 00 00 00", XS(bs.ToBytes(new SampleUnknown()))); bd.ClearClassIds(); bs.ClearClassIds(); bd.FromBytes(w, SX( "20 01 00 " + XS(typeof(SampleUnknown)) + " 02 00 " + XS("A", RoughType.String, "Z", RoughType.Bool) + " 01 00 " + XS("tt") + " 02 00 01 00 00")); Assert.AreEqual(2, w.Storage.Fields.Count); Assert.AreEqual("A", w.Storage.Fields[0].Name); Assert.AreEqual("tt", w.Storage.Fields[0].Value); Assert.AreEqual("Z", w.Storage.Fields[1].Name); Assert.AreEqual(true, w.Storage.Fields[1].Value); Assert.AreEqual(258, w.X); w.X = 0; Assert.AreEqual( "20 01 00 " + XS(typeof(SampleUnknown)) + " 03 00 " + XS("A", RoughType.String, "X", RoughType.Int, "Z", RoughType.Bool) + " 01 00 " + XS("tt") + " 03 00 01 00 00", XS(bs.ToBytes(w))); bs.ClearClassIds(); bs.ToBytes(new SampleUnknown()); XAssert.Throws<YuzuException>(() => bs.ToBytes(w), "SampleUnknown"); bs.ClearClassIds(); bd.ClearClassIds(); var data2 = "20 01 00 " + XS(typeof(SampleUnknown)) + " 02 00 " + XS("A", RoughType.Record, "X", RoughType.Int) + " 01 00 02 00 " + XS("NewType") + " 01 00 " + XS("Fld", RoughType.SByte) + " 01 00 FE 00 00 02 00 14 00 00 00 00 00"; var w2 = bd.FromBytes<SampleUnknown>(SX(data2)); Assert.AreEqual(1, w2.Storage.Fields.Count); Assert.AreEqual("A", w2.Storage.Fields[0].Name); var u2 = (YuzuUnknown)w2.Storage.Fields[0].Value; Assert.AreEqual("NewType", u2.ClassTag); Assert.AreEqual(1, u2.Fields.Count); Assert.AreEqual((sbyte)-2, u2.Fields["Fld"]); Assert.AreEqual(20, w2.X); Assert.AreEqual("\n" + data2, "\n" + XS(bs.ToBytes(w2))); }
public void TestSimple() { var bs = new BinarySerializer(); bs.Options.AllowEmptyTypes = true; Assert.AreEqual( XS(RoughType.Record) + " 01 00 " + XS(typeof(Empty)) + " 00 00 00 00", XS(bs.ToBytes(new Empty()))); var v1 = new Sample1 { X = 345, Y = "test" }; bs.ClearClassIds(); var result = bs.ToBytes(v1); Assert.AreEqual( XS(RoughType.Record) + " 01 00 " + XS(typeof(Sample1)) + " 02 00 " + XS("X", RoughType.Int, "Y", RoughType.String) + " 01 00 59 01 00 00 02 00 " + XS("test") + " 00 00", XS(result)); Sample1 v2 = new Sample1(); var bd = new BinaryDeserializer(); bd.FromBytes(v2, result); Assert.AreEqual(v1.X, v2.X); Assert.AreEqual(v1.Y, v2.Y); bd.FromBytes(v2, new byte[] { 0x20, 01, 00, 01, 00, 0xE7, 03, 00, 00, 00, 00 }); Assert.AreEqual(999, v2.X); Assert.AreEqual(v1.Y, v2.Y); v1.X = int.MaxValue; bd.FromBytes(v2, bs.ToBytes(v1)); Assert.AreEqual(v1.X, v2.X); v1.X = int.MaxValue; bd.FromBytes(v2, bs.ToBytes(v1)); Assert.AreEqual(v1.X, v2.X); }