aboutsummaryrefslogtreecommitdiff
path: root/tests/programs/capture.zc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/programs/capture.zc')
-rw-r--r--tests/programs/capture.zc31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/programs/capture.zc b/tests/programs/capture.zc
new file mode 100644
index 0000000..c178791
--- /dev/null
+++ b/tests/programs/capture.zc
@@ -0,0 +1,31 @@
+// capture.start() sends everything the program writes into a string instead of
+// the terminal, and buf.end() stops it and terminates the string. nothing may
+// be printed during a capture, or it lands in the buffer too.
+include "src/lib/std.zc";
+
+fn main() {
+ let buf = capture.start();
+ put_s("hello world!");
+ put_n(42);
+ put_c(10);
+ buf.end(); // stops the capture and terminates the string
+
+ // the capture is off again, so these go to the terminal
+ put_n(outmode); put_c(10); // 0
+ put_n(outbuf == 0); put_c(10); // 1, the buffer is handed over
+ put_n(len_w(buf)); put_c(10); // 15
+ put_s(buf); // hello world!42
+
+ // a second capture does not disturb the first, and both read back
+ let two = capture.start();
+ put_s("second");
+ two.end();
+ put_n(eq_w(buf, "hello world!42\n")); put_c(10); // 1
+ put_n(eq_w(two, "second")); put_c(10); // 1
+
+ // capture_stdin returns an empty string, so an unused capture is empty
+ let three = capture.start();
+ three.end();
+ put_n(len_w(three)); put_c(10); // 0
+ return 0;
+} \ No newline at end of file