https://github.com/akkartik/mu/blob/master/090scenario_filesystem_test.mu
1
2
3 scenario read-from-fake-file [
4 local-scope
5 assume-resources [
6 [a] <- [
7 |xyz|
8 ]
9 ]
10 contents:&:source:char <- start-reading resources, [a]
11 1:char/raw <- read contents
12 2:char/raw <- read contents
13 3:char/raw <- read contents
14 4:char/raw <- read contents
15 _, 5:bool/raw <- read contents
16 memory-should-contain [
17 1 <- 120
18 2 <- 121
19 3 <- 122
20 4 <- 10
21 5 <- 1
22 ]
23 ]
24
25 scenario write-to-new-fake-file [
26 local-scope
27 assume-resources [
28 ]
29 sink:&:sink:char, writer:num/routine <- start-writing resources, [a]
30 sink <- write sink, 120/x
31 sink <- write sink, 121/y
32 close sink
33 wait-for-routine writer
34 contents-read-back:text <- slurp resources, [a]
35 10:bool/raw <- equal contents-read-back, [xy]
36 memory-should-contain [
37 10 <- 1
38 ]
39 ]
40
41 scenario write-to-new-fake-file-2 [
42 local-scope
43 assume-resources [
44 [a] <- [
45 |abc|
46 ]
47 ]
48 sink:&:sink:char, writer:num/routine <- start-writing resources, [b]
49 sink <- write sink, 120/x
50 sink <- write sink, 121/y
51 close sink
52 wait-for-routine writer
53 contents-read-back:text <- slurp resources, [b]
54 10:bool/raw <- equal contents-read-back, [xy]
55 memory-should-contain [
56 10 <- 1
57 ]
58 ]
59
60 scenario write-to-fake-file-that-exists [
61 local-scope
62 assume-resources [
63 [a] <- []
64 ]
65 sink:&:sink:char, writer:num/routine <- start-writing resources, [a]
66 sink <- write sink, 120/x
67 sink <- write sink, 121/y
68 close sink
69 wait-for-routine writer
70 contents-read-back:text <- slurp resources, [a]
71 10:bool/raw <- equal contents-read-back, [xy]
72 memory-should-contain [
73 10 <- 1
74 ]
75 ]
76
77 scenario write-to-existing-file-preserves-other-files [
78 local-scope
79 assume-resources [
80 [a] <- []
81 [b] <- [
82 |bcd|
83 ]
84 ]
85 sink:&:sink:char, writer:num/routine <- start-writing resources, [a]
86 sink <- write sink, 120/x
87 sink <- write sink, 121/y
88 close sink
89 wait-for-routine writer
90 contents-read-back:text <- slurp resources, [a]
91 10:bool/raw <- equal contents-read-back, [xy]
92 other-file-contents:text <- slurp resources, [b]
93 11:bool/raw <- equal other-file-contents, [bcd
94 ]
95 memory-should-contain [
96 10 <- 1
97 11 <- 1
98 ]
99 ]