File 0156-escript_SUITE-permit-order-of-Actual-lines-to-differ.patch of Package erlang
From 71acb9a50f1455109d0aa79faca3aa68da7ca6f2 Mon Sep 17 00:00:00 2001
From: Mikael Pettersson <mikpelinux@gmail.com>
Date: Sun, 20 Sep 2020 15:32:01 +0200
Subject: [PATCH 6/9] escript_SUITE: permit order of Actual lines to differ
from Expected
---
lib/stdlib/test/escript_SUITE.erl | 27 ++++++++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/lib/stdlib/test/escript_SUITE.erl b/lib/stdlib/test/escript_SUITE.erl
index c9758009a8..251d449d94 100644
--- a/lib/stdlib/test/escript_SUITE.erl
+++ b/lib/stdlib/test/escript_SUITE.erl
@@ -986,16 +986,37 @@ do_run(Dir, Cmd, Expected0) ->
Res = get_data(Port, []),
receive
{Port,{exit_status,ExitCode}} ->
- case iolist_to_binary([Res,"ExitCode:"++integer_to_list(ExitCode)]) of
- Expected ->
+ Actual = iolist_to_binary([Res,"ExitCode:"++integer_to_list(ExitCode)]),
+ case matches(Expected, Actual) of
+ true ->
ok;
- Actual ->
+ false ->
io:format("Expected: ~p\n", [Expected]),
io:format("Actual: ~p\n", [Actual]),
ct:fail(failed)
end
end.
+%% Check if Expected and Actual contain the same lines.
+%% The lines may occur in different order.
+matches(Expected, Actual) ->
+ ExpectedLines = string:split(Expected, "\n", all),
+ ActualLines = string:split(Actual, "\n", all),
+ matches_1(ExpectedLines, ActualLines).
+
+matches_1([], []) -> true;
+matches_1([Line | Expected], Actual0) ->
+ case delete_first(Line, Actual0) of
+ false -> false;
+ Actual -> matches_1(Expected, Actual)
+ end.
+
+delete_first(X, L) -> delete_first(X, L, []).
+
+delete_first(_X, [], _Acc) -> false;
+delete_first(X, [X | Tail], Acc) -> lists:reverse(Acc, Tail);
+delete_first(X, [Y | Tail], Acc) -> delete_first(X, Tail, [Y | Acc]).
+
get_data(Port, SoFar) ->
receive
{Port,{data,Bytes}} ->
--
2.26.2