kward / shunit2

shUnit2 is a xUnit based unit test framework for Bourne based shell scripts.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

"[[: not found" error when sourcing files

brandizzi opened this issue · comments

When sourcing a file into a shunit2 test, Bash's [[ is not recognized.

Consider the file above, called example.sh:

#!/usr/bin/env bash
# example.sh
if [[ "$1" == "OK" ]]
then
  echo Everything is OK
else
  echo Something is not OK
fi

Now, let's call it from inside a shunit2 test script, called here test.sh:

#!/bin/bash
# test.sh
test_ok() {
  ./example.sh OK
}
test_not_ok() {
  ./example.sh NOK
}

This works:

$ shunit2 test.sh 
test_ok
Everything is OK
test_not_ok
Something is not OK

Ran 2 tests.

OK

Now, if I source example.sh into test-sourced.sh, like this...

$ cat test.sh 
#!/bin/bash
# test-sourced.sh
test_ok() {
  source ./example.sh OK
}
test_not_ok() {
  source ./example.sh NOK
}

...now the tests fail because source is not found.

$ shunit2 test-sourced.sh 
test_ok
/home/adam/bin/shunit2: 4: eval: source: not found
shunit2:ERROR test_ok() returned non-zero return code.
test_not_ok
/home/adam/bin/shunit2: 7: eval: source: not found
shunit2:ERROR test_not_ok() returned non-zero return code.

Ran 2 tests.

FAILED (failures=2)

If I use . instead of source, as in the test-dot.sh file below

#!/bin/bash

test_ok() {
  . ./example.sh OK
}
test_not_ok() {
  . ./example.sh NOK
}

...it fails because [[ is "not found":

$ shunit2 ./test.sh 
test_ok
/home/adam/bin/shunit2: 2: ./example.sh: [[: not found
Something is not OK
test_not_ok
/home/adam/bin/shunit2: 2: ./example.sh: [[: not found
Something is not OK

Ran 2 tests.

OK

I confess I don't understand why it is happening. I suppose it is a bug, but I'm not dead sure it is a mistake on my side. Do you see what is going on?

Thanks!