aboutsummaryrefslogtreecommitdiff
path: root/tests/programs/capture.zc
blob: c178791aae48a4defa5021f6a6e407bd6932dfb5 (plain) (blame)
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
// 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;
}