1 | # stream.ysh
|
2 | #
|
3 | # Usage:
|
4 | # source --builtin stream.ysh
|
5 | #
|
6 | # For reading lines, decoding, extracting, splitting
|
7 |
|
8 | # make this file a test server
|
9 | source --builtin osh/byo-server.sh
|
10 |
|
11 | source --builtin args.ysh
|
12 |
|
13 | proc slurp-by (; num_lines) {
|
14 | # TODO: (stdin)
|
15 | for line in (stdin) {
|
16 | echo TODO
|
17 | }
|
18 | }
|
19 |
|
20 | # Note:
|
21 | # - these are all the same algorithm
|
22 | # - also word, block, etc. are all optional
|
23 |
|
24 | proc each-line (...words; template=null; ; block=null) {
|
25 | # TODO:
|
26 | # parse --j8 --max-jobs flag
|
27 |
|
28 | # parse template_str as string
|
29 | # TODO: this is dangerous though ... because you can execute code
|
30 | # I think you need a SAFE version
|
31 |
|
32 | # evaluate template string expression - I guess that allows $(echo hi) and so
|
33 | # forth
|
34 |
|
35 | # evaluate block with _line binding
|
36 | # block: execute in parallel with --max-jobs
|
37 |
|
38 | for line in (stdin) {
|
39 | echo TODO
|
40 | }
|
41 | }
|
42 |
|
43 | proc test-each-line {
|
44 | echo 'TODO: need basic test runner'
|
45 |
|
46 | # ysh-tool test stream.ysh
|
47 | #
|
48 | # Col
|
49 |
|
50 |
|
51 | }
|
52 |
|
53 | proc each-row (; ; block) {
|
54 | echo TODO
|
55 | }
|
56 |
|
57 | proc split-by (; ifs=null; block) {
|
58 | echo TODO
|
59 | }
|
60 |
|
61 | proc if-split-by (; ifs=null; block) {
|
62 | echo TODO
|
63 | }
|
64 |
|
65 | proc chop () {
|
66 | ### alias for if-split-by
|
67 | echo TODO
|
68 | }
|
69 |
|
70 | proc must-match (; pattern; block) {
|
71 | echo TODO
|
72 | }
|
73 |
|
74 | proc if-match (; pattern; block) {
|
75 | echo TODO
|
76 | }
|
77 |
|
78 | # Protocol:
|
79 | #
|
80 | # - The file lists its tests the "actions"
|
81 | # - Then the test harness runs them
|
82 | # - But should it be ENV vars
|
83 | #
|
84 | # - BYO_LIST_TESTS=1
|
85 | # - BYO_RUN_TEST=foo
|
86 | # - $PWD is a CLEAN temp dir, the process doesn't have to do anything
|
87 |
|
88 | # - silent on success, but prints file on output
|
89 | # - OK this makes sense
|
90 | #
|
91 | # The trivial test in Python:
|
92 | #
|
93 | # from test import byo
|
94 | # byo.maybe_main()
|
95 | #
|
96 | # bash library:
|
97 | # source --builtin byo-server.sh
|
98 | #
|
99 | # byo-maybe-main # reads env variables, and then exits
|
100 | #
|
101 | # source --builtin assertions.ysh
|
102 | #
|
103 | # assert-ok 'echo hi'
|
104 | # assert-stdout 'hi' 'echo -n hi'
|
105 | #
|
106 | # "$@"
|
107 | #
|
108 | # Run all tests
|
109 | # util/byo-client.sh run-tests $YSH stdlib/table.ysh
|
110 | # util/byo-client.sh run-tests -f x $YSH stdlib/table.ysh
|
111 |
|
112 | # Clean process
|
113 | # Clean working dir
|
114 |
|
115 | #
|
116 | # Stream Protocol:
|
117 | # #.byo - is this she-dot, that's for a file
|
118 | # Do we need metadata?
|
119 | #
|
120 |
|
121 | # The harness
|
122 | #
|
123 | # It's process based testing.
|
124 | #
|
125 | # Test runner process: bash or OSH (unlike sharness!)
|
126 | # Tested process: any language - bash,
|
127 | #
|
128 | # Key point: you don't have to quote shell code?
|
129 |
|
130 | list-byo-tests() {
|
131 | echo TODO
|
132 | }
|
133 |
|
134 | run-byo-tests() {
|
135 | # source it
|
136 | echo TODO
|
137 | }
|
138 |
|
139 | byo-maybe-run
|