bauxite 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 063894fc2a6cee418888abc8d731448a22653c5c
4
- data.tar.gz: 1cc13f20d0951eaed6451b75575124f558f4d063
3
+ metadata.gz: a79031976dbf278abe67693d4a879c6e2ef4e292
4
+ data.tar.gz: 6d41186a005452003dbad24083b7b44d7d08b069
5
5
  SHA512:
6
- metadata.gz: c4e04c8976ba0a5a5b018dc62fac88d1204c7415114159527e3b03581e94a7119dd70f51dec32c6e3b255a8b690a2729f2ae7815810254ef0d3e1094a9b3c7d8
7
- data.tar.gz: 37f4ec249b6139fd33b968d387eb5f043b5b0ccae3bbffefd47c710bb753b19784c1247e53e62b81f6b91120b4553bb494964e65d50adc6cd348f0029bcc30b0
6
+ metadata.gz: df42b694e3b77c1c6b2ef400b60a6070f4a67e6042f2596f7a475e82938b87ea0e17d57a11731e5400f83f951e159a11a1ca50fdd6098955e5572ccf47938f97
7
+ data.tar.gz: 7722a6c289e506e6851bbd09732096654d65e362820c6d8ab3dc92ff179981341bebe2494cd77c09d822f69ab0c806f4e9793bfd133a16ec67dc2c07cfeb74a8
data/README.md CHANGED
@@ -23,46 +23,55 @@ driver.quit
23
23
  While developers might find that code expressive enough, non-developers might be a bit shocked.
24
24
 
25
25
  The equivalent Bauxite test is easier on the eyes:
26
- ```
26
+ ```ruby
27
27
  open "http://google.com"
28
- write name=q "Hello WebDriver!"
29
- click gbqfb
28
+ write "name=q" "Hello WebDriver!"
29
+ click "gbqfb"
30
30
  ```
31
+
31
32
  Installation
32
33
  ------------
33
34
 
34
35
  In a nutshell:
35
- ```
36
+ ```shell
36
37
  gem install bauxite
37
38
  ```
38
39
 
