public void Should_Execute_Parallel_Tasks_In_Parallel() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateParallelEngine(); engine.RegisterTask("A").Does(() => result.Add("A")); var semaphore = new SemaphoreSlim(1); engine.RegisterTask("B").IsDependentOn("A").Does(() => { result.Add("B"); semaphore.Wait(); }); engine.RegisterTask("C").IsDependentOn("A").Does(() => { result.Add("C"); semaphore.Release(); }); engine.RegisterTask("D").IsDependentOn("B").IsDependentOn("C").Does(() => result.Add("D")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "D"); // Then Assert.Equal(4, result.Count); Assert.Equal("A", result[0]); Assert.True(result[1] == "B" || result[2] == "B"); Assert.True(result[1] == "C" || result[2] == "C"); Assert.Equal("D", result[3]); }
public void Should_Throw_If_Target_Is_Null() { // Given var fixture = new CakeEngineFixture(); var engine = fixture.CreateParallelEngine(); // When var result = Record.Exception(() => engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, null)); // Then Assert.IsArgumentNullException(result, "target"); }
public void Should_Throw_If_Log_Is_Null() { // Given var fixture = new CakeEngineFixture { Log = null }; // When var result = Record.Exception(() => fixture.CreateParallelEngine()); // Then Assert.IsArgumentNullException(result, "log"); }
public void Should_Execute_Sequential_Tasks_In_Order() { // Given var result = new List <string>(); var fixture = new CakeEngineFixture(); var engine = fixture.CreateParallelEngine(); engine.RegisterTask("A").Does(() => result.Add("A")); engine.RegisterTask("B").IsDependentOn("A").Does(() => result.Add("B")); engine.RegisterTask("C").IsDependentOn("B").Does(() => result.Add("C")); // When engine.RunTarget(fixture.Context, fixture.ExecutionStrategy, "C"); // Then Assert.Equal(3, result.Count); Assert.Equal("A", result[0]); Assert.Equal("B", result[1]); Assert.Equal("C", result[2]); }