#!/usr/bin/env bash setUp() { echo ' #!/usr/bin/env bash somethingw() { _wrapper \ -n something \ -v 1337 \ -l http://something/VERSION/linux \ -d http://something/VERSION/darwin \ -- \ "$@" } ⚡hello() { somethingw ; } ' > go echo "source $REPO_ROOT/⚡" >> go chmod +x go } testWrapperDownloadsFromLinuxUrlOnLinux() { mock curl mock uname Linux try ./go hello assertCalledWithArguments curl linux } testWrapperHasCurlFollowLocationHeader() { mock curl mock uname Linux try ./go hello assertCalledWithArguments curl --location } testWrapperDownloadsFromDarwinUrlOnDarwin() { mock curl mock uname Darwin try ./go hello assertCalledWithArguments curl darwin } testWrapperSubstitutesVERSIONInUrl() { mock curl mock uname Darwin try ./go hello assertCalledWithArguments curl http://something/1337/darwin } testWrapperRunsDownloadedBinary() { mock curl '#!/usr/bin/env bash printf "Hello " printf "friend" ' mock uname Darwin try ./go hello assertContains "$STDOUT" "Hello friend" } testWrapperPersistsBinaryInLocationBasedOnNameAndVersion() { mock curl '#!/usr/bin/env true potato ' mock uname Darwin try ./go hello assertContains "$(<.generated/wrapper/something/1337/bin)" potato } testWrapperDoesNotRedownloadBinaryIfPresent() { mock curl 'whatever' mock uname Darwin mkdir -p .generated/wrapper/something/1337/ touch .generated/wrapper/something/1337/bin try ./go hello assertNotCalled curl assertNotContains "$(<.generated/wrapper/something/1337/bin)" potato } testWrapperPassesArgumentsToExecutedBinary() { mock curl '#!/usr/bin/env bash echo "$@" ' mock uname Darwin echo ' #!/usr/bin/env bash somethingw() { _wrapper \ -n something \ -v 1337 \ -d http://something/darwin \ -- \ "$@" } ⚡hello() { somethingw Hello friend ; } ' > go echo "source $REPO_ROOT/⚡" >> go chmod +x go try ./go hello assertContains "$STDOUT" "Hello friend" } source $(dirname $0)/runner