39
- Remember you'll also need Ruby 2.x installed and Firefox (you can use other browsers or Selenium server by specifying the `-p` switch to the `bauxite` executable).
40
+ If you don't have Ruby 2.x yet, check the [Installing Ruby](#installing-ruby) section below.
41
+
42
+ Remember you should probably install [Firefox](http://www.mozilla.org) (unless you want to use other browsers or Selenium server by specifying the `-p` switch to the `bauxite` executable).
40
43
 
41
44
  Hello World
42
45
  -----------
43
46
 
44
- (This section assumes that Bauxite and its dependencies are installed in the system. Refer to the [Installation](#installation) section below for more details).
45
-
46
47
  Paste the following text into `hello.bxt`:
47
- ```
48
+ ```ruby
48
49
  open "http://www.gnu.org/fun/jokes/helloworld.html"
49
50
  ```
50
51
 
51
- Launch a console and type:
52
+ Launch a terminal/command prompt and type:
52
53
  ```
53
54
  bauxite hello.bxt
54
55
  ```
55
56
 
56
- Documentation
57
- -------------
57
+ Command-line Interface
58
+ ----------------------
59
+
60
+ The `bauxite` command-line program supports several configuration options.
61
+
62
+ Refer to the [RDoc documentation](http://pzavolinsky.github.io/bauxite/Bauxite/Application.html) for more details.
63
+
64
+
65
+ The Bauxite Language
66
+ --------------------
58
67
 
59
68
  The Bauxite language is composed of two elements `Actions` and `Selectors`: Actions are testing operations such as "open this page", "click this button", "write this text into that textbox", etc. Selectors are ways of locating interesting elements of a page such as a button, a textbox, a label, etc.
60
69
 
61
70
  A typical Bauxite test is a plain text file that contains a series of Actions (one per line). Depending on the Action, a few action arguments might need to be specified as well. For example in:
62
- ```
71
+ ```ruby
63
72
  open "http://google.com"
64
- write name=q "Hello WebDriver!"
65
- click gbqfb
73
+ write "name=q" "Hello WebDriver!"
74
+ click "gbqfb"
66
75
  ```
67
76
 
68
77
  `open`, `write` and `click` are Actions:
@@ -82,8 +91,8 @@ For example, in this HTML fragment:
82
91
  ```
83
92
 
84
93
  If we want to click the "Search" button we can do the following:
85
- ```
86
- click gbqfb
94
+ ```ruby
95
+ click "gbqfb"
87
96
  ```
88
97
 
89
98
  Bauxite supports several other Selectors such as `name=` in the example above. The `name` Selector finds elements whose `name` attribute matches the text following the `=` sign.
@@ -94,8 +103,8 @@ For example, in this HTML fragment:
94
103
  ```
95
104
 
96
105
  If we want to type the text "Hello WebDriver!" in textbox we can do the following:
97
- ```
98
- write name=q "Hello WebDriver!"
106
+ ```ruby
107
+ write "name=q" "Hello WebDriver!"
99
108
  ```
100
109
 
101
110
  This section presented a brief introduction into the basic Bauxite concepts. For more details and a list of every Action and Selector available, refer to the RDoc generated documentation in:
@@ -111,32 +120,26 @@ Installing Ruby
111
120
  I won't cover all the details of installing Ruby on your system (Google knows best), but the following should probably work.
112
121
 
113
122
  In GNU/Linux, you can install [RVM](http://rvm.io/), then Ruby:
114
- ```
123
+ ```shell
115
124
  curl -sSL https://get.rvm.io | bash -s stable
116
125
  source ~/.rvm/scripts/rvm
117
126
  rvm install ruby-2.1.0
118
127
  ```
119
128
 
120
- In Windows, you can install Ruby 2.x with [RubyInstaller](http://rubyinstaller.org/downloads/) but you'll probably need to install a Ruby 2.x Development Kit. After everything is installed, launch the Ruby terminal (or the MSYS terminal from the DevKit).
129
+ In Windows, you can install Ruby 2.x with [RubyInstaller](http://rubyinstaller.org/downloads/). After everything is installed, launch the `Start Command Prompt with Ruby` option in your start menu.
121
130
 
122
131
  Regadless of your OS, you should be able to install Bauxite with:
123
132
 
124
- ```
133
+ ```shell
125
134
  gem install bauxite
126
135
  ```
127
136
 
128
- Additionally, if you are using GNU/Linux, you might want to install `ruby-terminfo` to improve the terminal output(i.e. handle more than 80 chars):
129
-
130
- ```
131
- gem install ruby-terminfo
132
- ```
133
-
134
137
  Implementation
135
138
  --------------
136
139
 
137
- Bauxite is both a console program and a library. You can use the program to run Bauxite tests directly from a terminal, or you can embed the library in your own application.
140
+ Bauxite is both a command-line program and a library. You can use the program to run Bauxite tests directly from a terminal, or you can embed the library in your own application.
138
141
 
139
- The console program is called `bauxite` and has a few command-line options (run `bauxite -h` to see them all).
142
+ The command-line program is called `bauxite` and has several command-line options, refer to the [RDoc documentation](http://pzavolinsky.github.io/bauxite/Bauxite/Application.html) for more details.
140
143
 
141
144
  If you are looking to embed Bauxite in your application take a look a the code in `lib/bauxite/application.rb`, that should give you a full example of how to create a Bauxite Context and execute some actions.
142
145
 
@@ -159,11 +162,11 @@ Functional extensions are composite constructs created using existing Bauxite ac
159
162
  ```
160
163
 
161
164
  The Bauxite code to login into this site would be:
162
- ```
165
+ ```ruby
163
166
  open "http://hostname/login.html"
164
- write username "jdoe"
165
- write password "hello world!"
166
- click login
167
+ write "username" "jdoe"
168
+ write "password" "hello world!"
169
+ click "login"
167
170
  ```
168
171
 
169
172
  If we were creating a suite of automated web tests for our *hostname* site, we'll probably need to login into the site several times. This would mean copy/pasting the four lines above into every test in our suite.
@@ -177,55 +180,55 @@ load other_test_fragment.bxt
177
180
  ```
178
181
 
179
182
  Back to our login example, first we can package the login part of our tests into a separate Bauxite file:
180
- ```
183
+ ```ruby
181
184
  # login.bxt
182
185
  open "http://hostname/login.html"
183
- write username "jdoe"
184
- write password "hello world!"
185
- click login
186
+ write "username" "jdoe"
187
+ write "password" "hello world!"
188
+ click "login"
186
189
  ```
187
190
 
188
191
  Of course we would like to be able to login with different username/password combinations, so we can replace the literals in `login.bxt` with variables:
189
- ```
192
+ ```ruby
190
193
  # login.bxt
191
194
  open "http://hostname/login.html"
192
- write username "${username}"
193
- write password "${password}"
194
- click login
195
+ write "username" "${username}"
196
+ write "password" "${password}"
197
+ click "login"
195
198
  ```
196
199
 
197
200
  Now, we would like to assert that both `username` and `password` variables are set before calling our test (just in case someone forgets). We can do this with `params`
198
- ```
201
+ ```ruby
199
202
  # login.bxt
200
203
  params username password
201
204
  open "http://hostname/login.html"
202
- write username "${username}"
203
- write password "${password}"
204
- click login
205
+ write "username" "${username}"
206
+ write "password" "${password}"
207
+ click "login"
205
208
  ```
206
209
 
207
210
  In our main test we can load `login.bxt` and specify the variables required using this code:
208
- ```
211
+ ```ruby
209
212
  # main_test.bxt
210
- load login.bxt username=jdoe "password=hello world!"
213
+ load "login.bxt" "username=jdoe" "password=hello world!"
211
214
 
212
215
  # additional actions go here
213
216
  ```
214
217
 
215
218
  We could improve this even further by creating an `alias` to simplify the login process. To do this, lets create an new file called `alias.bxt`:
216
- ```
219
+ ```ruby
217
220
  # alias.bxt
218
- alias login load login.bxt "username=${1}" "password=${2}"
221
+ alias "login" "load" "login.bxt" "username=${1}" "password=${2}"
219
222
  ```
220
223
 
221
224
  Note that the `alias` action supports positional arguments.
222
225
 
223
226
  Now we can change our main test to use our alias:
224
- ```
227
+ ```ruby
225
228
  # main_test.bxt
226
- load alias.bxt
229
+ load "alias.bxt"
227
230
 
228
- login jdoe "hello world!"
231
+ login "jdoe" "hello world!"
229
232
 
230
233
  # additional actions go here
231
234
  ```
@@ -234,6 +237,45 @@ That was a bit of work but the resulting test is purely functional (minus the lo
234
237
 
235
238
  ### Coded plugins
236
239
 
237
- Coded plugins can be used to extend Bauxite actions, selectors and loggers. Coded plugins are Ruby files placed in the respective directory. See any of the current artifacts for a reference implementation.
240
+ Coded plugins are Ruby files that extend the Bauxite language by providing additional language elements. Coded plugins can be used to create Bauxite actions, selectors and loggers.
238
241
 
242
+ For example lets assume that throughout a web application input elements were identified using a custom HTML attribute instead of `id`. For example:
239
243
 
244
+ ```html
245
+ <form>
246
+ <input custom-attr="username" type="text" />
247
+ <input custom-attr="password" type="password" />
248
+ <input custom-attr="login" type="submit" value="Login"/>
249
+ </form>
250
+ ```
251
+
252
+ Using standard Bauxite language we could select these elements using:
253
+ ```ruby
254
+ # === my_test.bxt === #
255
+ write "attr=custom-attr:username" "jdoe"
256
+ write "attr=custom-attr:password" "hello world!"
257
+ click "attr=custom-attr:login"
258
+ ```
259
+
260
+ But we can improve the overall readability of our test by using a coded plugin:
261
+ ```ruby
262
+ # === plugins/custom_selector.rb === #
263
+ class Bauxite::Selector
264
+ def custom(value)
265
+ attr "custom-attr:#{value}"
266
+ end
267
+ end
268
+ ```
269
+
270
+ Now we can change our test to look like this:
271
+ ```ruby
272
+ # === my_test.bxt === #
273
+ write "custom=username" "jdoe"
274
+ write "custom=password" "hello world!"
275
+ click "custom=login"
276
+ ```
277
+
278
+ Finally, to execute Bauxite loading our plugin we can type:
279
+ ```
280
+ bauxite -e plugins my_test.bxt
281
+ ```
data/Rakefile CHANGED
@@ -49,8 +49,7 @@ end
49
49
  # === Documentation ========================================================= #
50
50
  desc "Generate Bauxite documentation"
51
51
  task :doc do
52
- doc_dirs = ['core','actions','selectors','loggers'].map { |d| File.join('lib', 'bauxite',d,'*') }.join(' ')
53
- `rdoc -O -U #{doc_dirs}`
52
+ system("rdoc -O -U -V #{File.join('lib', 'bauxite')}")
54
53
  end
55
54
 
56
55
  desc "Open documentation in a browser"
@@ -578,7 +578,11 @@ autocomplete (pressing the <code>TAB</code> key).</p>
578
578
  <div class="method-source-code" id="debug-source">
579
579
  <pre><span class="ruby-comment"># File lib/bauxite/actions/debug.rb, line 35</span>
580
580
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">debug</span>
581
- <span class="ruby-identifier">lambda</span> { <span class="ruby-identifier">_debug_process</span> }
581
+ <span class="ruby-identifier">lambda</span> <span class="ruby-keyword">do</span>
582
+ <span class="ruby-ivar">@ctx</span>.<span class="ruby-identifier">with_vars</span>({ <span class="ruby-string">&#39;__DEBUG__&#39;</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword">true</span> }) <span class="ruby-keyword">do</span>
583
+ <span class="ruby-identifier">_debug_process</span>
584
+ <span class="ruby-keyword">end</span>
585
+ <span class="ruby-keyword">end</span>
582
586
  <span class="ruby-keyword">end</span></pre>
583
587
  </div>
584
588
 
@@ -0,0 +1,249 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class Bauxite::Application - RDoc Documentation</title>
8
+
9
+ <link href="../fonts.css" rel="stylesheet">
10
+ <link href="../rdoc.css" rel="stylesheet">
11
+
12
+ <script type="text/javascript">
13
+ var rdoc_rel_prefix = "../";
14
+ </script>
15
+
16
+ <script src="../js/jquery.js"></script>
17
+ <script src="../js/navigation.js"></script>
18
+ <script src="../js/search_index.js"></script>
19
+ <script src="../js/search.js"></script>
20
+ <script src="../js/searcher.js"></script>
21
+ <script src="../js/darkfish.js"></script>
22
+
23
+
24
+ <body id="top" role="document" class="class">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="../index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="../table_of_contents.html#pages">Pages</a>
34
+ <a href="../table_of_contents.html#classes">Classes</a>
35
+ <a href="../table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+ <div class="nav-section">
58
+ <h3>Table of Contents</h3>
59
+
60
+ <ul class="link-list" role="directory">
61
+ <li><a href="#class-Bauxite::Application-label-Synopsis">Synopsis</a>
62
+ <li><a href="#class-Bauxite::Application-label-Options">Options</a>
63
+ <li><a href="#class-Bauxite::Application-label-Exit+Status">Exit Status</a>
64
+ </ul>
65
+ </div>
66
+
67
+
68
+ <div id="class-metadata">
69
+
70
+ <div id="parent-class-section" class="nav-section">
71
+ <h3>Parent</h3>
72
+
73
+
74
+ <p class="link">Object
75
+
76
+ </div>
77
+
78
+
79
+
80
+
81
+ </div>
82
+ </nav>
83
+
84
+ <main role="main" aria-labelledby="class-Bauxite::Application">
85
+ <h1 id="class-Bauxite::Application" class="class">
86
+ class Bauxite::Application
87
+ </h1>
88
+
89
+ <section class="description">
90
+
91
+ <p><code>bauxite</code> command-line program.</p>
92
+
93
+ <p>This program executes Bauxite tests and outputs the execution progress and
94
+ tests results to the terminal.</p>
95
+
96
+ <h2 id="class-Bauxite::Application-label-Synopsis">Synopsis<span><a href="#class-Bauxite::Application-label-Synopsis">&para;</a> <a href="#documentation">&uarr;</a></span></h2>
97
+
98
+ <pre class="ruby"><span class="ruby-identifier">bauxite</span> [<span class="ruby-constant">OPTIONS</span>] <span class="ruby-identifier">file1</span> <span class="ruby-identifier">file2</span> <span class="ruby-operator">...</span>
99
+ <span class="ruby-comment"># =&gt; Executes file1, then file2, and so on.</span>
100
+
101
+ <span class="ruby-identifier">bauxite</span> [<span class="ruby-constant">OPTIONS</span>] <span class="ruby-operator">-</span><span class="ruby-identifier">d</span>
102
+ <span class="ruby-comment"># =&gt; Start Bauxite directly in the debug console.</span>
103
+
104
+ <span class="ruby-identifier">bauxite</span> [<span class="ruby-constant">OPTIONS</span>]
105
+ <span class="ruby-comment"># =&gt; Start Bauxite and read test actions from the standard input.</span>
106
+ </pre>
107
+
108
+ <h2 id="class-Bauxite::Application-label-Options">Options<span><a href="#class-Bauxite::Application-label-Options">&para;</a> <a href="#documentation">&uarr;</a></span></h2>
109
+
110
+ <p>For a detailed list of options for your Bauxite version execute:</p>
111
+
112
+ <pre>bauxite -h</pre>
113
+ <dl class="rdoc-list label-list"><dt>-v, --verbose
114
+ <dd>
115
+ <p>Show verbose error messages (i.e. print exception names and backtraces).</p>
116
+ </dd><dt>-t, --timeout SECONDS
117
+ <dd>
118
+ <p>Number of seconds to wait before issuing a timeout error. This timeout
119
+ applies only to Selectors.</p>
120
+ </dd><dt>-d, --debug
121
+ <dd>
122
+ <p>If an error occurs, break into the debug console. This mode is very useful
123
+ to try different selector combinations and debug NoSuchElementError errors.</p>
124
+ </dd><dt>-p, --provider DRIVER
125
+ <dd>
126
+ <p>Selenium WebDriver provider. Defaults to <code>firefox</code>.</p>
127
+
128
+ <p>Other options include:</p>
129
+ <ul><li>
130
+ <p><code>remote</code></p>
131
+ </li><li>
132
+ <p><code>ie</code></p>
133
+ </li><li>
134
+ <p><code>chrome</code></p>
135
+ </li><li>
136
+ <p><code>android</code></p>
137
+ </li><li>
138
+ <p><code>iphone</code></p>
139
+ </li><li>
140
+ <p><code>opera</code></p>
141
+ </li><li>
142
+ <p><code>phantomjs</code></p>
143
+ </li><li>
144
+ <p><code>safari</code></p>
145
+ </li></ul>
146
+
147
+ <p>Driver availability dependes on the system running Bauxite.</p>
148
+ </dd><dt>-P, --provider-option OPTION
149
+ <dd>
150
+ <p>A <code>name=value</code> pair of options that are directly forwarded to
151
+ the Selenium WebDriver provider. This option argument can appear multiple
152
+ times in the command line to specify multiple options.</p>
153
+ </dd><dt>-l, --logger LOGGER
154
+ <dd>
155
+ <p>Logger instance to use. Defaults to <code>xterm</code> if the
156
+ <code>TERM</code> environment variable is set to <code>xterm</code>,
157
+ otherwise it defaults to <code>terminal</code>.</p>
158
+
159
+ <p>To see a complete list of the available loggers execute:</p>
160
+
161
+ <pre>bauxite -h</pre>
162
+ </dd><dt>-L, --logger-option OPTION
163
+ <dd>
164
+ <p>A <code>name=value</code> pair of options that are directly forwarded to
165
+ the logger. This option argument can appear multiple times in the command
166
+ line to specify multiple options.</p>
167
+ </dd><dt>-r, --reset
168
+ <dd>
169
+ <p>Issue a <a href="Action.html#method-i-reset">Bauxite::Action#reset</a>
170
+ action between every test specified in the command line. This option
171
+ enforces test isolation by resetting the test context before each test
172
+ (this removes cookies, sessions, etc. from the previous test).</p>
173
+ </dd><dt>-w, --wait
174
+ <dd>
175
+ <p>Wait for user input when the test completes instead of closing the browser
176
+ window.</p>
177
+ </dd><dt>-u, --url URL
178
+ <dd>
179
+ <p>This option is an alias of:</p>
180
+
181
+ <pre>-p remote -P url=URL</pre>
182
+
183
+ <p>If <code>URL</code> is not present
184
+ <code>http://localhost:4444/wd/hub</code> will be assumed.</p>
185
+ </dd><dt>-e, --extension DIR
186
+ <dd>
187
+ <p>Loads every Ruby file (*.rb) inside <code>DIR</code> (and subdirectories).
188
+ This option can be used to load custom Bauxite extensions (e.g. Actions,
189
+ Selectors, <a href="Loggers.html">Loggers</a>, etc.) for a specific test
190
+ run.</p>
191
+
192
+ <p>For example:</p>
193
+
194
+ <pre class="ruby"><span class="ruby-comment"># === custom/my_selector.rb ======= #</span>
195
+ <span class="ruby-keyword">class</span> <span class="ruby-constant">Bauxite</span><span class="ruby-operator">::</span><span class="ruby-constant">Selector</span>
196
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">by_attr</span>(<span class="ruby-identifier">value</span>)
197
+ <span class="ruby-identifier">attr</span> <span class="ruby-node">&quot;by_attr:#{value}&quot;</span>
198
+ <span class="ruby-keyword">end</span>
199
+ <span class="ruby-keyword">end</span>
200
+ <span class="ruby-comment"># === end custom/my_selector.rb === #</span>
201
+
202
+ <span class="ruby-comment"># === custom/my_test.bxt ========== #</span>
203
+ <span class="ruby-comment"># ...</span>
204
+ <span class="ruby-identifier">assert</span> <span class="ruby-string">&quot;by_attr=attr_value&quot;</span> <span class="ruby-identifier">hello</span>
205
+ <span class="ruby-comment"># ...</span>
206
+ <span class="ruby-comment"># === end custom/my_test.bxt ====== #</span>
207
+
208
+ <span class="ruby-identifier">bauxite</span> <span class="ruby-operator">-</span><span class="ruby-identifier">e</span> <span class="ruby-identifier">custom</span> <span class="ruby-identifier">custom</span><span class="ruby-operator">/</span><span class="ruby-identifier">my_test</span>.<span class="ruby-identifier">bxt</span>
209
+ </pre>
210
+ </dd><dt>--version
211
+ <dd>
212
+ <p>Shows the Bauxite version.</p>
213
+ </dd></dl>
214
+
215
+ <h2 id="class-Bauxite::Application-label-Exit+Status">Exit Status<span><a href="#class-Bauxite::Application-label-Exit+Status">&para;</a> <a href="#documentation">&uarr;</a></span></h2>
216
+
217
+ <p>The <code>bauxite</code> program exits with <code>zero</code> if every
218
+ action in the test succeeded and <code>non-zero</code> otherwise.</p>
219
+
220
+ <p>If the test run includes multiple <a
221
+ href="Action.html#method-i-test">Bauxite::Action#test</a> actions, the exit
222
+ status equals the number of failed test cases (again, <code>zero</code>
223
+ indicates success).</p>
224
+
225
+ </section>
226
+
227
+
228
+
229
+
230
+ <section id="5Buntitled-5D" class="documentation-section">
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+ </section>
241
+ </main>
242
+
243
+
244
+ <footer id="validator-badges" role="contentinfo">
245
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
246
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
247
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
248
+ </footer>
249
+