public void CustomSerialization() { MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); BinaryReader reader = new BinaryReader(stream); try { stream.Position = 0; BuildResult result1 = new BuildResult(resultWithOutputs, false /* shallow copy */); result1.HandleId = 2; result1.RequestId = 3; result1.WriteToStream(writer); BuildResult result2 = new BuildResult(resultWithOutputs, true /* deep copy */); result2.HandleId = 2; result2.RequestId = 3; result2.WriteToStream(writer); BuildResult result3 = new BuildResult(null, new Hashtable(StringComparer.OrdinalIgnoreCase), true, 0, 1, 2, true, null, null, 0, 0, 0); result3.HandleId = 2; result3.RequestId = 3; result3.WriteToStream(writer); BuildResult result4 = new BuildResult(null, new Hashtable(StringComparer.OrdinalIgnoreCase), true, 0, 1, 2, true, "DefaultTarget", "InitialTarget", 0, 0, 0); result4.HandleId = 2; result4.RequestId = 3; result4.ResultByTarget.Add("ONE", Target.BuildState.CompletedSuccessfully); result4.WriteToStream(writer); long streamWriteEndPosition = stream.Position; stream.Position = 0; BuildResult result5 = BuildResult.CreateFromStream(reader); BuildResult result6 = BuildResult.CreateFromStream(reader); BuildResult result7 = BuildResult.CreateFromStream(reader); BuildResult result8 = BuildResult.CreateFromStream(reader); long streamReadEndPosition = stream.Position; Assert.IsTrue(streamWriteEndPosition == streamReadEndPosition, "Stream end positions should be equal"); CompareBuildResult(result1, result5); CompareBuildResult(result2, result6); CompareBuildResult(result3, result7); CompareBuildResult(result4, result8); Assert.IsTrue(result8.ResultByTarget.Count == 1); Assert.IsTrue(((Target.BuildState)result8.ResultByTarget["ONE"]) == Target.BuildState.CompletedSuccessfully); BuildItem[] buildItemArray = ((BuildItem[])result1.OutputsByTarget["TaskItems"]); Assert.IsTrue(buildItemArray.Length == 2); Assert.IsTrue(string.Compare(buildItemArray[0].Include, buildItem1.Include, StringComparison.OrdinalIgnoreCase) == 0); Assert.IsTrue(string.Compare(buildItemArray[1].Include, buildItem2.Include, StringComparison.OrdinalIgnoreCase) == 0); Assert.IsTrue(string.Compare(buildItemArray[1].Name, buildItem2.Name, StringComparison.OrdinalIgnoreCase) == 0); } finally { reader.Close(); writer = null; stream = null; } }