v2 / vlib / builtin / input_rune_iterator_test.v
52 lines · 51 sloc · 1.26 KB · ed5fc1638abe439f5b4d5d31e0c91a81af065b94
Raw
1// vtest build: linux
2// vtest retry: 2
3import os
4import time
5
6fn test_input_rune_iterator_with_unicode_input() {
7 mut p := os.new_process(@VEXE)
8 p.set_args(['-e', 'for i, r in input_rune_iterator() { println("> i: \${i:04} | r: `\${r}`") }'])
9 p.set_redirect_stdio()
10 p.run()
11 spawn fn [mut p] () {
12 time.sleep(10 * time.millisecond)
13 dump(p.pid)
14 p.stdin_write('Проба Abc 你好 🌍 123')
15 time.sleep(10 * time.millisecond)
16 p.stdin_write('\0x00') // 0 should break the input stream
17 time.sleep(10 * time.millisecond)
18 eprintln('>>> done')
19 }()
20 mut olines := []string{}
21 for p.is_alive() {
22 if oline := p.pipe_read(.stdout) {
23 olines << oline
24 }
25 time.sleep(1 * time.millisecond)
26 }
27 p.close()
28 p.wait()
29 assert p.code == 0
30 eprintln('done')
31 solines := olines.join('').trim_space().replace('\r', '')
32 eprintln('solines.len: ${solines.len} | solines: ${solines}')
33 assert solines.len > 100
34 assert solines == '> i: 0000 | r: `П`
35> i: 0001 | r: `р`
36> i: 0002 | r: `о`
37> i: 0003 | r: `б`
38> i: 0004 | r: `а`
39> i: 0005 | r: ` `
40> i: 0006 | r: `A`
41> i: 0007 | r: `b`
42> i: 0008 | r: `c`
43> i: 0009 | r: ` `
44> i: 0010 | r: `你`
45> i: 0011 | r: `好`
46> i: 0012 | r: ` `
47> i: 0013 | r: `🌍`
48> i: 0014 | r: ` `
49> i: 0015 | r: `1`
50> i: 0016 | r: `2`
51> i: 0017 | r: `3`'
52}
53