From 43dce30ea7416c574c0acf65732d243f56860feb Mon Sep 17 00:00:00 2001 From: Sylvain Date: Thu, 29 Jan 2015 20:51:49 +0100 Subject: [PATCH] saving $IFS in run() not altered for code using it IFS was modified by run() becoming '\n' and so relying to its bash default was failing tests. Also some wrong tests corrected because was relying on this behavior to pass. Fix #89 --- libexec/bats-exec-test | 4 +++- test/bats.bats | 8 +++++++- test/fixtures/bats/loop_keep_IFS.bats | 16 ++++++++++++++++ test/suite.bats | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/bats/loop_keep_IFS.bats diff --git a/libexec/bats-exec-test b/libexec/bats-exec-test index 5a076650..8f3bd510 100755 --- a/libexec/bats-exec-test +++ b/libexec/bats-exec-test @@ -48,7 +48,7 @@ load() { } run() { - local e E T + local e E T oldIFS [[ ! "$-" =~ e ]] || e=1 [[ ! "$-" =~ E ]] || E=1 [[ ! "$-" =~ T ]] || T=1 @@ -57,10 +57,12 @@ run() { set +T output="$("$@" 2>&1)" status="$?" + oldIFS=$IFS IFS=$'\n' lines=($output) [ -z "$e" ] || set -e [ -z "$E" ] || set -E [ -z "$T" ] || set -T + IFS=$oldIFS } setup() { diff --git a/test/bats.bats b/test/bats.bats index 280515d2..0df38100 100755 --- a/test/bats.bats +++ b/test/bats.bats @@ -37,7 +37,7 @@ fixtures bats run bats "$FIXTURE_ROOT/passing.bats" [ $status -eq 0 ] [ ${lines[0]} = "1..1" ] - [ ${lines[1]} = "ok 1 a passing test" ] + [ "${lines[1]}" = "ok 1 a passing test" ] } @test "summary passing tests" { @@ -256,3 +256,9 @@ fixtures bats [ "${lines[5]}" = "# (in test file $RELATIVE_FIXTURE_ROOT/single_line.bats, line 9)" ] [ "${lines[6]}" = $'# `@test "failing" { false; }\' failed' ] } + +@test "testing IFS not modified by run" { + run bats "$FIXTURE_ROOT/loop_keep_IFS.bats" + [ $status -eq 0 ] + [ "${lines[1]}" = "ok 1 loop_func" ] +} diff --git a/test/fixtures/bats/loop_keep_IFS.bats b/test/fixtures/bats/loop_keep_IFS.bats new file mode 100644 index 00000000..f30613ae --- /dev/null +++ b/test/fixtures/bats/loop_keep_IFS.bats @@ -0,0 +1,16 @@ +# see issue #89 +loop_func() { + local search="none one two tree" + local d + + for d in $search ; do + echo $d + done +} + +@test "loop_func" { + run loop_func + [[ "${lines[3]}" == 'tree' ]] + run loop_func + [[ "${lines[2]}" == 'two' ]] +} diff --git a/test/suite.bats b/test/suite.bats index 14f5008e..48f75933 100755 --- a/test/suite.bats +++ b/test/suite.bats @@ -13,7 +13,7 @@ fixtures suite run bats "$FIXTURE_ROOT/single" [ $status -eq 0 ] [ ${lines[0]} = "1..1" ] - [ ${lines[1]} = "ok 1 a passing test" ] + [ "${lines[1]}" = "ok 1 a passing test" ] } @test "counting tests in a suite" {