busser-bats 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 18630d2d9565f35fc8ff4775d029ad7f673f2b27
4
+ data.tar.gz: 595d8d03ac3def1fb0bb04a2d3da5a6552aac118
5
+ SHA512:
6
+ metadata.gz: 63d6b127a618ea52cb66ec622460f81de14f7f22381049e5ac9ef0b79cf23d7f10bde35e501d2d77f61de211a09b134d4c489c11eb7738a882e44271773bd68c
7
+ data.tar.gz: 94435202e166dae20daafaefcb08552fb74f324d017eb323b6ed0bc5d724c1c80a2a5da5de6814bba19ab24555ab233bf17cb8683f637446a830a31859029e9f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## 0.2.0 / 2014-03-23
2
+
3
+ ### Improvements
4
+
5
+ * Vendor a copy of Bats locally (v0.3.1) to speed & simplify plugin installations. ([@fnichol][])
6
+
7
+
1
8
  ## 0.1.0 / 2013-04-10
2
9
 
3
10
  * Initial release
11
+
12
+ <!--- The following link definition list is generated by PimpMyChangelog --->
13
+ [@fnichol]: https://github.com/fnichol
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # <a name="title"></a> Busser::RunnerPlugin::Bats
2
2
 
3
- [![Build Status](https://travis-ci.org/fnichol/busser-bats.png?branch=master)](https://travis-ci.org/fnichol/busser-bats)
4
- [![Code Climate](https://codeclimate.com/github/fnichol/busser-bats.png)](https://codeclimate.com/github/fnichol/busser-bats)
3
+ [![Build Status](https://travis-ci.org/test-kitchen/busser-bats.png?branch=master)](https://travis-ci.org/test-kitchen/busser-bats)
4
+ [![Code Climate](https://codeclimate.com/github/test-kitchen/busser-bats.png)](https://codeclimate.com/github/test-kitchen/busser-bats)
5
5
 
6
6
  A Busser runner plugin for [Bats][bats_site]
7
7
 
@@ -36,6 +36,8 @@ Created and maintained by [Fletcher Nichol][author] (<fnichol@nichol.ca>)
36
36
 
37
37
  Apache 2.0 (see [LICENSE][license])
38
38
 
39
+ [Bats][bats_site] is released under an MIT-style license, copyright Sam Stephenson.
40
+
39
41
 
40
42
  [author]: https://github.com/fnichol
41
43
  [issues]: https://github.com/fnichol/busser-bats/issues
data/Rakefile CHANGED
@@ -1,8 +1,46 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'cucumber/rake/task'
3
3
  require 'cane/rake_task'
4
+ require 'open-uri'
4
5
  require 'tailor/rake_task'
5
6
 
7
+ namespace :bats do
8
+
9
+ version = ENV.fetch("BATS_VERSION", "v0.3.1")
10
+ url = "https://github.com/sstephenson/bats/archive/#{version}.tar.gz"
11
+ tarball = "tmp/bats-#{version}.tar.gz"
12
+ vendor = "vendor/bats"
13
+
14
+ desc "Vendors bats #{version} source code into gem codebase"
15
+ task :vendor => "#{vendor}/VERSION.txt"
16
+
17
+ directory File.dirname(tarball)
18
+ directory vendor
19
+
20
+ file tarball => File.dirname(tarball) do |t|
21
+ begin
22
+ src = open(url).binmode
23
+ dst = open(t.name, "wb")
24
+ IO.copy_stream(src, dst)
25
+ ensure
26
+ src.close
27
+ dst.close
28
+ end
29
+ end
30
+
31
+ file "#{vendor}/VERSION.txt" => [vendor, tarball] do |t|
32
+ abs_tarball = File.expand_path(tarball)
33
+ Dir.chdir(vendor) { sh "tar xzf #{abs_tarball} --strip-components=1" }
34
+ rm_rf "#{vendor}/test"
35
+ IO.write(t.name, url + "\n")
36
+ end
37
+
38
+ desc "Clean up a vendored bats in preparation for a new vendored version"
39
+ task :clean do
40
+ rm_rf [vendor, tarball]
41
+ end
42
+ end
43
+
6
44
  Cucumber::Rake::Task.new(:features) do |t|
7
45
  t.cucumber_opts = ['features', '-x', '--format progress']
8
46
  end
data/busser-bats.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ['fnichol@nichol.ca']
11
11
  spec.description = %q{A Busser runner plugin for Bats}
12
12
  spec.summary = spec.description
13
- spec.homepage = 'https://github.com/fnichol/busser-bats'
13
+ spec.homepage = 'https://github.com/test-kitchen/busser-bats'
14
14
  spec.license = 'Apache 2.0'
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -21,6 +21,6 @@ module Busser
21
21
  module Bats
22
22
 
23
23
  # Version string for the Bats Busser runner plugin
24
- VERSION = "0.1.0"
24
+ VERSION = "0.2.0"
25
25
  end
26
26
  end
@@ -17,7 +17,6 @@
17
17
  # limitations under the License.
18
18
 
19
19
  require 'pathname'
20
- require 'tmpdir'
21
20
 
22
21
  require 'busser/runner_plugin'
23
22
 
@@ -28,19 +27,10 @@ require 'busser/runner_plugin'
28
27
  class Busser::RunnerPlugin::Bats < Busser::RunnerPlugin::Base
29
28
 
30
29
  postinstall do
31
- tmp_root = Pathname.new(Dir.mktmpdir("bats"))
32
- tarball_url = "https://github.com/sstephenson/bats/archive/master.tar.gz"
33
- tarball_file = tmp_root.join("bats.tar.gz")
34
- extract_root = tmp_root.join("bats")
35
- dest_path = vendor_path("bats")
36
-
37
- empty_directory(extract_root)
38
- get(tarball_url, tarball_file)
39
- inside(extract_root) do
40
- run!(%{gunzip -c "#{tarball_file}" | tar xf - --strip-components=1})
41
- run!(%{./install.sh #{dest_path}})
30
+ inside(Pathname.new(__FILE__).dirname.join("../../../vendor/bats")) do
31
+ FileUtils.ln_sf("../libexec/bats", "bin/bats")
32
+ run!(%{./install.sh #{vendor_path("bats")}})
42
33
  end
43
- remove_dir(tmp_root)
44
34
  end
45
35
 
46
36
  def test
@@ -0,0 +1,3 @@
1
+ * text=auto
2
+ *.sh eol=lf
3
+ libexec/* eol=lf
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Sam Stephenson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,272 @@
1
+ # Bats: Bash Automated Testing System
2
+
3
+ Bats is a [TAP](http://testanything.org/)-compliant testing framework
4
+ for Bash. It provides a simple way to verify that the UNIX programs
5
+ you write behave as expected.
6
+
7
+ A Bats test file is a Bash script with special syntax for defining
8
+ test cases. Under the hood, each test case is just a function with a
9
+ description.
10
+
11
+ ```bash
12
+ #!/usr/bin/env bats
13
+
14
+ @test "addition using bc" {
15
+ result="$(echo 2+2 | bc)"
16
+ [ "$result" -eq 4 ]
17
+ }
18
+
19
+ @test "addition using dc" {
20
+ result="$(echo 2 2+p | dc)"
21
+ [ "$result" -eq 4 ]
22
+ }
23
+ ```
24
+
25
+ Bats is most useful when testing software written in Bash, but you can
26
+ use it to test any UNIX program.
27
+
28
+ Test cases consist of standard shell commands. Bats makes use of
29
+ Bash's `errexit` (`set -e`) option when running test cases. If every
30
+ command in the test case exits with a `0` status code (success), the
31
+ test passes. In this way, each line is an assertion of truth.
32
+
33
+ ## Running tests
34
+
35
+ To run your tests, invoke the `bats` interpreter with a path to a test
36
+ file. The file's test cases are run sequentially and in isolation. If
37
+ all the test cases pass, `bats` exits with a `0` status code. If there
38
+ are any failures, `bats` exits with a `1` status code.
39
+
40
+ When you run Bats from a terminal, you'll see output as each test is
41
+ performed, with a check-mark next to the test's name if it passes or
42
+ an "X" if it fails.
43
+
44
+ $ bats addition.bats
45
+ ✓ addition using bc
46
+ ✓ addition using dc
47
+
48
+ 2 tests, 0 failures
49
+
50
+ If Bats is not connected to a terminal—in other words, if you
51
+ run it from a continuous integration system or redirect its output to
52
+ a file—the results are displayed in human-readable, machine-parsable
53
+ [TAP format](http://testanything.org/wiki/index.php/TAP_specification#THE_TAP_FORMAT).
54
+ You can force TAP output from a terminal by invoking Bats with the
55
+ `--tap` option.
56
+
57
+ $ bats --tap addition.bats
58
+ 1..2
59
+ ok 1 addition using bc
60
+ ok 2 addition using dc
61
+
62
+ ### Test suites
63
+
64
+ You can invoke the `bats` interpreter with multiple test file
65
+ arguments, or with a path to a directory containing multiple `.bats`
66
+ files. Bats will run each test file individually and aggregate the
67
+ results. If any test case fails, `bats` exits with a `1` status code.
68
+
69
+ ## Writing tests
70
+
71
+ Each Bats test file is evaulated n+1 times, where _n_ is the number of
72
+ test cases in the file. The first run counts the number of test cases,
73
+ then iterates over the test cases and executes each one in its own
74
+ process.
75
+
76
+ For details about exactly how Bats evaluates test files, see [Bats
77
+ Evaluation Process](https://github.com/sstephenson/bats/wiki/Bats-Evaluation-Process)
78
+ on the wiki.
79
+
80
+ ### The _run_ helper
81
+
82
+ Many Bats tests need to run a command and then make assertions about
83
+ its exit status and output. Bats includes a `run` helper that invokes
84
+ its arguments as a command, saves the exit status and output into
85
+ special global variables, and then returns with a `0` status code so
86
+ you can continue to make assertions in your test case.
87
+
88
+ For example, let's say you're testing that the `foo` command, when
89
+ passed a nonexistent filename, exits with a `1` status code and prints
90
+ an error message.
91
+
92
+ ```bash
93
+ @test "invoking foo with a nonexistent file prints an error" {
94
+ run foo nonexistent_filename
95
+ [ "$status" -eq 1 ]
96
+ [ "$output" = "foo: no such file 'nonexistent_filename'" ]
97
+ }
98
+ ```
99
+
100
+ The `$status` variable contains the status code of the command, and
101
+ the `$output` variable contains the combined contents of the command's
102
+ standard output and standard error streams.
103
+
104
+ A third special variable, the `$lines` array, is available for easily
105
+ accessing individual lines of output. For example, if you want to test
106
+ that invoking `foo` without any arguments prints usage information on
107
+ the first line:
108
+
109
+ ```bash
110
+ @test "invoking foo without arguments prints usage" {
111
+ run foo
112
+ [ "$status" -eq 1 ]
113
+ [ "${lines[0]}" = "usage: foo <filename>" ]
114
+ }
115
+ ```
116
+
117
+ ### The _load_ command
118
+
119
+ You may want to share common code across multiple test files. Bats
120
+ includes a convenient `load` command for sourcing a Bash source file
121
+ relative to the location of the current test file. For example, if you
122
+ have a Bats test in `test/foo.bats`, the command
123
+
124
+ ```bash
125
+ load test_helper
126
+ ```
127
+
128
+ will source the script `test/test_helper.bash` in your test file. This
129
+ can be useful for sharing functions to set up your environment or load
130
+ fixtures.
131
+
132
+ ### The _skip_ command
133
+
134
+ Tests can be skipped by using the `skip` command at the point in a
135
+ test you wish to skip.
136
+
137
+ ```bash
138
+ @test "A test I don't want to execute for now" {
139
+ skip
140
+ run foo
141
+ [ "$status" -eq 0 ]
142
+ }
143
+ ```
144
+
145
+ Optionally, you may include a reason for skipping:
146
+
147
+ ```bash
148
+ @test "A test I don't want to execute for now" {
149
+ skip "This command will return zero soon, but not now"
150
+ run foo
151
+ [ "$status" -eq 0 ]
152
+ }
153
+ ```
154
+
155
+ Or you can skip conditionally:
156
+
157
+ ```bash
158
+ @test "A test which should run" {
159
+ if [ foo != bar ]; then
160
+ skip "foo isn't bar"
161
+ fi
162
+
163
+ run foo
164
+ [ "$status" -eq 0 ]
165
+ }
166
+ ```
167
+
168
+ ### Setup and teardown functions
169
+
170
+ You can define special `setup` and `teardown` functions which run
171
+ before and after each test case, respectively. Use these to load
172
+ fixtures, set up your environment, and clean up when you're done.
173
+
174
+ ### Code outside of test cases
175
+
176
+ You can include code in your test file outside of `@test` functions.
177
+ For example, this may be useful if you want to check for dependencies
178
+ and fail immediately if they're not present. However, any output that
179
+ you print in code outside of `@test`, `setup` or `teardown` functions
180
+ must be redirected to `stderr` (`>&2`). Otherwise, the output may
181
+ cause Bats to fail by polluting the TAP stream on `stdout`.
182
+
183
+ ### Special variables
184
+
185
+ There are several global variables you can use to introspect on Bats
186
+ tests:
187
+
188
+ * `$BATS_TEST_FILENAME` is the fully expanded path to the Bats test
189
+ file.
190
+ * `$BATS_TEST_DIRNAME` is the directory in which the Bats test file is
191
+ located.
192
+ * `$BATS_TEST_NAMES` is an array of function names for each test case.
193
+ * `$BATS_TEST_NAME` is the name of the function containing the current
194
+ test case.
195
+ * `$BATS_TEST_DESCRIPTION` is the description of the current test
196
+ case.
197
+ * `$BATS_TEST_NUMBER` is the (1-based) index of the current test case
198
+ in the test file.
199
+ * `$BATS_TMPDIR` is the location to a directory that may be used to
200
+ store temporary files.
201
+
202
+ ## Installing Bats from source
203
+
204
+ Check out a copy of the Bats repository. Then, either add the Bats
205
+ `bin` directory to your `$PATH`, or run the provided `install.sh`
206
+ command with the location to the prefix in which you want to install
207
+ Bats. For example, to install Bats into `/usr/local`,
208
+
209
+ $ git clone https://github.com/sstephenson/bats.git
210
+ $ cd bats
211
+ $ ./install.sh /usr/local
212
+
213
+ Note that you may need to run `install.sh` with `sudo` if you do not
214
+ have permission to write to the installation prefix.
215
+
216
+ ## Support
217
+
218
+ The Bats source code repository is [hosted on
219
+ GitHub](https://github.com/sstephenson/bats). There you can file bugs
220
+ on the issue tracker or submit tested pull requests for review.
221
+
222
+ For real-world examples from open-source projects using Bats, see
223
+ [Projects Using Bats](https://github.com/sstephenson/bats/wiki/Projects-Using-Bats)
224
+ on the wiki.
225
+
226
+ To learn how to set up your editor for Bats syntax highlighting, see
227
+ [Syntax Highlighting](https://github.com/sstephenson/bats/wiki/Syntax-Highlighting)
228
+ on the wiki.
229
+
230
+ ### Version history
231
+
232
+ *0.3.1* (October 28, 2013)
233
+
234
+ * Fixed an incompatibility with the pretty formatter in certain
235
+ environments such as tmux.
236
+ * Fixed a bug where the pretty formatter would crash if the first line
237
+ of a test file's output was invalid TAP.
238
+
239
+ *0.3.0* (October 21, 2013)
240
+
241
+ * Improved formatting for tests run from a terminal. Failing tests
242
+ are now colored in red, and the total number of failing tests is
243
+ displayed at the end of the test run. When Bats is not connected to
244
+ a terminal (e.g. in CI runs), or when invoked with the `--tap` flag,
245
+ output is displayed in standard TAP format.
246
+ * Added the ability to skip tests using the `skip` command.
247
+ * Added a message to failing test case output indicating the file and
248
+ line number of the statement that caused the test to fail.
249
+ * Added "ad-hoc" test suite support. You can now invoke `bats` with
250
+ multiple filename or directory arguments to run all the specified
251
+ tests in aggregate.
252
+ * Added support for test files with Windows line endings.
253
+ * Fixed regular expression warnings from certain versions of Bash.
254
+ * Fixed a bug running tests containing lines that begin with `-e`.
255
+
256
+ *0.2.0* (November 16, 2012)
257
+
258
+ * Added test suite support. The `bats` command accepts a directory
259
+ name containing multiple test files to be run in aggregate.
260
+ * Added the ability to count the number of test cases in a file or
261
+ suite by passing the `-c` flag to `bats`.
262
+ * Preprocessed sources are cached between test case runs in the same
263
+ file for better performance.
264
+
265
+ *0.1.0* (December 30, 2011)
266
+
267
+ * Initial public release.
268
+
269
+ ---
270
+
271
+ © 2013 Sam Stephenson. Bats is released under an MIT-style license;
272
+ see `LICENSE` for details.
@@ -0,0 +1 @@
1
+ https://github.com/sstephenson/bats/archive/v0.3.1.tar.gz
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ version() {
5
+ echo "Bats 0.3.1"
6
+ }
7
+
8
+ usage() {
9
+ version
10
+ echo "Usage: bats [-c] [-p | -t] <test> [<test> ...]"
11
+ }
12
+
13
+ help() {
14
+ usage
15
+ echo
16
+ echo " <test> is the path to a Bats test file, or the path to a directory"
17
+ echo " containing Bats test files."
18
+ echo
19
+ echo " -c, --count Count the number of test cases without running any tests"
20
+ echo " -h, --help Display this help message"
21
+ echo " -p, --pretty Show results in pretty format (default for terminals)"
22
+ echo " -t, --tap Show results in TAP format"
23
+ echo " -v, --version Display the version number"
24
+ echo
25
+ echo " For more information, see https://github.com/sstephenson/bats"
26
+ echo
27
+ }
28
+
29
+ resolve_link() {
30
+ $(type -p greadlink readlink | head -1) "$1"
31
+ }
32
+
33
+ abs_dirname() {
34
+ local cwd="$(pwd)"
35
+ local path="$1"
36
+
37
+ while [ -n "$path" ]; do
38
+ cd "${path%/*}"
39
+ local name="${path##*/}"
40
+ path="$(resolve_link "$name" || true)"
41
+ done
42
+
43
+ pwd
44
+ cd "$cwd"
45
+ }
46
+
47
+ expand_path() {
48
+ { cd "$(dirname "$1")" 2>/dev/null
49
+ local dirname="$PWD"
50
+ cd "$OLDPWD"
51
+ echo "$dirname/$(basename "$1")"
52
+ } || echo "$1"
53
+ }
54
+
55
+ BATS_LIBEXEC="$(abs_dirname "$0")"
56
+ export BATS_PREFIX="$(abs_dirname "$BATS_LIBEXEC")"
57
+ export PATH="$BATS_LIBEXEC:$PATH"
58
+
59
+ options=()
60
+ arguments=()
61
+ for arg in "$@"; do
62
+ if [ "${arg:0:1}" = "-" ]; then
63
+ if [ "${arg:1:1}" = "-" ]; then
64
+ options[${#options[*]}]="${arg:2}"
65
+ else
66
+ index=1
67
+ while option="${arg:$index:1}"; do
68
+ [ -n "$option" ] || break
69
+ options[${#options[*]}]="$option"
70
+ index=$(($index+1))
71
+ done
72
+ fi
73
+ else
74
+ arguments[${#arguments[*]}]="$arg"
75
+ fi
76
+ done
77
+
78
+ unset count_flag pretty
79
+ [ -t 0 ] && [ -t 1 ] && pretty="1"
80
+
81
+ for option in "${options[@]}"; do
82
+ case "$option" in
83
+ "h" | "help" )
84
+ help
85
+ exit 0
86
+ ;;
87
+ "v" | "version" )
88
+ version
89
+ exit 0
90
+ ;;
91
+ "c" | "count" )
92
+ count_flag="-c"
93
+ ;;
94
+ "t" | "tap" )
95
+ pretty=""
96
+ ;;
97
+ "p" | "pretty" )
98
+ pretty="1"
99
+ ;;
100
+ * )
101
+ usage >&2
102
+ exit 1
103
+ ;;
104
+ esac
105
+ done
106
+
107
+ if [ "${#arguments[@]}" -eq 0 ]; then
108
+ usage >&2
109
+ exit 1
110
+ fi
111
+
112
+ filenames=()
113
+ for filename in "${arguments[@]}"; do
114
+ if [ -d "$filename" ]; then
115
+ shopt -s nullglob
116
+ for suite_filename in "$(expand_path "$filename")"/*.bats; do
117
+ filenames["${#filenames[@]}"]="$suite_filename"
118
+ done
119
+ shopt -u nullglob
120
+ else
121
+ filenames["${#filenames[@]}"]="$(expand_path "$filename")"
122
+ fi
123
+ done
124
+
125
+ if [ "${#filenames[@]}" -eq 1 ]; then
126
+ command="bats-exec-test"
127
+ else
128
+ command="bats-exec-suite"
129
+ fi
130
+
131
+ if [ -n "$pretty" ]; then
132
+ extended_syntax_flag="-x"
133
+ formatter="bats-format-tap-stream"
134
+ else
135
+ extended_syntax_flag=""
136
+ formatter="cat"
137
+ fi
138
+
139
+ set -o pipefail execfail
140
+ exec "$command" $count_flag $extended_syntax_flag "${filenames[@]}" | "$formatter"