public void TestExecute_name_clash_throws() { using (var tmpDir = new TmpDir()) { var fooTask1 = MockBuildTasks.NoOp("foo").WithSignature("1").Object; var fooTask2 = MockBuildTasks.NoOp("foo").WithSignature("2").Object; var exception = Assert.Throws <Exception>(() => Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), fooTask1, fooTask2)); Assert.AreEqual("Detected multiple tasks with the name 'foo'. Tasks must have unique names.", exception.Message); } }
public void TestExecute_dependency_results_reference_build_tasks() { using (var tmpDir = new TmpDir()) { var fooTask = MockBuildTasks.NoOp("foo").Object; var barTask = MockBuildTasks.NoOp("bar", fooTask) .WithExecuteAction((sourceDir, outputDir, dependencyResults) => { Assert.AreEqual(new [] { fooTask }, dependencyResults.Select(result => result.BuildTask)); }).Object; Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), barTask); } }
public void TestExecute_detects_cycles() { using (var tmpDir = new TmpDir()) { var fooTask1 = MockBuildTasks.NoOp("foo1").WithSignature("1"); var fooTask2 = MockBuildTasks.NoOp("foo2").WithSignature("2").WithDependencies(new [] { fooTask1.Object }); fooTask1.WithDependencies(new[] { fooTask2.Object }); var exception = Assert.Throws <Exception>(() => Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), fooTask1.Object, fooTask2.Object)); Assert.AreEqual("Detected a dependency cycle: 'foo1 depends on foo2 depends on foo1'.", exception.Message); } }
public void TestExecute_throws_when_two_tasks_have_the_same_signature() { using (var tmpDir = new TmpDir()) { var task1Mock = MockBuildTasks.NoOp("task1").WithSignature("foo"); var task2Mock = MockBuildTasks.NoOp("task2", task1Mock.Object).WithSignature("foo"); var exception = Assert.Throws <BuildTaskClashException>(() => { Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), task2Mock.Object); }); Assert.That(exception.Message, Contains.Substring("Tasks 'task1' and 'task2' are clashing. " + "They have the same signature 'foo'.")); } }
public void TestExecute_cleans_unfinished_directories_before_starting_the_build() { using (var tmpDir = new TmpDir()) { var partialTask = MockBuildTasks.NoOp("task1") .WithExecuteAction((sourceDir, outputDir, deps) => { File.WriteAllText(Path.Combine(outputDir, "foo"), "42"); throw new Exception("Test exception"); }); try { Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), partialTask.Object); } catch (Exception) { // ignored } var fullTask = MockBuildTasks.NoOp("task1") .WithExecuteAction((sourceDir, outputDir, deps) => File.WriteAllText(Path.Combine(outputDir, "bar"), "9001")); Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), fullTask.Object); FileAssert.AreEqual(tmpDir.CreateFile("9001"), tmpDir.CreatePath("out", "bar")); FileAssert.DoesNotExist(tmpDir.CreatePath("out", "foo")); } }