Skip to content

Commit e6d5d6e

Browse files
committed
Add Tap* extensions to Maybe
1 parent c7522ab commit e6d5d6e

28 files changed

+845
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class TapNoValueTests_Task_Left : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task TapNoValue_Task_Left_executes_action_when_no_value()
11+
{
12+
string property = null;
13+
14+
Maybe<T> maybe = null;
15+
16+
var returnedMaybe = await maybe.AsTask().TapNoValue(() => property = "Some value");
17+
18+
property.Should().Be("Some value");
19+
returnedMaybe.Should().BeSameAs(maybe);
20+
}
21+
}
22+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class TapNoValueTests_Task_Right : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task TapNoValue_Task_Right_executes_action_when_no_value()
11+
{
12+
string property = null;
13+
14+
Maybe<T> maybe = null;
15+
16+
var returnedMaybe = await maybe.TapNoValue(() =>
17+
{
18+
property = "Some value";
19+
return Task.CompletedTask;
20+
});
21+
22+
property.Should().Be("Some value");
23+
returnedMaybe.Should().BeSameAs(maybe);
24+
}
25+
}
26+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class TapNoValueTests_Task : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task TapNoValue_Task_executes_action_when_no_value()
11+
{
12+
string property = null;
13+
14+
Maybe<T> maybe = null;
15+
16+
var returnedMaybe = await maybe
17+
.AsTask()
18+
.TapNoValue(() =>
19+
{
20+
property = "Some value";
21+
return Task.CompletedTask;
22+
});
23+
24+
property.Should().Be("Some value");
25+
returnedMaybe.Should().BeSameAs(maybe);
26+
}
27+
}
28+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Threading.Tasks;
2+
using CSharpFunctionalExtensions.ValueTasks;
3+
using FluentAssertions;
4+
using Xunit;
5+
6+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
7+
{
8+
public class TapNoValueTests_ValueTask_Left : MaybeTestBase
9+
{
10+
[Fact]
11+
public async Task TapNoValue_ValueTask_Left_executes_action_when_no_value()
12+
{
13+
string property = null;
14+
15+
Maybe<T> maybe = null;
16+
17+
var returnedMaybe = await maybe.AsValueTask().TapNoValue(() => property = "Some value");
18+
19+
property.Should().Be("Some value");
20+
returnedMaybe.Should().BeSameAs(maybe);
21+
}
22+
}
23+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Threading.Tasks;
2+
using CSharpFunctionalExtensions.ValueTasks;
3+
using FluentAssertions;
4+
using Xunit;
5+
6+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
7+
{
8+
public class TapNoValueTests_ValueTask_Right : MaybeTestBase
9+
{
10+
[Fact]
11+
public async Task TapNoValue_ValueTask_Right_executes_action_when_no_value()
12+
{
13+
string property = null;
14+
15+
Maybe<T> maybe = null;
16+
17+
var returnedMaybe = await maybe.TapNoValue(() =>
18+
{
19+
property = "Some value";
20+
return ValueTask.CompletedTask;
21+
});
22+
23+
property.Should().Be("Some value");
24+
returnedMaybe.Should().BeSameAs(maybe);
25+
}
26+
}
27+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Threading.Tasks;
2+
using CSharpFunctionalExtensions.ValueTasks;
3+
using FluentAssertions;
4+
using Xunit;
5+
6+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
7+
{
8+
public class TapNoValueTests_ValueTask : MaybeTestBase
9+
{
10+
[Fact]
11+
public async Task TapNoValue_ValueTask_executes_action_when_no_value()
12+
{
13+
string property = null;
14+
15+
Maybe<T> maybe = null;
16+
17+
var returnedMaybe = await maybe
18+
.AsValueTask()
19+
.TapNoValue(() =>
20+
{
21+
property = "Some value";
22+
return ValueTask.CompletedTask;
23+
});
24+
25+
property.Should().Be("Some value");
26+
returnedMaybe.Should().BeSameAs(maybe);
27+
}
28+
}
29+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using FluentAssertions;
2+
using Xunit;
3+
4+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
5+
{
6+
public class TapNoValueTests : MaybeTestBase
7+
{
8+
[Fact]
9+
public void TapNoValue_executes_action_when_no_value()
10+
{
11+
string property = null;
12+
13+
Maybe<T> maybe = null;
14+
15+
var returnedMaybe = maybe.TapNoValue(() => property = "Some value");
16+
17+
property.Should().Be("Some value");
18+
returnedMaybe.Should().BeSameAs(maybe);
19+
}
20+
}
21+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class TapTests_Task_Left : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task Tap_Task_Lef_does_not_execute_action_if_no_value()
11+
{
12+
Maybe<T> maybe = null;
13+
14+
var returnedMaybe = await maybe.AsTask().Tap(value => maybe = T.Value);
15+
16+
maybe.HasNoValue.Should().BeTrue();
17+
returnedMaybe.Should().BeSameAs(maybe);
18+
}
19+
20+
[Fact]
21+
public async Task Tap_Task_Lef_executes_action_if_value()
22+
{
23+
Maybe<T> maybe = T.Value;
24+
25+
var returnedMaybe = await maybe.AsTask().Tap(value => value.Should().Be(T.Value));
26+
27+
maybe.Value.Should().Be(T.Value);
28+
returnedMaybe.Should().BeSameAs(maybe);
29+
}
30+
}
31+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class TapTests_Task_Right : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task Tap_Task_Right_does_not_execute_action_if_no_value()
11+
{
12+
Maybe<T> maybe = null;
13+
14+
var returnedMaybe = await maybe.Tap(value =>
15+
{
16+
maybe = T.Value;
17+
return Task.CompletedTask;
18+
});
19+
20+
maybe.HasNoValue.Should().BeTrue();
21+
returnedMaybe.Should().BeSameAs(maybe);
22+
}
23+
24+
[Fact]
25+
public async Task Tap_Task_Right_executes_action_if_value()
26+
{
27+
Maybe<T> maybe = T.Value;
28+
29+
30+
var returnedMaybe = await maybe.Tap(value =>
31+
{
32+
value.Should().Be(T.Value);
33+
return Task.CompletedTask;
34+
});
35+
36+
maybe.Value.Should().Be(T.Value);
37+
returnedMaybe.Should().BeSameAs(maybe);
38+
}
39+
}
40+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System.Threading.Tasks;
2+
using FluentAssertions;
3+
using Xunit;
4+
5+
namespace CSharpFunctionalExtensions.Tests.MaybeTests.Extensions
6+
{
7+
public class TapTests_Task : MaybeTestBase
8+
{
9+
[Fact]
10+
public async Task Tap_Task_does_not_execute_action_if_no_value()
11+
{
12+
Maybe<T> maybe = null;
13+
14+
var returnedMaybe = await maybe
15+
.AsTask()
16+
.Tap(value =>
17+
{
18+
maybe = T.Value;
19+
return Task.CompletedTask;
20+
});
21+
22+
maybe.HasNoValue.Should().BeTrue();
23+
returnedMaybe.Should().BeSameAs(maybe);
24+
}
25+
26+
[Fact]
27+
public async Task Tap_Task_executes_action_if_value()
28+
{
29+
Maybe<T> maybe = T.Value;
30+
31+
var returnedMaybe = await maybe
32+
.AsTask()
33+
.Tap(value =>
34+
{
35+
value.Should().Be(T.Value);
36+
return Task.CompletedTask;
37+
});
38+
39+
maybe.Value.Should().Be(T.Value);
40+
returnedMaybe.Should().BeSameAs(maybe);
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)