-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathDisposableSpecs.fs
More file actions
86 lines (65 loc) · 2.53 KB
/
Copy pathDisposableSpecs.fs
File metadata and controls
86 lines (65 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
module FSharp.Reactive.Tests.DisposableSpecs
open NUnit.Framework
open FsCheck
open FSharp.Control.Reactive
open FSharp.Control.Reactive.Testing
open System.Reactive.Disposables
[<Test>]
let ``Disposable.compose is immutable`` () =
let disp1 = Disposable.create id
let disp2 = Disposable.create id
let disp3 = Disposable.create id
let groupa = Disposable.compose disp1 disp2
let groupb = Disposable.compose disp1 disp2
let groupc = Disposable.compose groupa disp3
//groupa isn't mutated to groupc
//previously, this test would have failed
Assert.That(groupa, Is.Not.EqualTo(groupc))
[<Test>]
let ``Disposable.compose follows ordering`` () =
let mutlist = new ResizeArray<_>()
let add n = fun () -> mutlist.Add n
let contents () = mutlist |> List.ofSeq
let range = [1..10]
//apply compose recursively over range
let composite =
range
|> List.map add
|> List.map Disposable.create
|> List.reduce (fun a b -> a |> Disposable.compose b)
//dispose the entire range
composite.Dispose()
Assert.That(contents (), Is.EqualTo(range))
[<Test>]
let ``Disposals happen only once`` () =
let mutlist = new ResizeArray<_>()
let add n = fun () -> mutlist.Add n
let contents () = mutlist |> List.ofSeq
let disp1 = Disposable.create (add 1)
let disp2 = Disposable.create (add 2)
let disp3 = Disposable.create (add 3)
let group1 = disp1 |> Disposable.compose disp2
let group2 = group1 |> Disposable.compose disp3
group1.Dispose()
//group1 isn't mutated and disposes in order
Assert.That(contents (), Is.EqualTo([1; 2;]))
group2.Dispose()
//group1 has already been disposed,
//so only disp3.Dispose() should happen
Assert.That(contents (), Is.EqualTo([1; 2; 3]))
()
[<Test>]
let ``CompositeDispose disposes correctly inner disposables`` () =
let mutlist = new ResizeArray<_>()
let add n = fun () -> mutlist.Add n
let contents () = mutlist |> List.ofSeq
let compDisp = new CompositeDisposable()
let disp1 = Disposable.create (add 1)
let disp2 = Disposable.create (add 2)
let disp3 = Disposable.create (add 3)
disp1 |> Disposable.disposeWith compDisp
disp2 |> Disposable.disposeWith compDisp
disp3 |> Disposable.disposeWith compDisp
compDisp.Dispose()
Assert.That(contents (), Is.EqualTo([1; 2; 3;]))
()