Ejemplo n.º 1
0
        public TestResult Run(ezCMake.CMakeResult cmakeResults, ezBuild.BuildResult buildResults)
        {
            _Result.Clean();
            Console.WriteLine("*** Starting Test ***");

            if (!cmakeResults.Success)
            {
                _Result.Error("Test failed: CMake step failed, aborting!");
                return(_Result);
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            int iFailedTargets = 0;
            List <ezCMake.TestTarget> targets = cmakeResults.TestTargets;

            foreach (ezCMake.TestTarget target in targets)
            {
                Console.WriteLine("** Starting Test of target '{0}' **", target.Name);
                // Only test targets which compiled successfully.
                ezBuild.BuildTargetResult buildTargetResult = buildResults.BuildTargetResults.Find(item => item.Name == target.Name);

                TestTargetResult testResult = null;

                if (buildTargetResult == null || !buildTargetResult.Success)
                {
                    // Dummy result for non-testable targets.
                    testResult      = new TestTargetResult();
                    testResult.Name = target.Name;
                    testResult.NeedsHardwareAccess = target.NeedsHardwareAccess;
                    testResult.Experimental        = target.Experimental;
                    testResult.ProcessRes          = null;

                    if (buildTargetResult == null)
                    {
                        testResult.Error("Target '{0}' has no equivalent build target, test aborted!", testResult.Name);
                    }
                    else if (!buildTargetResult.Success)
                    {
                        testResult.Error("Target '{0}' was not build successfully, test aborted!", testResult.Name);
                    }
                }
                else
                {
                    testResult = RunTest(target);
                }

                if (!testResult.Success && !testResult.Experimental)
                {
                    iFailedTargets++;
                }

                _Result.TestTargetResults.Add(testResult);
            }

            sw.Stop();
            _Result.Duration = sw.Elapsed.TotalSeconds;
            _Result.Success  = iFailedTargets == 0;

            if (iFailedTargets > 0)
            {
                _Result.Error("Test failed: {0} targets failed the test!", iFailedTargets);
            }
            return(_Result);
        }
Ejemplo n.º 2
0
        public BuildResult Run(ezCMake.CMakeResult cmakeResults, bool bClean)
        {
            _Result.Clean();

            Console.WriteLine("*** Starting Build ***");

            if (!cmakeResults.Success)
            {
                _Result.Error("Build failed: CMake step failed, aborting!");
                return(_Result);
            }

            List <ezCMake.BuildTarget> targets = cmakeResults.BuildTargets;
            var buildTypes = targets.Select(x => x.BuildType).Distinct();
            Dictionary <string, ezBuildTemplate> buildTemplates = new Dictionary <string, ezBuildTemplate>();

            foreach (string sType in buildTypes)
            {
                buildTemplates[sType] = ezBuildTemplateFactory.Create(_Settings, sType);
                if (buildTemplates[sType] == null)
                {
                    _Result.Error("Build failed: No build template available for the desired configuration ({0}) and build type ({1})!",
                                  _Settings.Configuration, sType);
                    return(_Result);
                }
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            if (bClean)
            {
                Console.WriteLine("** Cleaning Solution **");
                foreach (ezBuildTemplate buildTemplate in buildTemplates.Values)
                {
                    if (!buildTemplate.CleanSolution(_Settings.AbsCMakeWorkspace))
                    {
                        _Result.Error("Build clean: failed.");
                    }
                }
            }

            List <string> successfulTargets = new List <string>();
            int           iFailedTargets    = 0;

            foreach (ezCMake.BuildTarget target in targets)
            {
                Console.WriteLine("** Starting Build of target '{0}' **", target.Name);
                // Only build targets who's dependencies compiled successfully.
                bool bMeetDependencies = !target.Dependencies.Except(successfulTargets).Any();
                if (bMeetDependencies)
                {
                    BuildTargetResult targetResult = buildTemplates[target.BuildType].BuildTarget(target, _Settings.AbsCMakeWorkspace);
                    targetResult.Duration = targetResult.ProcessRes.Duration;

                    if (targetResult.ProcessRes.ExitCode == 0)
                    {
                        successfulTargets.Add(targetResult.Name);
                    }
                    else
                    {
                        if (!target.Experimental)
                        {
                            iFailedTargets++;
                        }
                    }
                    _Result.BuildTargetResults.Add(targetResult);
                }
                else
                {
                    // Dummy result for non-buildable targets.
                    BuildTargetResult targetResult = new BuildTargetResult();
                    targetResult.Name         = target.Name;
                    targetResult.Experimental = target.Experimental;
                    targetResult.ProcessRes   = null;

                    _Result.BuildTargetResults.Add(targetResult);
                }
            }

            sw.Stop();
            _Result.Duration = sw.Elapsed.TotalSeconds;
            _Result.Success  = iFailedTargets == 0;
            if (iFailedTargets > 0)
            {
                _Result.Error("Build failed: {0} targets failed to build!", iFailedTargets);
            }
            return(_Result);
        }