Example #1
0
        public void TestCustomSerialization()
        {
            string projectFileName = "ProjectFileName";
            string[] targetNames = new string[] { "Build" };
            BuildPropertyGroup globalProperties = null;
            string toolsVersion = "Tool35";
            int requestId = 1;
            int handleId = 4;

            globalProperties = new BuildPropertyGroup();
            BuildProperty propertyToAdd = new BuildProperty("PropertyName", "Value");
            globalProperties.SetProperty(propertyToAdd);
            BuildRequest request1 = new BuildRequest(handleId, projectFileName, targetNames, globalProperties, toolsVersion, requestId, true, true);
            request1.ParentBuildEventContext = new BuildEventContext(1, 2, 3, 4);

            BuildRequest request2 = new BuildRequest(handleId, projectFileName, null, globalProperties, toolsVersion, requestId, true, true);
            request2.GlobalProperties = null;
            request2.ProjectFileName = null;
            request2.DefaultTargets = null;
            request2.InitialTargets = null;
            request2.UseResultsCache = false;
            request2.ParentBuildEventContext = null;

            MemoryStream stream = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(stream);
            BinaryReader reader = new BinaryReader(stream);
            try
            {
                stream.Position = 0;
                request1.WriteToStream(writer);
                long streamWriteEndPosition = stream.Position;
                request2.WriteToStream(writer);
                long streamWriteEndPosition2 = stream.Position;
                stream.Position = 0;
                BuildRequest request3 = BuildRequest.CreateFromStream(reader);
                long streamReadEndPosition = stream.Position;
                Assert.IsTrue(streamWriteEndPosition == streamReadEndPosition, "Stream end positions should be equal");
                Assert.IsTrue(request1.HandleId == request3.HandleId, "Expected HandleId to Match");
                Assert.IsTrue(request1.RequestId == request3.RequestId, "Expected Request to Match");
                Assert.IsTrue(string.Compare(request1.ProjectFileName, request3.ProjectFileName, StringComparison.OrdinalIgnoreCase) == 0, "Expected ProjectFileName to Match");
                Assert.IsTrue(string.Compare(targetNames[0], request3.TargetNames[0], StringComparison.OrdinalIgnoreCase) == 0, "Expected TargetNames to Match");
                Assert.IsTrue(string.Compare(toolsVersion, request3.ToolsetVersion, StringComparison.OrdinalIgnoreCase) == 0, "Expected ToolsetVersion to Match");
                Assert.IsTrue(request3.TargetNames.Length == 1, "Expected there to be one TargetName");
                Assert.IsTrue(request3.UnloadProjectsOnCompletion, "Expected UnloadProjectsOnCompletion to be true");
                Assert.IsTrue(request3.UseResultsCache, "Expected UseResultsCache to be true");
                Assert.IsTrue(string.Compare(request3.GlobalProperties["PropertyName"].Value,"Value",StringComparison.OrdinalIgnoreCase)==0);
                Assert.AreEqual(request1.ParentBuildEventContext, request3.ParentBuildEventContext, "Expected BuildEventContext to Match");

                BuildRequest request4 = BuildRequest.CreateFromStream(reader);
                streamReadEndPosition = stream.Position;
                Assert.IsTrue(streamWriteEndPosition2 == streamReadEndPosition, "Stream end positions should be equal");
                Assert.IsTrue(request2.HandleId == request4.HandleId, "Expected HandleId to Match");
                Assert.IsTrue(request2.RequestId == request4.RequestId, "Expected Request to Match");
                Assert.IsNull(request4.ProjectFileName);
                Assert.IsNull(request4.TargetNames);
                Assert.IsNull(request4.GlobalProperties);
                Assert.IsNull(request4.ParentBuildEventContext);
            }
            finally
            {
                reader.Close();
                writer = null;
                stream = null;
            }
        }