status | dash | bash | mksh | zsh | osh | |
pass | 2 | 5 | 3 | 5 | 5 | |
ok | 1 | 1 | 1 | 0 | 0 | |
N-I | 4 | 0 | 4 | 0 | 0 | |
BUG | 1 | 2 | 0 | 3 | 0 | |
FAIL | 0 | 0 | 0 | 0 | 3 | |
total | 8 | 8 | 8 | 8 | 8 | |
case | dash | bash | mksh | zsh | osh | description |
0 | pass | pass | pass | pass | pass | String length |
1 | N-I | pass | N-I | pass | pass | Unicode string length (UTF-8) |
details | details | |||||
2 | N-I | pass | N-I | pass | FAIL | Unicode string length (spec/testdata/utf8-chars.txt) |
details | details | details | ||||
3 | N-I | BUG | N-I | BUG | FAIL | String length with incomplete utf-8 |
details | details | details | details | details | ||
4 | N-I | BUG | N-I | BUG | FAIL | String length with invalid utf-8 continuation bytes |
details | details | details | details | details | ||
5 | pass | pass | pass | pass | pass | Length of undefined variable |
6 | ok | pass | pass | pass | pass | Length of undefined variable with nounset |
details | ||||||
7 | BUG | ok | ok | BUG | pass | Length operator can't be followed by test operator |
details | details | details | details |
20 passed, 3 OK, 8 not implemented, 6 BUG, 3 failed, 0 timeouts, 0 cases skipped 3 failed under osh
dash | 1 Unicode string length (UTF-8) stdout: 9stderr: |
mksh | 1 Unicode string length (UTF-8) stdout: 4stderr: |
dash | 2 Unicode string length (spec/testdata/utf8-chars.txt) stdout: 13stderr: |
mksh | 2 Unicode string length (spec/testdata/utf8-chars.txt) stdout: 13stderr: |
osh | 2 Unicode string length (spec/testdata/utf8-chars.txt) [osh stdout] Expected '7\n', got '' [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1821, in _Dispatch status = self._DoShAssignment(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1177, in _DoShAssignment rhs = self.word_ev.EvalRhsWord(pair.rhs) File "/home/uke/oil/osh/word_eval.py", line 2188, in EvalRhsWord return self.EvalWordToString(w) File "/home/uke/oil/osh/word_eval.py", line 2097, in EvalWordToString self._EvalWordPart(p, part_vals, 0) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
dash | 3 String length with incomplete utf-8 stdout: 0 1 2 3 4 5 6 7 8 9 10 11 12 13stderr: |
bash | 3 String length with incomplete utf-8 stdout: 0 1 2 3 3 4 5 6 5 6 7 8 9 7stderr: |
mksh | 3 String length with incomplete utf-8 stdout: 0 1 2 3 4 5 6 7 8 9 10 11 12 13stderr: |
zsh | 3 String length with incomplete utf-8 stdout: 0 1 2 3 3 4 5 6 5 6 7 8 9 7stderr: |
osh | 3 String length with incomplete utf-8 [osh stdout] Expected '0\n1\n2\n-1\n3\n4\n-1\n-1\n5\n6\n-1\n-1\n-1\n7\n[ stdin ]:3: warning: UTF-8 decode: Truncated bytes at offset 2 in string of 3 bytes\n[ stdin ]:3: warning: UTF-8 decode: Truncated bytes at offset 5 in string of 6 bytes\n[ stdin ]:3: warning: UTF-8 decode: Truncated bytes at offset 5 in string of 7 bytes\n[ stdin ]:3: warning: UTF-8 decode: Truncated bytes at offset 9 in string of 10 bytes\n[ stdin ]:3: warning: UTF-8 decode: Truncated bytes at offset 9 in string of 11 bytes\n[ stdin ]:3: warning: UTF-8 decode: Truncated bytes at offset 9 in string of 12 bytes\n' Got '' [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1985, in _Dispatch status = self._DoRedirect(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1758, in _DoRedirect status = self._Execute(node.child) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1971, in _Dispatch status = self._DoForEach(node) File "/home/uke/oil/osh/cmd_eval.py", line 1503, in _DoForEach status = self._Execute(node.body) # last one wins File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1926, in _Dispatch status = self._ExecuteList(node.children) File "/home/uke/oil/osh/cmd_eval.py", line 2161, in _ExecuteList status = self._Execute(child) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1821, in _Dispatch status = self._DoShAssignment(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1177, in _DoShAssignment rhs = self.word_ev.EvalRhsWord(pair.rhs) File "/home/uke/oil/osh/word_eval.py", line 2188, in EvalRhsWord return self.EvalWordToString(w) File "/home/uke/oil/osh/word_eval.py", line 2097, in EvalWordToString self._EvalWordPart(p, part_vals, 0) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
dash | 4 String length with invalid utf-8 continuation bytes stdout: 7 8 9 10 11 12 13 14 15 16 17 18 19 20 20stderr: |
bash | 4 String length with invalid utf-8 continuation bytes stdout: 1 2 3 4 4 5 6 7 6 7 8 9 10 8 8stderr: |
mksh | 4 String length with invalid utf-8 continuation bytes stdout: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 14stderr: |
zsh | 4 String length with invalid utf-8 continuation bytes stdout: 1 2 3 4 4 5 6 7 6 7 8 9 10 8 8stderr: |
osh | 4 String length with invalid utf-8 continuation bytes [osh stdout] Expected '-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n-1\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 0 in string of 1 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 1 in string of 2 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 2 in string of 3 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 2 in string of 4 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 4 in string of 5 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 5 in string of 6 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 5 in string of 7 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 5 in string of 8 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 8 in string of 9 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 9 in string of 10 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 9 in string of 11 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 9 in string of 12 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 9 in string of 13 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 13 in string of 14 bytes\n[ stdin ]:3: warning: UTF-8 decode: Bad encoding at offset 13 in string of 14 bytes\n' Got '' [osh status] Expected 0, got 1 [osh stderr] Found 'Traceback (most recent' stdout: stderr: Traceback (most recent call last): File "/home/uke/oil/bin/oils_for_unix.py", line 202, in <module> sys.exit(main(sys.argv)) File "/home/uke/oil/bin/oils_for_unix.py", line 171, in main return AppBundleMain(argv) File "/home/uke/oil/bin/oils_for_unix.py", line 141, in AppBundleMain return shell.Main('osh', arg_r, environ, login_shell, loader, readline) File "/home/uke/oil/core/shell.py", line 1266, in Main cmd_flags=cmd_eval.IsMainProgram) File "/home/uke/oil/core/main_loop.py", line 336, in Batch was_parsed, status = Batch2(cmd_ev, c_parser, errfmt, cmd_flags=cmd_flags) File "/home/uke/oil/core/main_loop.py", line 401, in Batch2 is_return, is_fatal = cmd_ev.ExecuteAndCatch(node, cmd_flags) File "/home/uke/oil/osh/cmd_eval.py", line 2285, in ExecuteAndCatch status = self._Execute(node) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1985, in _Dispatch status = self._DoRedirect(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1758, in _DoRedirect status = self._Execute(node.child) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1971, in _Dispatch status = self._DoForEach(node) File "/home/uke/oil/osh/cmd_eval.py", line 1503, in _DoForEach status = self._Execute(node.body) # last one wins File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1926, in _Dispatch status = self._ExecuteList(node.children) File "/home/uke/oil/osh/cmd_eval.py", line 2161, in _ExecuteList status = self._Execute(child) File "/home/uke/oil/osh/cmd_eval.py", line 2084, in _Execute status = self._Dispatch(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1821, in _Dispatch status = self._DoShAssignment(node, cmd_st) File "/home/uke/oil/osh/cmd_eval.py", line 1177, in _DoShAssignment rhs = self.word_ev.EvalRhsWord(pair.rhs) File "/home/uke/oil/osh/word_eval.py", line 2188, in EvalRhsWord return self.EvalWordToString(w) File "/home/uke/oil/osh/word_eval.py", line 2097, in EvalWordToString self._EvalWordPart(p, part_vals, 0) File "/home/uke/oil/osh/word_eval.py", line 1875, in _EvalWordPart quoted) # type: part_value_t File "/home/uke/oil/osh/word_eval.py", line 2623, in _EvalCommandSub stdout_str = self.shell_ex.RunCommandSub(cs_part) File "/home/uke/oil/core/executor.py", line 693, in RunCommandSub status, stdout_str, stderr_str = self.CaptureStdout(node) File "/home/uke/oil/core/executor.py", line 621, in CaptureStdout fds = pyos.WaitForInputs([r, r2]) File "/home/uke/oil/core/pyos.py", line 288, in WaitForInputs r, w, exc = select.select(fd, [], [fd]) TypeError: argument must be an int, or have a fileno() method |
dash | 6 Length of undefined variable with nounset stdout: stderr: dash: 2: undef: parameter not set |
dash | 7 Length operator can't be followed by test operator stdout: 0 0 3stderr: |
bash | 7 Length operator can't be followed by test operator stdout: stderr: bash: line 1: ${#x-default}: bad substitution bash: line 4: ${#x-default}: bad substitution bash: line 7: ${#x-default}: bad substitution |
mksh | 7 Length operator can't be followed by test operator stdout: stderr: mksh: <stdin>[1]: ${#x-default}: bad substitution |
zsh | 7 Length operator can't be followed by test operator stdout: 7 0 3stderr: |