rsel 0.0.1 → 0.0.2
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.
- data/.gitignore +1 -0
- data/docs/history.md +15 -0
- data/docs/index.md +1 -0
- data/docs/todo.md +4 -5
- data/lib/rsel/selenium_test.rb +90 -44
- data/rsel.gemspec +1 -1
- data/spec/selenium_test_spec.rb +160 -45
- data/test/app.rb +4 -0
- data/test/views/thanks.erb +8 -0
- metadata +6 -4
data/.gitignore
CHANGED
data/docs/history.md
ADDED
data/docs/index.md
CHANGED
data/docs/todo.md
CHANGED
@@ -7,9 +7,8 @@ To-do list
|
|
7
7
|
mark the step as failed)
|
8
8
|
- Find a way to abort a test if something goes catastrophically wrong (such as
|
9
9
|
being unable to connect to the Selenium server)
|
10
|
+
- Verify the presence of images, links, buttons, checkboxes, etc.
|
11
|
+
- Click on images
|
12
|
+
- Support scoping qualifiers (somewhat like Kelp does)
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
- dropdown_includes
|
14
|
-
- dropdown_equals
|
15
|
-
|
14
|
+
Next: [History](history.md)
|
data/lib/rsel/selenium_test.rb
CHANGED
@@ -114,7 +114,7 @@ module Rsel
|
|
114
114
|
# Reload the current page.
|
115
115
|
#
|
116
116
|
# @example
|
117
|
-
# |
|
117
|
+
# | Refresh page |
|
118
118
|
#
|
119
119
|
def refresh_page
|
120
120
|
return_error_status do
|
@@ -126,7 +126,7 @@ module Rsel
|
|
126
126
|
# Maximize the browser window. May not work in some browsers.
|
127
127
|
#
|
128
128
|
# @example
|
129
|
-
# |
|
129
|
+
# | Maximize browser |
|
130
130
|
#
|
131
131
|
def maximize_browser
|
132
132
|
@browser.window_maximize
|
@@ -186,6 +186,38 @@ module Rsel
|
|
186
186
|
end
|
187
187
|
|
188
188
|
|
189
|
+
# Ensure that a link exists on the page.
|
190
|
+
#
|
191
|
+
# @param [String] locator
|
192
|
+
# Text or id of the link, or image alt text
|
193
|
+
#
|
194
|
+
# @example
|
195
|
+
# | Link | Logout | exists |
|
196
|
+
# | Link exists | Logout |
|
197
|
+
#
|
198
|
+
# @since 0.0.2
|
199
|
+
#
|
200
|
+
def link_exists(locator)
|
201
|
+
return @browser.element?(xpath('link', locator))
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
# Ensure that a button exists on the page.
|
206
|
+
#
|
207
|
+
# @param [String] locator
|
208
|
+
# Text, value, or id of the button
|
209
|
+
#
|
210
|
+
# @example
|
211
|
+
# | Button | Search | exists |
|
212
|
+
# | Button exists | Search |
|
213
|
+
#
|
214
|
+
# @since 0.0.2
|
215
|
+
#
|
216
|
+
def button_exists(locator)
|
217
|
+
return @browser.element?(xpath('button', locator))
|
218
|
+
end
|
219
|
+
|
220
|
+
|
189
221
|
# Type a value into the given field.
|
190
222
|
#
|
191
223
|
# @param [String] text
|
@@ -271,53 +303,38 @@ module Rsel
|
|
271
303
|
# Click on a link.
|
272
304
|
#
|
273
305
|
# @param [String] locator
|
274
|
-
#
|
306
|
+
# Text or id of the link, or image alt text
|
275
307
|
#
|
276
308
|
# @example
|
277
309
|
# | Click | Logout | link |
|
278
310
|
# | Click link | Logout |
|
311
|
+
# | Follow | Logout |
|
279
312
|
#
|
280
313
|
def click_link(locator)
|
281
314
|
return_error_status do
|
282
315
|
@browser.click(xpath('link', locator))
|
283
316
|
end
|
284
317
|
end
|
285
|
-
|
286
|
-
|
287
|
-
# Alias for {#click_link}.
|
288
|
-
#
|
289
|
-
# @example
|
290
|
-
# | Follow | Logout |
|
291
|
-
#
|
292
|
-
def follow(locator)
|
293
|
-
click_link(locator)
|
294
|
-
end
|
318
|
+
alias_method :follow, :click_link
|
295
319
|
|
296
320
|
|
297
321
|
# Press a button.
|
298
322
|
#
|
299
323
|
# @param [String] locator
|
300
|
-
#
|
324
|
+
# Text, value, or id of the button
|
301
325
|
#
|
302
326
|
# @example
|
303
|
-
# | Click |
|
304
|
-
# | Click button |
|
327
|
+
# | Click | Search | button |
|
328
|
+
# | Click button | Search |
|
329
|
+
# | Press | Login |
|
305
330
|
#
|
306
331
|
def click_button(locator)
|
332
|
+
# TODO: Make this fail when the button is disabled
|
307
333
|
return_error_status do
|
308
334
|
@browser.click(xpath('button', locator))
|
309
335
|
end
|
310
336
|
end
|
311
|
-
|
312
|
-
|
313
|
-
# Alias for {#click_button}
|
314
|
-
#
|
315
|
-
# @example
|
316
|
-
# | Press | Search |
|
317
|
-
#
|
318
|
-
def press(locator)
|
319
|
-
click_button(locator)
|
320
|
-
end
|
337
|
+
alias_method :press, :click_button
|
321
338
|
|
322
339
|
|
323
340
|
# Enable (check) a checkbox.
|
@@ -360,6 +377,8 @@ module Rsel
|
|
360
377
|
# @example
|
361
378
|
# | Checkbox is enabled | send me spam |
|
362
379
|
# | Checkbox | send me spam | is enabled |
|
380
|
+
# | Radio is enabled | medium |
|
381
|
+
# | Radio | medium | is enabled |
|
363
382
|
#
|
364
383
|
def checkbox_is_enabled(locator)
|
365
384
|
begin
|
@@ -370,6 +389,7 @@ module Rsel
|
|
370
389
|
return enabled
|
371
390
|
end
|
372
391
|
end
|
392
|
+
alias_method :radio_is_enabled, :checkbox_is_enabled
|
373
393
|
|
374
394
|
|
375
395
|
# Verify that a given checkbox or radiobutton is disabled (unchecked)
|
@@ -379,6 +399,9 @@ module Rsel
|
|
379
399
|
#
|
380
400
|
# @example
|
381
401
|
# | Checkbox is disabled | send me spam |
|
402
|
+
# | Checkbox | send me spam | is disabled |
|
403
|
+
# | Radio is disabled | medium |
|
404
|
+
# | Radio | medium | is disabled |
|
382
405
|
#
|
383
406
|
def checkbox_is_disabled(locator)
|
384
407
|
begin
|
@@ -389,6 +412,7 @@ module Rsel
|
|
389
412
|
return !enabled
|
390
413
|
end
|
391
414
|
end
|
415
|
+
alias_method :radio_is_disabled, :checkbox_is_disabled
|
392
416
|
|
393
417
|
|
394
418
|
# Select a radio button.
|
@@ -407,42 +431,63 @@ module Rsel
|
|
407
431
|
end
|
408
432
|
|
409
433
|
|
410
|
-
#
|
434
|
+
# Select an option from a dropdown/combo box.
|
435
|
+
#
|
436
|
+
# @param [String] option
|
437
|
+
# The option to choose from the dropdown
|
438
|
+
# @param [String] locator
|
439
|
+
# Label, name, or id of the dropdown
|
411
440
|
#
|
412
441
|
# @example
|
413
|
-
# |
|
414
|
-
# |
|
442
|
+
# | Select | Tall | from | Height | dropdown |
|
443
|
+
# | Select | Tall | from dropdown | Height |
|
415
444
|
#
|
416
|
-
def
|
417
|
-
|
445
|
+
def select_from_dropdown(option, locator)
|
446
|
+
return_error_status do
|
447
|
+
@browser.select(xpath('select', locator), option)
|
448
|
+
end
|
418
449
|
end
|
419
450
|
|
420
451
|
|
421
|
-
#
|
452
|
+
# Check whether an option exists in a dropdown/combo box.
|
453
|
+
#
|
454
|
+
# @param [String] locator
|
455
|
+
# Label, name, or id of the dropdown
|
456
|
+
# @param [String] option
|
457
|
+
# The option to look for
|
422
458
|
#
|
423
459
|
# @example
|
424
|
-
# |
|
425
|
-
#
|
460
|
+
# | Dropdown | Height | includes | Tall |
|
461
|
+
#
|
462
|
+
# @since 0.0.2
|
426
463
|
#
|
427
|
-
def
|
428
|
-
|
464
|
+
def dropdown_includes(locator, option)
|
465
|
+
dropdown = XPath::HTML.select(locator)
|
466
|
+
opt = dropdown[XPath::HTML.option(option)]
|
467
|
+
opt_str = opt.to_xpaths.join(' | ')
|
468
|
+
return @browser.element?("xpath=#{opt_str}")
|
429
469
|
end
|
430
470
|
|
431
471
|
|
432
|
-
#
|
472
|
+
# Check whether an option is currently selected in a dropdown/combo box.
|
433
473
|
#
|
434
|
-
# @param [String] value
|
435
|
-
# The value to choose from the dropdown
|
436
474
|
# @param [String] locator
|
437
475
|
# Label, name, or id of the dropdown
|
476
|
+
# @param [String] option
|
477
|
+
# The option you expect to be selected
|
438
478
|
#
|
439
479
|
# @example
|
440
|
-
# |
|
441
|
-
# | select | Tall | from dropdown | Height |
|
480
|
+
# | Dropdown | Height | equals | Tall |
|
442
481
|
#
|
443
|
-
|
444
|
-
|
445
|
-
|
482
|
+
# @since 0.0.2
|
483
|
+
#
|
484
|
+
def dropdown_equals(locator, option)
|
485
|
+
begin
|
486
|
+
selected = @browser.get_selected_label(xpath('select', locator))
|
487
|
+
rescue
|
488
|
+
return false
|
489
|
+
else
|
490
|
+
return selected == option
|
446
491
|
end
|
447
492
|
end
|
448
493
|
|
@@ -497,6 +542,7 @@ module Rsel
|
|
497
542
|
end
|
498
543
|
end
|
499
544
|
|
545
|
+
|
500
546
|
# Return a Selenium-style xpath for the given locator.
|
501
547
|
#
|
502
548
|
# @param [String] kind
|
data/rsel.gemspec
CHANGED
data/spec/selenium_test_spec.rb
CHANGED
@@ -1,25 +1,25 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) +
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
|
2
2
|
|
3
3
|
describe Rsel::SeleniumTest do
|
4
|
-
context
|
4
|
+
context "initialization" do
|
5
5
|
before(:each) do
|
6
|
-
@st.visit(
|
6
|
+
@st.visit("/")
|
7
7
|
end
|
8
8
|
|
9
9
|
it "sets correct default configuration" do
|
10
|
-
@st.url.should ==
|
11
|
-
@st.browser.host.should ==
|
10
|
+
@st.url.should == "http://localhost:8070/"
|
11
|
+
@st.browser.host.should == "localhost"
|
12
12
|
@st.browser.port.should == 4444
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
|
17
|
-
context
|
17
|
+
context "checkbox" do
|
18
18
|
before(:each) do
|
19
|
-
@st.visit(
|
19
|
+
@st.visit("/form").should be_true
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
describe "#enable_checkbox" do
|
23
23
|
context "passes when" do
|
24
24
|
it "checkbox with the given label is present" do
|
25
25
|
@st.enable_checkbox("I like cheese").should be_true
|
@@ -35,7 +35,7 @@ describe Rsel::SeleniumTest do
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
-
|
38
|
+
describe "#disable_checkbox" do
|
39
39
|
context "passes when" do
|
40
40
|
it "checkbox with the given label is present" do
|
41
41
|
@st.disable_checkbox("I like cheese").should be_true
|
@@ -50,7 +50,7 @@ describe Rsel::SeleniumTest do
|
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
|
-
|
53
|
+
describe "#checkbox_is_enabled" do
|
54
54
|
context "passes when" do
|
55
55
|
it "checkbox with the given label exists and is checked" do
|
56
56
|
@st.enable_checkbox("I like cheese").should be_true
|
@@ -70,7 +70,7 @@ describe Rsel::SeleniumTest do
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
-
|
73
|
+
describe "#checkbox_is_disabled" do
|
74
74
|
context "passes when" do
|
75
75
|
it "checkbox with the given label exists and is unchecked" do
|
76
76
|
@st.disable_checkbox("I like cheese").should be_true
|
@@ -92,21 +92,21 @@ describe Rsel::SeleniumTest do
|
|
92
92
|
end
|
93
93
|
|
94
94
|
|
95
|
-
context
|
95
|
+
context "dropdowns" do
|
96
96
|
before(:each) do
|
97
|
-
@st.visit(
|
97
|
+
@st.visit("/form").should be_true
|
98
98
|
end
|
99
99
|
|
100
|
-
context "
|
100
|
+
context "#select_from_dropdown" do
|
101
101
|
context "passes when" do
|
102
|
-
it "
|
102
|
+
it "option exists in the dropdown" do
|
103
103
|
@st.select_from_dropdown("Tall", "Height").should be_true
|
104
104
|
@st.select_from_dropdown("Medium", "Weight").should be_true
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
108
108
|
context "fails when" do
|
109
|
-
it "dropdown exists, but the
|
109
|
+
it "dropdown exists, but the option doesn't" do
|
110
110
|
@st.select_from_dropdown("Giant", "Height").should be_false
|
111
111
|
@st.select_from_dropdown("Obese", "Weight").should be_false
|
112
112
|
end
|
@@ -117,18 +117,69 @@ describe Rsel::SeleniumTest do
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
-
context "
|
121
|
-
|
120
|
+
context "#dropdown_includes" do
|
121
|
+
context "passes when" do
|
122
|
+
it "option exists in the dropdown" do
|
123
|
+
@st.dropdown_includes("Height", "Tall").should be_true
|
124
|
+
@st.dropdown_includes("Weight", "Medium").should be_true
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context "fails when" do
|
129
|
+
it "dropdown exists, but the option doesn't" do
|
130
|
+
@st.dropdown_includes("Height", "Giant").should be_false
|
131
|
+
@st.dropdown_includes("Weight", "Obese").should be_false
|
132
|
+
end
|
133
|
+
|
134
|
+
it "no such dropdown exists" do
|
135
|
+
@st.dropdown_includes("Eggs", "Over easy").should be_false
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context "#dropdown_equals" do
|
141
|
+
context "passes when" do
|
142
|
+
it "option is selected in the dropdown" do
|
143
|
+
@st.select_from_dropdown("Short", "Height")
|
144
|
+
@st.dropdown_equals("Height", "Short").should be_true
|
145
|
+
|
146
|
+
@st.select_from_dropdown("Average", "Height")
|
147
|
+
@st.dropdown_equals("Height", "Average").should be_true
|
148
|
+
|
149
|
+
@st.select_from_dropdown("Tall", "Height")
|
150
|
+
@st.dropdown_equals("Height", "Tall").should be_true
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
context "fails when" do
|
155
|
+
it "dropdown exists, but the option is not selected" do
|
156
|
+
@st.select_from_dropdown("Short", "Height")
|
157
|
+
@st.dropdown_equals("Height", "Average").should be_false
|
158
|
+
@st.dropdown_equals("Height", "Tall").should be_false
|
159
|
+
|
160
|
+
@st.select_from_dropdown("Average", "Height")
|
161
|
+
@st.dropdown_equals("Height", "Short").should be_false
|
162
|
+
@st.dropdown_equals("Height", "Tall").should be_false
|
163
|
+
|
164
|
+
@st.select_from_dropdown("Tall", "Height")
|
165
|
+
@st.dropdown_equals("Height", "Short").should be_false
|
166
|
+
@st.dropdown_equals("Height", "Average").should be_false
|
167
|
+
end
|
168
|
+
|
169
|
+
it "no such dropdown exists" do
|
170
|
+
@st.dropdown_equals("Eggs", "Over easy").should be_false
|
171
|
+
end
|
172
|
+
end
|
122
173
|
end
|
123
174
|
end
|
124
175
|
|
125
176
|
|
126
|
-
context
|
177
|
+
context "navigation" do
|
127
178
|
before(:each) do
|
128
|
-
@st.visit(
|
179
|
+
@st.visit("/").should be_true
|
129
180
|
end
|
130
181
|
|
131
|
-
|
182
|
+
describe "#visit" do
|
132
183
|
context "passes when" do
|
133
184
|
it "page exists" do
|
134
185
|
@st.visit("/about").should be_true
|
@@ -146,7 +197,7 @@ describe Rsel::SeleniumTest do
|
|
146
197
|
# TODO
|
147
198
|
end
|
148
199
|
|
149
|
-
|
200
|
+
describe "#click_back" do
|
150
201
|
it "passes and loads the correct URL" do
|
151
202
|
@st.visit("/about")
|
152
203
|
@st.visit("/")
|
@@ -159,8 +210,15 @@ describe Rsel::SeleniumTest do
|
|
159
210
|
# same session
|
160
211
|
#end
|
161
212
|
end
|
213
|
+
end
|
214
|
+
|
215
|
+
|
216
|
+
context "links" do
|
217
|
+
before(:each) do
|
218
|
+
@st.visit("/").should be_true
|
219
|
+
end
|
162
220
|
|
163
|
-
|
221
|
+
describe "#click_link" do
|
164
222
|
it "passes and loads the correct page when a link exists" do
|
165
223
|
@st.click_link("About this site").should be_true
|
166
224
|
@st.see_title("About this site").should be_true
|
@@ -168,18 +226,75 @@ describe Rsel::SeleniumTest do
|
|
168
226
|
end
|
169
227
|
|
170
228
|
it "fails when a link does not exist" do
|
171
|
-
@st.
|
229
|
+
@st.click_link("Bogus link").should be_false
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
describe "#link_exists" do
|
234
|
+
context "passes when" do
|
235
|
+
it "link with the given text exists" do
|
236
|
+
@st.link_exists("About this site").should be_true
|
237
|
+
@st.link_exists("Form test").should be_true
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
context "fails when" do
|
242
|
+
it "no such link exists" do
|
243
|
+
@st.link_exists("Welcome").should be_false
|
244
|
+
@st.link_exists("Don't click here").should be_false
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
|
251
|
+
context "buttons" do
|
252
|
+
before(:each) do
|
253
|
+
@st.visit("/form").should be_true
|
254
|
+
end
|
255
|
+
|
256
|
+
describe "#click_button" do
|
257
|
+
context "passes when" do
|
258
|
+
it "button exists and is enabled" do
|
259
|
+
@st.click_button("Submit person form").should be_true
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
context "fails when" do
|
264
|
+
it "button does not exist" do
|
265
|
+
@st.click_button("No such button").should be_false
|
266
|
+
end
|
267
|
+
|
268
|
+
it "button exists but is disabled" do
|
269
|
+
# TODO
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
describe "#button_exists" do
|
275
|
+
context "passes when" do
|
276
|
+
it "button with the given text exists" do
|
277
|
+
@st.button_exists("Submit person form").should be_true
|
278
|
+
@st.button_exists("Save preferences").should be_true
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
context "fails when" do
|
283
|
+
it "no such button exists" do
|
284
|
+
@st.button_exists("Apple").should be_false
|
285
|
+
@st.button_exists("Big Red").should be_false
|
286
|
+
end
|
172
287
|
end
|
173
288
|
end
|
174
289
|
end
|
175
290
|
|
176
291
|
|
177
|
-
context
|
292
|
+
context "fields" do
|
178
293
|
before(:each) do
|
179
|
-
@st.visit(
|
294
|
+
@st.visit("/form").should be_true
|
180
295
|
end
|
181
296
|
|
182
|
-
|
297
|
+
describe "#type_into_field" do
|
183
298
|
context "passes when" do
|
184
299
|
it "text field with the given label exists" do
|
185
300
|
@st.type_into_field("Eric", "First name").should be_true
|
@@ -210,7 +325,7 @@ describe Rsel::SeleniumTest do
|
|
210
325
|
end
|
211
326
|
end
|
212
327
|
|
213
|
-
|
328
|
+
describe "#field_contains" do
|
214
329
|
context "passes when" do
|
215
330
|
it "textarea contains the text" do
|
216
331
|
@st.fill_in_with("Life story", "Blah dee blah")
|
@@ -226,7 +341,7 @@ describe Rsel::SeleniumTest do
|
|
226
341
|
end
|
227
342
|
end
|
228
343
|
|
229
|
-
|
344
|
+
describe "#field_equals" do
|
230
345
|
context "passes when" do
|
231
346
|
it "textarea equals the text" do
|
232
347
|
@st.fill_in_with("Life story", "Blah dee blah")
|
@@ -244,50 +359,50 @@ describe Rsel::SeleniumTest do
|
|
244
359
|
end
|
245
360
|
|
246
361
|
|
247
|
-
context
|
362
|
+
context "visibility" do
|
248
363
|
before(:each) do
|
249
|
-
@st.visit(
|
364
|
+
@st.visit("/").should be_true
|
250
365
|
end
|
251
366
|
|
252
|
-
|
367
|
+
describe "#see" do
|
253
368
|
context "passes when" do
|
254
369
|
it "text is present" do
|
255
|
-
@st.see(
|
256
|
-
@st.see(
|
370
|
+
@st.see("Welcome").should be_true
|
371
|
+
@st.see("This is a Sinatra webapp").should be_true
|
257
372
|
end
|
258
373
|
end
|
259
374
|
|
260
375
|
context "fails when" do
|
261
376
|
it "text is absent" do
|
262
|
-
@st.see(
|
263
|
-
@st.see(
|
377
|
+
@st.see("Nonexistent").should be_false
|
378
|
+
@st.see("Some bogus text").should be_false
|
264
379
|
end
|
265
380
|
end
|
266
381
|
|
267
382
|
it "is case-sensitive" do
|
268
|
-
@st.see(
|
269
|
-
@st.see(
|
383
|
+
@st.see("Sinatra webapp").should be_true
|
384
|
+
@st.see("sinatra Webapp").should be_false
|
270
385
|
end
|
271
386
|
end
|
272
387
|
|
273
|
-
|
388
|
+
describe "#do_not_see" do
|
274
389
|
context "passes when" do
|
275
390
|
it "text is absent" do
|
276
|
-
@st.do_not_see(
|
277
|
-
@st.do_not_see(
|
391
|
+
@st.do_not_see("Nonexistent").should be_true
|
392
|
+
@st.do_not_see("Some bogus text").should be_true
|
278
393
|
end
|
279
394
|
end
|
280
395
|
|
281
396
|
context "fails when" do
|
282
397
|
it "fails when test is present" do
|
283
|
-
@st.do_not_see(
|
284
|
-
@st.do_not_see(
|
398
|
+
@st.do_not_see("Welcome").should be_false
|
399
|
+
@st.do_not_see("This is a Sinatra webapp").should be_false
|
285
400
|
end
|
286
401
|
end
|
287
402
|
|
288
403
|
it "is case-sensitive" do
|
289
|
-
@st.do_not_see(
|
290
|
-
@st.do_not_see(
|
404
|
+
@st.do_not_see("Sinatra webapp").should be_false
|
405
|
+
@st.do_not_see("sinatra Webapp").should be_true
|
291
406
|
end
|
292
407
|
end
|
293
408
|
end
|
data/test/app.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rsel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Marcus French
|
@@ -17,7 +17,7 @@ autorequire:
|
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2011-07-
|
20
|
+
date: 2011-07-21 00:00:00 -06:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -153,6 +153,7 @@ files:
|
|
153
153
|
- Rakefile
|
154
154
|
- docs/custom.md
|
155
155
|
- docs/development.md
|
156
|
+
- docs/history.md
|
156
157
|
- docs/index.md
|
157
158
|
- docs/install.md
|
158
159
|
- docs/todo.md
|
@@ -168,6 +169,7 @@ files:
|
|
168
169
|
- test/views/about.erb
|
169
170
|
- test/views/form.erb
|
170
171
|
- test/views/index.erb
|
172
|
+
- test/views/thanks.erb
|
171
173
|
- vendor/rubyslim-0.1.1/.gitignore
|
172
174
|
- vendor/rubyslim-0.1.1/README.md
|
173
175
|
- vendor/rubyslim-0.1.1/Rakefile
|