public void TestBuildTreeStructureCount()
        {
            var binLog       = GetTestFile("1.binlog");
            var binaryLogger = new BinaryLogger();

            binaryLogger.Parameters = binLog;
            var buildSuccessful = MSBuild.BuildProjectFromFile(s_testProject, binaryLogger);

            Assert.True(buildSuccessful);

            var build = Serialization.Read(binLog);

            var projectEvaluations = build.FindChildrenRecursive <ProjectEvaluation>();

            Assert.Equal(3, projectEvaluations.Count);
            Assert.Equal(3, new HashSet <ProjectEvaluation>(projectEvaluations).Count);

            var projectInvocations = build.FindChildrenRecursive <Project>();

            Assert.Equal(5, projectInvocations.Count);
            Assert.Equal(5, new HashSet <Project>(projectInvocations).Count);

            Assert.Equal(7, build.FindChildrenRecursive <Target>().Count);

            Assert.Equal(10, build.FindChildrenRecursive <Task>().Count);

            Assert.Equal(4, build.FindChildrenRecursive <Item>().Count);
        }
        public void TestBinaryLoggerRoundtrip(bool useInMemoryProject)
        {
            var binLog       = GetTestFile("1.binlog");
            var binaryLogger = new BinaryLogger();

            binaryLogger.Parameters = binLog;
            var buildSuccessful = useInMemoryProject
                ? MSBuild.BuildProjectInMemory(s_testProject, binaryLogger)
                : MSBuild.BuildProjectFromFile(s_testProject, binaryLogger);

            Assert.True(buildSuccessful);

            var build = Serialization.Read(binLog);
            var xml1  = GetTestFile("1.xml");
            var xml2  = GetTestFile("2.xml");

            Serialization.Write(build, xml1);

            Serialization.Write(build, GetTestFile("1.buildlog"));
            build = Serialization.Read(GetTestFile("1.buildlog"));

            Serialization.Write(build, xml2);

            Assert.False(Differ.AreDifferent(xml1, xml2));

            build = XlinqLogReader.ReadFromXml(xml1);
            Serialization.Write(build, GetTestFile("3.xml"));
            Assert.False(Differ.AreDifferent(xml1, GetTestFile("3.xml")));

            build = Serialization.Read(xml1);
            Serialization.Write(build, GetTestFile("4.xml"));

            Assert.False(Differ.AreDifferent(xml1, GetTestFile("4.xml")));
        }
        public void TestBuildTreeStructureCount()
        {
            var binLog       = GetTestFile("1.binlog");
            var binaryLogger = new BinaryLogger();

            binaryLogger.Parameters = binLog;
            var buildSuccessful = MSBuild.BuildProjectFromFile(s_testProject, binaryLogger);

            Assert.True(buildSuccessful);

            var build = Serialization.Read(binLog);

            BuildAnalyzer.AnalyzeBuild(build);

            var projectEvaluations = build.FindChildrenRecursive <ProjectEvaluation>();

            Assert.Equal(3, projectEvaluations.Count);
            Assert.Equal(3, new HashSet <ProjectEvaluation>(projectEvaluations).Count);

            var projectInvocations = build.FindChildrenRecursive <Project>();

            Assert.Equal(5, projectInvocations.Count);
            Assert.Equal(5, new HashSet <Project>(projectInvocations).Count);

            Assert.Equal(7, build.FindChildrenRecursive <Target>().Count);

            Assert.Equal(10, build.FindChildrenRecursive <Task>().Count);

            var items = build.FindChildrenRecursive <Item>().ToArray();
            // This is flaky because sometimes items will be in the tree and sometimes not
            // so the result could be 4 or 8
            //Assert.Equal(4, items.Length);
        }