Fix log_call test to not give random outcomes.

We shouldn't play around with the carriage return char,
seems like using that together with readline gives undefined results (wrt ordering).
This commit is contained in:
Anders Ingemann 2014-05-04 15:01:45 +02:00
parent f1994fab1e
commit 6302d5d962
2 changed files with 14 additions and 12 deletions

View file

@ -6,9 +6,9 @@
# #
# (cat <<EOF # (cat <<EOF
# 2 1 one\\\\n # 2 1 one\\\\n
# 1 2 two\\\\n # 1 1 two\\\\n
# 1 5 four # 1 3 four
# 1 6 \\\\rNo, three..\\\\n # 1 1 \\\\rNo, three..\\\\n
# EOF # EOF
# ) | ./subprocess.sh # ) | ./subprocess.sh
# #
@ -24,6 +24,7 @@ while read line; do
rest=${line#* *} rest=${line#* *}
delay=${rest%% *} delay=${rest%% *}
message=${rest#* } message=${rest#* }
eval "sleep $delay; printf \"$message\" >&$stream" & sleep $delay
printf "$message" >&$stream
done done
wait wait

View file

@ -21,19 +21,20 @@ def setup_logger():
def test_log_call_output_order(): def test_log_call_output_order():
logged = setup_logger() logged = setup_logger()
fixture = """ fixture = """
2 0.1 one\\\\n 2 0.00 one\\\\n
1 0.2 two\\\\n 1 0.02 two\\\\n
1 0.5 four 1 0.02 four\\\\n
2 0.6 \\\\rNo, three.. 2 0.02 No, three..\\\\n
1 0.8 \\\\rthree 1 0.02 three\\\\n
""" """
status, stdout, stderr = log_call([subprocess_path], stdin=fixture) status, stdout, stderr = log_call([subprocess_path], stdin=fixture)
eq_(status, 0) eq_(status, 0)
eq_(stderr, ['one', 'No, three..']) eq_(stderr, ['one', 'No, three..'])
eq_(stdout, ['two', 'four\rthree']) eq_(stdout, ['two', 'four', 'three'])
expected_order = ['one', expected_order = ['one',
'two', 'two',
'four\rthree', 'four',
'No, three..', 'No, three..',
'three',
] ]
eq_(logged.getvalue().split("\n")[8:-1], expected_order) eq_(expected_order, logged.getvalue().split("\n")[8:-1])