summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRickard Green <rickard@erlang.org>2023-05-05 18:45:19 +0200
committerRickard Green <rickard@erlang.org>2023-05-09 17:08:55 +0200
commit0fa5e8b1f7dcd96fc1fcce271d475b36dc8984b6 (patch)
tree4c1f78a9881a35c8dcaf39d76ea7fa5a53873065
parent338958e904bd3a7803a277b5e7af67985999b1f2 (diff)
downloaderlang-0fa5e8b1f7dcd96fc1fcce271d475b36dc8984b6.tar.gz
Testcase io_proto_SUITE:raw_stdout
-rw-r--r--lib/stdlib/test/io_proto_SUITE.erl39
1 files changed, 37 insertions, 2 deletions
diff --git a/lib/stdlib/test/io_proto_SUITE.erl b/lib/stdlib/test/io_proto_SUITE.erl
index bc96992ce2..81579c05c2 100644
--- a/lib/stdlib/test/io_proto_SUITE.erl
+++ b/lib/stdlib/test/io_proto_SUITE.erl
@@ -25,7 +25,7 @@
-export([setopts_getopts/1,unicode_options/1,unicode_options_gen/1,
binary_options/1, read_modes_gl/1,
read_modes_ogl/1, broken_unicode/1,eof_on_pipe/1,
- unicode_prompt/1, shell_slogan/1]).
+ unicode_prompt/1, shell_slogan/1, raw_stdout/1]).
-export([io_server_proxy/1,start_io_server_proxy/0, proxy_getall/1,
@@ -35,6 +35,8 @@
-export([uprompt/1, slogan/0, session_slogan/0]).
+-export([write_raw_to_stdout/0]).
+
%%-define(debug, true).
-ifdef(debug).
@@ -51,7 +53,7 @@ all() ->
[setopts_getopts, unicode_options, unicode_options_gen,
binary_options, read_modes_gl, read_modes_ogl,
broken_unicode, eof_on_pipe, unicode_prompt,
- shell_slogan].
+ shell_slogan, raw_stdout].
groups() ->
[].
@@ -1091,6 +1093,39 @@ eof_on_pipe(Config) when is_list(Config) ->
{skipped,"Only on linux"}
end.
+raw_stdout(Config) when is_list(Config) ->
+ Cmd = lists:append(
+ [ct:get_progname(),
+ " -noshell -noinput",
+ " -pa ", filename:dirname(code:which(?MODULE)),
+ " -s ", atom_to_list(?MODULE), " write_raw_to_stdout"]),
+ ct:log("~p~n", [Cmd]),
+ Port = open_port({spawn, Cmd}, [stream, eof]),
+ Expected = lists:seq(0,255),
+ Expected = get_all_port_data(Port, []),
+ Port ! {self(), close},
+ ok.
+
+get_all_port_data(Port, Acc) ->
+ receive
+ {Port, {data, Data}} ->
+ get_all_port_data(Port, [Acc|Data]);
+ {Port, eof} ->
+ lists:flatten(Acc)
+ end.
+
+write_raw_to_stdout() ->
+ try
+ ok = io:setopts(standard_io, [{encoding, latin1}]),
+ ok = file:write(standard_io, lists:seq(0,255)),
+ halt(0)
+ catch
+ Class:Reason:StackTrace ->
+ io:format(standard_error, "~p~p~p", [Class, Reason, StackTrace]),
+ halt(17)
+ end.
+
+
%%
%% Test I/O-server
%%