Skip to content

Commit 4de120d

Browse files
committed
Add more null-check tests, null-source should raise immediately, not after MoveNext
1 parent 347a599 commit 4de120d

File tree

8 files changed

+39
-11
lines changed

8 files changed

+39
-11
lines changed

src/FSharp.Control.TaskSeq.Test/Nunit.Extensions.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,6 @@ module ExtraCustomMatchers =
169169
$"Throws %s{ex.Name} (Below, XUnit does not show actual value properly)",
170170
(fun fn -> (testForThrowing (fn :?> (unit -> Task))).Result)
171171
)
172+
173+
let inline assertThrows ty (f: unit -> 'U) = f >> ignore |> should throw ty
174+
let inline assertNullArg f = assertThrows typeof<ArgumentNullException> f

src/FSharp.Control.TaskSeq.Test/TaskSeq.Append.Tests.fs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,17 @@ let validateSequence ts =
2222
|> Task.map (String.concat "")
2323
|> Task.map (should equal "1234567891012345678910")
2424

25+
2526
module EmptySeq =
27+
[<Fact>]
2628
let ``Null source is invalid`` () =
27-
let test1 () = TaskSeq.empty |> TaskSeq.append null |> TaskSeq.toList
28-
let test2 () = null |> TaskSeq.append TaskSeq.empty |> TaskSeq.toList
29-
let test3 () = null |> TaskSeq.append null |> TaskSeq.toList
30-
test1 |> should throw typeof<ArgumentNullException>
31-
test2 |> should throw typeof<ArgumentNullException>
32-
test3 |> should throw typeof<ArgumentNullException>
29+
assertNullArg
30+
<| fun () -> TaskSeq.empty |> TaskSeq.append null
31+
32+
assertNullArg
33+
<| fun () -> null |> TaskSeq.append TaskSeq.empty
34+
35+
assertNullArg <| fun () -> null |> TaskSeq.append null
3336

3437
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
3538
let ``TaskSeq-append both args empty`` variant =

src/FSharp.Control.TaskSeq.Test/TaskSeq.Cast.Tests.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ let validateSequence ts =
2323
|> Task.map (should equal "12345678910")
2424

2525
module EmptySeq =
26+
[<Fact>]
27+
let ``Null source is invalid`` () = assertNullArg <| fun () -> TaskSeq.box null
28+
2629
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
2730
let ``TaskSeq-box empty`` variant = Gen.getEmptyVariant variant |> TaskSeq.box |> verifyEmpty
2831

src/FSharp.Control.TaskSeq.Test/TaskSeq.Choose.Tests.fs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,19 @@ open FsToolkit.ErrorHandling
1010
open FSharp.Control
1111

1212
//
13-
// TaskSeq.map
14-
// TaskSeq.mapi
15-
// TaskSeq.mapAsync
16-
// TaskSeq.mapiAsync
13+
// TaskSeq.choose
14+
// TaskSeq.chooseAsync
1715
//
1816

1917
module EmptySeq =
18+
[<Fact>]
19+
let ``Null source is invalid`` () =
20+
assertNullArg
21+
<| fun () -> TaskSeq.choose (fun _ -> None) null
22+
23+
assertNullArg
24+
<| fun () -> TaskSeq.chooseAsync (fun _ -> Task.fromResult None) null
25+
2026
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
2127
let ``TaskSeq-choose`` variant = task {
2228
let! empty =

src/FSharp.Control.TaskSeq.Test/TaskSeq.Collect.Tests.fs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@ open FSharp.Control
1212
//
1313

1414
module EmptySeq =
15+
[<Fact>]
16+
let ``Null source is invalid`` () =
17+
assertNullArg
18+
<| fun () -> TaskSeq.collect (fun _ -> TaskSeq.empty) null
19+
20+
assertNullArg
21+
<| fun () -> TaskSeq.collectAsync (fun _ -> Task.fromResult TaskSeq.empty) null
1522

1623
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
1724
let ``TaskSeq-collect collecting emptiness`` variant =

src/FSharp.Control.TaskSeq.Test/TaskSeq.Concat.Tests.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ let validateSequence ts =
2121
|> Task.map (should equal "123456789101234567891012345678910")
2222

2323
module EmptySeq =
24+
[<Fact>]
25+
let ``Null source is invalid`` () = assertNullArg <| fun () -> TaskSeq.concat null
26+
2427
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
2528
let ``TaskSeq-concat with empty sequences`` variant =
2629
taskSeq {

src/FSharp.Control.TaskSeq.Test/TaskSeq.Contains.Tests.fs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ open FSharp.Control
1111
//
1212

1313
module EmptySeq =
14+
[<Fact>]
15+
let ``Null source is invalid`` () = assertNullArg <| fun () -> TaskSeq.contains 42 null
16+
1417
[<Theory; ClassData(typeof<TestEmptyVariants>)>]
1518
let ``TaskSeq-contains returns false`` variant =
1619
Gen.getEmptyVariant variant

src/FSharp.Control.TaskSeq.Test/TaskSeq.Using.Tests.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module TaskSeq.Test.Using
1+
module TaskSeq.Tests.Using
22

33
open System
44
open System.Threading.Tasks

0 commit comments

Comments
 (0)