public async Task CheckAndBuildForExecute_SkipUpToDate()
        {
            using (var executionDep = new ProjectWithExecutionDeps("Dependency"))
                using (var executing = new ProjectWithExecutionDeps("Executing"))
                    using (var sln = CreateSimpleSolutionWithItems(executionDep, executing)) {
                        executing.IsBuildUpToDate = true;
                        executing.OverrideExecutionDependencies = new [] { executionDep };
                        executionDep.ItemDependencies.Add(executing);

                        var success = await IdeApp.ProjectOperations.CheckAndBuildForExecute(new [] { executing }, ConfigurationSelector.Default);

                        Assert.IsTrue(success);
                        Assert.IsTrue(executionDep.WasBuilt);

                        // this is kinda hacky but until the tests ignore user prefs when run locally it's necessary
                        Assert.AreEqual(!Runtime.Preferences.SkipBuildingUnmodifiedProjects, executing.WasBuilt);

                        executionDep.WasBuilt = executing.WasBuilt = false;

                        success = await IdeApp.ProjectOperations.CheckAndBuildForExecute(new [] { executing }, ConfigurationSelector.Default);

                        Assert.IsTrue(success);
                        Assert.IsFalse(executionDep.WasBuilt);
                        Assert.IsFalse(executing.WasBuilt);
                    }
        }
        public void GetBuildTargetsForExecution_ProjectIsExecutionTarget()
        {
            using (var project = new ProjectWithExecutionDeps("Executing")) {
                var targets = ProjectOperations.GetBuildTargetsForExecution(project, null);

                Assert.AreEqual(project, targets.Single());
            }
        }
        public void GetBuildTargetsForExecution_Solution_SingleItemRunConfiguration()
        {
            using (var project = new ProjectWithExecutionDeps("Executing"))
                using (var sln = CreateSimpleSolutionWithItems(project)) {
                    var runConfig = new SingleItemSolutionRunConfiguration(project, null);
                    var targets   = ProjectOperations.GetBuildTargetsForExecution(sln, runConfig);

                    Assert.AreEqual(project, targets.Single());
                }
        }
        public void GetBuildTargetsForExecution_Solution_NoStartupItem_NoRunConfigurationPassed()
        {
            using (var project = new ProjectWithExecutionDeps("Executing"))
                using (var sln = CreateSimpleSolutionWithItems(project)) {
                    sln.StartupConfiguration = null;
                    var targets = ProjectOperations.GetBuildTargetsForExecution(sln, null);

                    Assert.IsNull(sln.StartupItem);
                    Assert.AreEqual(sln, targets.Single());
                }
        }
        public async Task CheckAndBuildForExecute_ProjectOnly()
        {
            using (var other = new ProjectWithExecutionDeps("Other"))
                using (var executing = new ProjectWithExecutionDeps("Executing"))
                    using (var sln = CreateSimpleSolutionWithItems(other, executing)) {
                        var success = await IdeApp.ProjectOperations.CheckAndBuildForExecute(new [] { executing }, ConfigurationSelector.Default);

                        Assert.IsTrue(success);
                        Assert.IsFalse(other.WasBuilt);
                        Assert.IsTrue(executing.WasBuilt);
                    }
        }
        public async Task CheckAndBuildForExecute_DependencyButNotSelf()
        {
            using (var executionDep = new ProjectWithExecutionDeps("Dependency"))
                using (var executing = new ProjectWithExecutionDeps("Executing"))
                    using (var sln = CreateSimpleSolutionWithItems(executionDep, executing)) {
                        executing.OverrideExecutionDependencies = new [] { executionDep };

                        var success = await IdeApp.ProjectOperations.CheckAndBuildForExecute(new [] { executing }, ConfigurationSelector.Default);

                        Assert.IsTrue(success);
                        Assert.IsTrue(executionDep.WasBuilt);
                        Assert.False(executing.WasBuilt);
                    }
        }
        public void GetBuildTargetsForExecution_Solution_MultiItemRunConfiguration()
        {
            using (var executionDep = new ProjectWithExecutionDeps("Dependency"))
                using (var executing = new ProjectWithExecutionDeps("Executing"))
                    using (var sln = CreateSimpleSolutionWithItems(executionDep, executing)) {
                        var runConfig = new MultiItemSolutionRunConfiguration();
                        runConfig.Items.Add(new StartupItem(executing, null));
                        runConfig.Items.Add(new StartupItem(executionDep, null));

                        var targets = ProjectOperations.GetBuildTargetsForExecution(sln, runConfig);

                        Assert.AreEqual(2, targets.Length);
                        Assert.AreEqual(executing, targets [0]);
                        Assert.AreEqual(executionDep, targets [1]);
                    }
        }