private static void InvokeTask(ITargetBuilderBounce bounce, IBounceCommand command, string name, IObsoleteTask task) { using (var targetScope = bounce.TaskScope(task, command, name)) { bounce.Invoke(command, task); targetScope.TaskSucceeded(); } }
public void ShouldCleanDependenciesAndTheirDependenciesAfterBuildIfMarkedSo() { var artefacts = new HashSet <string>(); var d = new FakeArtefactTaskWithDependencies(artefacts, "d"); var a = new FakeArtefactTaskWithDependencies(artefacts, "a"); var b = new FakeArtefactTaskWithDependencies(artefacts, "b", new[] { new TaskDependency(d) }); var cDeps = new[] { new TaskDependency(a), new TaskDependency(b) { CleanAfterBuild = true } }; var c = new FakeArtefactTaskWithDependencies(artefacts, "c", cDeps); ITargetBuilderBounce bounce = GetBounce(); var invoker = new TargetInvoker(bounce); var bounceCommand = new BounceCommandParser().BuildAndClean; invoker.Invoke(bounceCommand, c); invoker.CleanAfterBuild(bounceCommand); Assert.That(artefacts, Has.Member("a")); Assert.That(artefacts, Has.No.Member("b")); Assert.That(b.Invoked); Assert.That(artefacts, Has.Member("c")); Assert.That(artefacts, Has.No.Member("d")); Assert.That(d.Invoked); }
private static void InvokeTask(ITargetBuilderBounce bounce, IBounceCommand command, string name, ITask task) { using (var targetScope = bounce.TaskScope(task, command, name)) { bounce.Invoke(command, task); targetScope.TaskSucceeded(); } }
public void BuildTargets(ITargetBuilderBounce bounce, IEnumerable<Target> targets, IBounceCommand command) { foreach (var target in targets) { if (target.Task != null) { InvokeTask(bounce, command, target.Name, target.Task); } } }
public TargetInvoker(ITargetBuilderBounce bounce) { BuiltTasks = new HashSet <IObsoleteTask>(); Bounce = bounce; Walker = new TaskWalker(); CleanAfterBuildRegister = new CleanAfterBuildRegister(); OnceOnlyCleaner = new OnceOnlyTaskInvoker((task, command) => InvokeAndLog(task, command)); OnceOnlyBuilder = new OnceOnlyTaskInvoker((task, command) => InvokeAndLog(task, command)); OnceOnlyDescriber = new OnceOnlyTaskInvoker((task, command) => InvokeAndLog(task, command)); }
public TargetInvoker(ITargetBuilderBounce bounce) { BuiltTasks = new HashSet<IObsoleteTask>(); Bounce = bounce; Walker = new TaskWalker(); CleanAfterBuildRegister = new CleanAfterBuildRegister(); OnceOnlyCleaner = new OnceOnlyTaskInvoker((task, command) => InvokeAndLog(task, command)); OnceOnlyBuilder = new OnceOnlyTaskInvoker((task, command) => InvokeAndLog(task, command)); OnceOnlyDescriber = new OnceOnlyTaskInvoker((task, command) => InvokeAndLog(task, command)); }
public void BuildTargets(ITargetBuilderBounce bounce, IEnumerable <Target> targets, IBounceCommand command) { foreach (var target in targets) { if (target.Task != null) { InvokeTask(bounce, command, target.Name, target.Task); } } }
public void EachTaskShouldDescribeThemSelvesBeforeBuild() { var dependent = new FakeDescribingTask("one"); var dependency = new FakeDescribingTask("two"); dependent.Dependencies = new[] { new TaskDependency(dependency) }; ITargetBuilderBounce bounce = GetBounce(); var builder = new TargetInvoker(bounce); builder.Invoke(new BounceCommandParser().Build, dependent); Assert.That(bounce.DescriptionOutput.ToString(), Is.EqualTo(@"two;one;")); }
public void ShouldOnlyBuildTasksOnceEvenIfTheyAreDependedUponTwice() { var all = new Mock <IObsoleteTask>(); var dependent1 = new Mock <IObsoleteTask>(); var dependent2 = new Mock <IObsoleteTask>(); var twiceADependency = new Mock <IObsoleteTask>(); ITargetBuilderBounce bounce = GetBounce(); all.Setup(d => d.Dependencies).Returns(new[] { new TaskDependency(dependent1.Object), new TaskDependency(dependent2.Object) }); dependent1.Setup(d => d.Dependencies).Returns(new[] { new TaskDependency(twiceADependency.Object) }); dependent2.Setup(d => d.Dependencies).Returns(new[] { new TaskDependency(twiceADependency.Object) }); var invoker = new TargetInvoker(bounce); var bounceCommand = new BounceCommandParser().Build; invoker.Invoke(bounceCommand, all.Object); twiceADependency.Verify(t => t.Invoke(bounceCommand, bounce), Times.Once()); }
public void ShouldBuildDependenciesBeforeDependencts() { var dependent = new Mock <IObsoleteTask>(); var dependency = new Mock <IObsoleteTask>(); ITargetBuilderBounce bounce = GetBounce(); var buildActions = new StringWriter(); dependent.Setup(d => d.Dependencies).Returns(new[] { new TaskDependency(dependency.Object) }); var bounceCommand = new BounceCommandParser().Build; dependent.Setup(d => d.Invoke(bounceCommand, bounce)).Callback(() => buildActions.Write("build dependent;")); dependency.Setup(d => d.Invoke(bounceCommand, bounce)).Callback(() => buildActions.Write("build dependency;")); var builder = new TargetInvoker(bounce); builder.Invoke(bounceCommand, dependent.Object); Assert.That(buildActions.ToString(), Is.EqualTo(@"build dependency;build dependent;")); }
public void ShouldNotCleanDepsIfMarkedCleanAfterBuildButAlsoDependedUponElsewhere() { var artefacts = new HashSet <string>(); var b = new FakeArtefactTaskWithDependencies(artefacts, "b"); var cDeps = new[] { new TaskDependency(b), new TaskDependency(b) { CleanAfterBuild = true } }; var c = new FakeArtefactTaskWithDependencies(artefacts, "c", cDeps); ITargetBuilderBounce bounce = GetBounce(); var invoker = new TargetInvoker(bounce); invoker.Invoke(new BounceCommandParser().Build, c); Assert.That(artefacts, Has.Member("b")); Assert.That(artefacts, Has.Member("c")); }