public void TestExecute_places_output_into_OutputDir() { using (var tmpDir = new TmpDir()) { var fooTask = MockBuildTasks.GenerateFile("createFoo", "foo", "42").Object; Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), fooTask); FileAssert.AreEqual(tmpDir.CreateFile("42"), tmpDir.CreatePath("out", "foo")); } }
public void TestExecute_executes_the_same_tasks_once() { using (var tmpDir = new TmpDir()) { var fooTaskMock = MockBuildTasks.GenerateFile("createFoo", "foo", "42"); Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), fooTaskMock.Object); Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), fooTaskMock.Object); VerifyExecutedOnce(fooTaskMock); } }
public void TestExecute_same_dependencies_are_executed_once() { using (var tmpDir = new TmpDir()) { var fooTaskMock = MockBuildTasks.GenerateFile("createFoo", "foo", "42"); var barTaskMock = MockBuildTasks.GenerateFile("createBar", "bar", "9001", fooTaskMock.Object, fooTaskMock.Object); Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), barTaskMock.Object); VerifyExecutedOnce(fooTaskMock); } }
public void TestExecute_executes_dependencies() { using (var tmpDir = new TmpDir()) { var fooTask = MockBuildTasks.GenerateFile("createFoo", "foo", "42").Object; var barTask = MockBuildTasks.GenerateFile("createBar", "bar", "9001", fooTask).Object; Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), barTask); FileAssert.AreEqual(tmpDir.CreateFile("42"), tmpDir.CreatePath("out", "foo")); FileAssert.AreEqual(tmpDir.CreateFile("9001"), tmpDir.CreatePath("out", "bar")); } }
public void TestExecute_rebuilds_task_when_signature_of_dependency_changes() { using (var tmpDir = new TmpDir()) { var fooTaskMock = MockBuildTasks.GenerateFile("createFoo", "foo", "42"); var barTaskMock = MockBuildTasks.GenerateFile("createBar", "bar", "9001", fooTaskMock.Object); Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), barTaskMock.Object); var changedFooTaskMock = MockBuildTasks.GenerateFile("createFoo", "foo", "changed"); var barTaskMock2 = MockBuildTasks.GenerateFile("createBar", "bar", "9001", changedFooTaskMock.Object); Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), barTaskMock2.Object); VerifyExecutedOnce(barTaskMock2); } }
public void TestExecute_throws_when_two_tasks_produce_file_with_same_name() { using (var tmpDir = new TmpDir()) { var foo1TaskMock = MockBuildTasks.GenerateFile("createFoo1", "foo", "1"); var foo2TaskMock = MockBuildTasks.GenerateFile("createFoo2", "foo", "2", foo1TaskMock.Object); var exception = Assert.Throws <Exception>(() => { Builder.Execute(tmpDir.Path, tmpDir.CreateDir("out"), tmpDir.CreateDir(".bud"), foo2TaskMock.Object); }); Assert.That(exception.Message, Contains.Substring("Tasks 'createFoo1' and 'createFoo2' are clashing. " + "They produced the same file 'foo'.")); } }
public void TestExecute_does_not_have_race_conditions() { for (int i = 0; i < 5; i++) { using (var tmpDir = new TmpDir()) { var sourceDir = tmpDir.CreateDir("src"); var outputDir = tmpDir.CreatePath("out"); var metaDir = tmpDir.CreatePath(".bud"); var generatedFiles = Enumerable.Range(0, 10).Select(idx => $"file_{idx}").ToList(); var fileGenerators = generatedFiles.Select(file => MockBuildTasks.GenerateFile(file, file, file).Object); Builder.Execute(sourceDir, outputDir, metaDir, fileGenerators); foreach (var generatedFile in generatedFiles) { FileAssert.AreEqual(tmpDir.CreateFile(generatedFile), Path.Combine(outputDir, generatedFile)); } } } }