watirmark 5.14.16
Sign up to get free protection for your applications and to get access to all the features.
- data/app_generators/create_project/create_project_generator.rb +115 -0
- data/app_generators/create_project/templates/features/env.rb.erb +8 -0
- data/app_generators/create_project/templates/features/model_steps.rb.erb +9 -0
- data/app_generators/create_project/templates/features/post_error_steps.rb.erb +15 -0
- data/app_generators/create_project/templates/features/sample.feature.erb +5 -0
- data/app_generators/create_project/templates/features/site_steps.rb.erb +7 -0
- data/app_generators/create_project/templates/generators/controller.rb.erb +9 -0
- data/app_generators/create_project/templates/generators/generate.rb.erb +9 -0
- data/app_generators/create_project/templates/generators/model.rb.erb +7 -0
- data/app_generators/create_project/templates/generators/mvc_generator.rb.erb +100 -0
- data/app_generators/create_project/templates/generators/rbeautify.rb.erb +212 -0
- data/app_generators/create_project/templates/generators/view.rb.erb +16 -0
- data/app_generators/create_project/templates/generators/workflow_loader.rb.erb +1 -0
- data/app_generators/create_project/templates/library/base_controller.rb.erb +9 -0
- data/app_generators/create_project/templates/library/base_view.rb.erb +6 -0
- data/app_generators/create_project/templates/library/configuration.rb.erb +6 -0
- data/app_generators/create_project/templates/library/core_libraries.rb.erb +9 -0
- data/app_generators/create_project/templates/library/loader.rb.erb +23 -0
- data/app_generators/create_project/templates/library/page_load_checker.rb.erb +11 -0
- data/app_generators/create_project/templates/library/post_errors_checker.rb.erb +23 -0
- data/app_generators/create_project/templates/library/project_require_file.rb.erb +8 -0
- data/app_generators/create_project/templates/library/search_controller.rb.erb +12 -0
- data/app_generators/create_project/templates/library/workflows.rb.erb +0 -0
- data/app_generators/create_project/templates/project/config.yml.erb +3 -0
- data/app_generators/create_project/templates/project/gemfile.rb.erb +11 -0
- data/app_generators/create_project/templates/project/rakefile.rb.erb +21 -0
- data/bin/etapestry/Gemfile +11 -0
- data/bin/etapestry/config.yml +3 -0
- data/bin/etapestry/features/etapestry_home.feature +5 -0
- data/bin/etapestry/features/step_definitions/model_steps.rb +9 -0
- data/bin/etapestry/features/step_definitions/post_error_steps.rb +15 -0
- data/bin/etapestry/features/step_definitions/site_steps.rb +7 -0
- data/bin/etapestry/features/support/env.rb +8 -0
- data/bin/etapestry/generators/mvc/mvc_generator.rb +100 -0
- data/bin/etapestry/generators/mvc/rbeautify.rb +212 -0
- data/bin/etapestry/generators/mvc/templates/controller.rb.erb +9 -0
- data/bin/etapestry/generators/mvc/templates/model.rb.erb +7 -0
- data/bin/etapestry/generators/mvc/templates/view.rb.erb +16 -0
- data/bin/etapestry/generators/mvc/templates/workflow_loader.rb.erb +1 -0
- data/bin/etapestry/lib/etapestry.rb +8 -0
- data/bin/etapestry/lib/etapestry/checkers/page_load_checker.rb +11 -0
- data/bin/etapestry/lib/etapestry/checkers/post_errors_checker.rb +23 -0
- data/bin/etapestry/lib/etapestry/configuration.rb +6 -0
- data/bin/etapestry/lib/etapestry/core_libraries.rb +9 -0
- data/bin/etapestry/lib/etapestry/loader.rb +23 -0
- data/bin/etapestry/lib/etapestry/site/base_controller.rb +9 -0
- data/bin/etapestry/lib/etapestry/site/base_view.rb +6 -0
- data/bin/etapestry/lib/etapestry/site/search_controller.rb +12 -0
- data/bin/etapestry/lib/etapestry/workflows.rb +0 -0
- data/bin/etapestry/rakefile.rb +21 -0
- data/bin/etapestry/script/generate.rb +9 -0
- data/bin/twitter/features/hashtag_search.feature +93 -0
- data/bin/twitter/features/step_definitions/hashtag_steps.rb +9 -0
- data/bin/twitter/lib/twitter/workflows/search/result_controller.rb +13 -0
- data/bin/twitter/lib/twitter/workflows/search/result_model.rb +5 -0
- data/bin/twitter/lib/twitter/workflows/search/result_view.rb +19 -0
- data/bin/watirmark +10 -0
- data/lib/watirmark.rb +26 -0
- data/lib/watirmark/at_exit.rb +13 -0
- data/lib/watirmark/configuration.rb +201 -0
- data/lib/watirmark/controller/actions.rb +172 -0
- data/lib/watirmark/controller/assertions.rb +116 -0
- data/lib/watirmark/controller/controller.rb +191 -0
- data/lib/watirmark/controller/dialogs.rb +33 -0
- data/lib/watirmark/controller/matcher.rb +19 -0
- data/lib/watirmark/cucumber/cuke_helper.rb +150 -0
- data/lib/watirmark/cucumber/email_helper.rb +103 -0
- data/lib/watirmark/cucumber/env.rb +9 -0
- data/lib/watirmark/cucumber/hooks.rb +16 -0
- data/lib/watirmark/cucumber/model_helper.rb +34 -0
- data/lib/watirmark/cucumber/transforms.rb +55 -0
- data/lib/watirmark/exceptions.rb +15 -0
- data/lib/watirmark/extensions/ruby_extensions.rb +129 -0
- data/lib/watirmark/extensions/webdriver_extensions.rb +150 -0
- data/lib/watirmark/formatters/snapshot_formatter.rb +23 -0
- data/lib/watirmark/loader.rb +87 -0
- data/lib/watirmark/model.rb +3 -0
- data/lib/watirmark/models/cucumber_helper.rb +49 -0
- data/lib/watirmark/models/debug_methods.rb +21 -0
- data/lib/watirmark/models/default_values.rb +21 -0
- data/lib/watirmark/models/factory.rb +168 -0
- data/lib/watirmark/models/factory_method_generators.rb +84 -0
- data/lib/watirmark/models/factory_methods.rb +72 -0
- data/lib/watirmark/models/trait.rb +35 -0
- data/lib/watirmark/models/upload_csv.rb +24 -0
- data/lib/watirmark/page/keyed_element.rb +63 -0
- data/lib/watirmark/page/page.rb +50 -0
- data/lib/watirmark/page/page_definition.rb +187 -0
- data/lib/watirmark/page/process_page.rb +112 -0
- data/lib/watirmark/page/radio_maps.rb +53 -0
- data/lib/watirmark/profile.rb +22 -0
- data/lib/watirmark/rake/smoketest.rb +17 -0
- data/lib/watirmark/screenshot.rb +127 -0
- data/lib/watirmark/session.rb +115 -0
- data/lib/watirmark/version.rb +5 -0
- data/spec/assertions_spec.rb +95 -0
- data/spec/config_spec.rb +82 -0
- data/spec/controller_actions_spec.rb +91 -0
- data/spec/controller_spec.rb +426 -0
- data/spec/controllers_and_models_spec.rb +52 -0
- data/spec/model_factory_spec.rb +568 -0
- data/spec/model_traits_spec.rb +141 -0
- data/spec/page_spec.rb +127 -0
- data/spec/process_page_spec.rb +163 -0
- data/spec/spec_helper.rb +17 -0
- metadata +238 -0
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'watirmark/configuration'
|
2
|
+
Watirmark::Configuration.instance.defaults = {:create_master_snapshots => false}
|
3
|
+
|
4
|
+
module Watirmark
|
5
|
+
module Screenshot
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def take
|
9
|
+
CurrentScreenShots.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def compare_screenshots(masters, currents)
|
13
|
+
raise ArgumentError, "Passed invalid arguments to compare_screenshots" unless masters.kind_of?(MasterAlbum) && currents.kind_of?(CurrentScreenShots)
|
14
|
+
|
15
|
+
if Watirmark::Configuration.instance.snapshotwidth.kind_of?(Fixnum)
|
16
|
+
compare_specific_screenshot_size(currents, masters)
|
17
|
+
else
|
18
|
+
compare_standard_screenshot_sizes(currents, masters)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def compare_specific_screenshot_size(currents, masters)
|
23
|
+
unless currents.screenshots.md5 == masters.album.md5
|
24
|
+
report_failure(currents.screenshots.filename, masters.album.filename)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def compare_standard_screenshot_sizes(currents, masters)
|
29
|
+
masters.album.each_with_index do |master, index|
|
30
|
+
unless currents.screenshots[index].md5 == master.md5
|
31
|
+
report_failure(currents.screenshots[index].filename, masters.filename)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def report_failure(current, master)
|
37
|
+
Watirmark.logger.info "Checking Snapshot:\n master: #{master}\n screenshot: #{current}"
|
38
|
+
raise ArgumentError, "Master snapshot: #{File.expand_path(master)} does not match current snapshot: #{File.expand_path(current)}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class CurrentScreenShots
|
43
|
+
attr_accessor :screenshots
|
44
|
+
|
45
|
+
def initialize
|
46
|
+
if Watirmark::Configuration.instance.snapshotwidth.kind_of?(Fixnum)
|
47
|
+
@screenshots = Current.new
|
48
|
+
else
|
49
|
+
widths = Watirmark::Configuration.instance.snapshotwidth.split(",").map {|s| s.to_i}
|
50
|
+
@screenshots = []
|
51
|
+
widths.each {|width| @screenshots << Current.new(width) }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class MasterAlbum
|
57
|
+
attr_accessor :album
|
58
|
+
|
59
|
+
def initialize(filename, screenshot)
|
60
|
+
if Watirmark::Configuration.instance.snapshotwidth.kind_of?(Fixnum)
|
61
|
+
@album = Master.new(filename, screenshot.screenshots)
|
62
|
+
else
|
63
|
+
widths = Watirmark::Configuration.instance.snapshotwidth.split(",").map {|s| s.to_i}
|
64
|
+
@album = []
|
65
|
+
widths.each_with_index do |width, index|
|
66
|
+
@album << Master.new(filename.sub(/\.png/, "_width_#{width}.png"), screenshot.screenshots[index])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
class Current
|
73
|
+
attr_accessor :filename, :screenwidth, :screenheight
|
74
|
+
|
75
|
+
def initialize(snapshotwidth=Watirmark::Configuration.instance.snapshotwidth)
|
76
|
+
get_screen_size
|
77
|
+
FileUtils.mkdir_p('reports/screenshots')
|
78
|
+
take_screen_shot(snapshotwidth)
|
79
|
+
revert_window_size
|
80
|
+
end
|
81
|
+
|
82
|
+
def take_screen_shot(snapshotwidth)
|
83
|
+
update_window_size(snapshotwidth)
|
84
|
+
@filename = "reports/screenshots/#{UUID.new.generate(:compact)}.png"
|
85
|
+
focus_browser
|
86
|
+
Page.browser.screenshot.save @filename
|
87
|
+
end
|
88
|
+
|
89
|
+
def md5
|
90
|
+
Digest::MD5.hexdigest(File.read(@filename))
|
91
|
+
end
|
92
|
+
|
93
|
+
def update_window_size(width)
|
94
|
+
Page.browser.window.resize_to(width, Watirmark::Configuration.instance.snapshotheight)
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_screen_size
|
98
|
+
size = Page.browser.window.size
|
99
|
+
@screenwidth = size.width
|
100
|
+
@screenheight = size.height
|
101
|
+
end
|
102
|
+
|
103
|
+
def revert_window_size
|
104
|
+
Page.browser.window.resize_to(@screenwidth, @screenheight)
|
105
|
+
end
|
106
|
+
|
107
|
+
def focus_browser
|
108
|
+
Page.browser.element.click
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class Master < Current
|
113
|
+
def initialize(filename, screenshot)
|
114
|
+
@filename = filename
|
115
|
+
update(screenshot) if Watirmark::Configuration.instance.create_master_snapshots
|
116
|
+
end
|
117
|
+
|
118
|
+
def update(screenshot)
|
119
|
+
FileUtils.mkdir_p(File.dirname(@filename))
|
120
|
+
File.unlink(@filename) if File.exists?(@filename)
|
121
|
+
FileUtils.copy_file(screenshot.filename, @filename)
|
122
|
+
Watirmark.logger.info "Created new master: #@filename"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module Watirmark
|
2
|
+
|
3
|
+
# This functionality allows us to ignore and buffer
|
4
|
+
# post failures and then compare on a cucumber step
|
5
|
+
module CucumberPostFailureBuffering
|
6
|
+
@@buffer_post_failure = false
|
7
|
+
|
8
|
+
def post_failure
|
9
|
+
@@post_failure
|
10
|
+
end
|
11
|
+
|
12
|
+
def post_failure=(x)
|
13
|
+
@@post_failure = x
|
14
|
+
end
|
15
|
+
|
16
|
+
def buffer_post_failure
|
17
|
+
@@buffer_post_failure
|
18
|
+
end
|
19
|
+
|
20
|
+
def catch_post_failures(&block)
|
21
|
+
@@post_failure = nil
|
22
|
+
@@buffer_post_failure = true
|
23
|
+
block.call
|
24
|
+
@@buffer_post_failure = false
|
25
|
+
@@post_failure
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class Session
|
30
|
+
include Singleton
|
31
|
+
include CucumberPostFailureBuffering
|
32
|
+
|
33
|
+
POST_WAIT_CHECKERS = []
|
34
|
+
|
35
|
+
def browser
|
36
|
+
Page.browser
|
37
|
+
end
|
38
|
+
|
39
|
+
def browser=(x)
|
40
|
+
Page.browser = x
|
41
|
+
end
|
42
|
+
|
43
|
+
def config
|
44
|
+
Watirmark::Configuration.instance
|
45
|
+
end
|
46
|
+
|
47
|
+
# set up the global variables, reading from the config file
|
48
|
+
def initialize
|
49
|
+
Watirmark.add_exit_task {
|
50
|
+
closebrowser if config.closebrowseronexit
|
51
|
+
}
|
52
|
+
config.firefox_profile = default_firefox_profile if config.webdriver.to_s == 'firefox'
|
53
|
+
end
|
54
|
+
|
55
|
+
def default_firefox_profile
|
56
|
+
if Configuration.instance.default_firefox_profile
|
57
|
+
Watirmark.logger.info "Using firefox profile: #{Configuration.instance.default_firefox_profile}"
|
58
|
+
profile = Selenium::WebDriver::Firefox::Profile.from_name Configuration.instance.default_firefox_profile
|
59
|
+
else
|
60
|
+
profile = Selenium::WebDriver::Firefox::Profile.new
|
61
|
+
end
|
62
|
+
profile.native_events = false
|
63
|
+
if Configuration.instance.projectpath
|
64
|
+
download_directory = File.join(Configuration.instance.projectpath, "reports", "downloads")
|
65
|
+
download_directory.gsub!("/", "\\") if Selenium::WebDriver::Platform.windows?
|
66
|
+
profile['browser.download.folderList'] = 2 # custom location
|
67
|
+
profile['browser.download.dir'] = download_directory
|
68
|
+
profile['browser.helperApps.neverAsk.saveToDisk'] = "text/csv,application/pdf"
|
69
|
+
end
|
70
|
+
profile
|
71
|
+
end
|
72
|
+
|
73
|
+
def newsession
|
74
|
+
closebrowser
|
75
|
+
openbrowser
|
76
|
+
end
|
77
|
+
|
78
|
+
def openbrowser
|
79
|
+
Page.browser = new_watir_browser
|
80
|
+
initialize_page_checkers
|
81
|
+
initialize_screenshots
|
82
|
+
Page.browser
|
83
|
+
end
|
84
|
+
|
85
|
+
def closebrowser
|
86
|
+
begin
|
87
|
+
Page.browser.close
|
88
|
+
rescue Errno::ECONNREFUSED
|
89
|
+
# browser already closed or unavailable
|
90
|
+
ensure
|
91
|
+
Page.browser = nil
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def new_watir_browser
|
98
|
+
config.webdriver ||= :firefox
|
99
|
+
if config.webdriver.to_sym == :firefox
|
100
|
+
Watir::Browser.new config.webdriver.to_sym, :profile => config.firefox_profile
|
101
|
+
else
|
102
|
+
Watir::Browser.new config.webdriver.to_sym
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def initialize_screenshots
|
107
|
+
Page.browser.screenshot.base64
|
108
|
+
end
|
109
|
+
|
110
|
+
def initialize_page_checkers
|
111
|
+
POST_WAIT_CHECKERS.each { |p| Page.browser.add_checker p }
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Watirmark::Assertions do
|
4
|
+
include Watirmark::Assertions
|
5
|
+
|
6
|
+
it 'can compare simple elements' do
|
7
|
+
element = stub(:exists? => true, :value => 'giant vampire squid', :radio_map => nil)
|
8
|
+
assert_equal element, 'giant vampire squid'
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'compare integer' do
|
12
|
+
element = stub(:exists? => true, :value => '100')
|
13
|
+
assert_equal element, 100
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'compare string integer' do
|
17
|
+
element = stub(:exists? => true, :value => '100')
|
18
|
+
assert_equal element, '100'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'expecting value with with percent' do
|
22
|
+
element = stub(:exists? => true, :value => '100%')
|
23
|
+
assert_equal element, '100%'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'expecting value with with a currency symbol' do
|
27
|
+
element = stub(:exists? => true, :value => '$123.45')
|
28
|
+
assert_equal element, '$123.45'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'expecting integer value should strip the dollar sign' do
|
32
|
+
element = stub(:exists? => true, :value => '$25')
|
33
|
+
assert_equal element, '25'
|
34
|
+
assert_equal element, '$25'
|
35
|
+
lambda { assert_equal element, '25%' }.should raise_error
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'symbol in wrong place needs to match exactly or fail' do
|
39
|
+
element = stub(:exists? => true, :value => '25$')
|
40
|
+
lambda { assert_equal element, '$25' }.should raise_error
|
41
|
+
assert_equal element, '25$'
|
42
|
+
|
43
|
+
element = stub(:exists? => true, :value => '%50')
|
44
|
+
lambda { assert_equal element, '50%' }.should raise_error
|
45
|
+
lambda { assert_equal element, '50' }.should raise_error
|
46
|
+
assert_equal element, '%50'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should detect two different numbers are different' do
|
50
|
+
element = stub(:exists? => true, :value => '50')
|
51
|
+
lambda { assert_equal element, '51' }.should raise_error
|
52
|
+
lambda { assert_equal element, '50.1' }.should raise_error
|
53
|
+
lambda { assert_equal element, 49.9 }.should raise_error
|
54
|
+
lambda { assert_equal element, 49 }.should raise_error
|
55
|
+
assert_equal element, 50.0
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'should let a number match a number with a $ before or % after' do
|
59
|
+
element = stub(:exists? => true, :value => '$26', :name => 'unittest')
|
60
|
+
assert_equal element, 26
|
61
|
+
element = stub(:exists? => true, :value => '27%', :name => 'unittest')
|
62
|
+
assert_equal element, 27.00
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should let a number in a string match a number with currency or percent' do
|
66
|
+
element = stub(:exists? => true, :value => '$36', :name => 'unittest')
|
67
|
+
assert_equal element, '36'
|
68
|
+
element = stub(:exists? => true, :value => '37%', :name => 'unittest')
|
69
|
+
assert_equal element, '37.00'
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "normalize_values" do
|
75
|
+
include Watirmark::Assertions
|
76
|
+
|
77
|
+
specify 'normalize dates' do
|
78
|
+
normalize_value("1/1/2012").should == Date.parse('1/1/2012')
|
79
|
+
normalize_value("1/1/09").should == Date.parse('1/1/09')
|
80
|
+
normalize_value("01/1/09").should == Date.parse('1/1/09')
|
81
|
+
normalize_value("01/01/09").should == Date.parse('1/1/09')
|
82
|
+
end
|
83
|
+
specify 'normalize whitespace' do
|
84
|
+
normalize_value(" a").should == "a"
|
85
|
+
normalize_value("a ").should == "a"
|
86
|
+
normalize_value("a\n").should == "a"
|
87
|
+
normalize_value("\na").should == "a"
|
88
|
+
normalize_value(" a \nb").should == "a \nb"
|
89
|
+
normalize_value(" a \r\nb").should == "a \nb"
|
90
|
+
normalize_value(" a \nb\n").should == "a \nb"
|
91
|
+
end
|
92
|
+
specify 'do not normalize string of spaces' do
|
93
|
+
normalize_value(' ').should == ' '
|
94
|
+
end
|
95
|
+
end
|
data/spec/config_spec.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
shared_examples_for "configuration_file" do
|
4
|
+
specify 'string' do
|
5
|
+
@config.string.should == "foo"
|
6
|
+
end
|
7
|
+
|
8
|
+
specify 'true_boolean' do
|
9
|
+
@config.true_boolean.should be_true
|
10
|
+
end
|
11
|
+
|
12
|
+
specify 'false_boolean' do
|
13
|
+
@config.false_boolean.should be_false
|
14
|
+
end
|
15
|
+
|
16
|
+
specify 'symbol' do
|
17
|
+
@config.symbol.should == :foo
|
18
|
+
end
|
19
|
+
|
20
|
+
specify 'integer' do
|
21
|
+
@config.integer.should == 3
|
22
|
+
end
|
23
|
+
|
24
|
+
specify 'float' do
|
25
|
+
@config.float.should == 1.2
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "text file" do
|
30
|
+
it_behaves_like "configuration_file"
|
31
|
+
|
32
|
+
before :all do
|
33
|
+
@config = Watirmark::Configuration.instance
|
34
|
+
@config.reset
|
35
|
+
@config.configfile = File.dirname(__FILE__) + '/configurations/config.txt'
|
36
|
+
@config.read_from_file
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "yaml file" do
|
41
|
+
it_behaves_like "configuration_file"
|
42
|
+
|
43
|
+
before :all do
|
44
|
+
@config = Watirmark::Configuration.instance
|
45
|
+
@config.reset
|
46
|
+
@config.configfile = File.dirname(__FILE__) + '/configurations/config.yml'
|
47
|
+
@config.read_from_file
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "configuration" do
|
52
|
+
before :all do
|
53
|
+
@config = Watirmark::Configuration.instance
|
54
|
+
@config.reset
|
55
|
+
@config.reload
|
56
|
+
end
|
57
|
+
|
58
|
+
specify 'add defaults' do
|
59
|
+
@config.email.should == 'devnull'
|
60
|
+
@config.webdriver.should == 'firefox'
|
61
|
+
@config.defaults = {:email => 'email-changed'}
|
62
|
+
@config.email.should == 'email-changed'
|
63
|
+
@config.webdriver.should == 'firefox'
|
64
|
+
end
|
65
|
+
|
66
|
+
specify 'inspect' do
|
67
|
+
@config.inspect.should =~ /^{.+}/
|
68
|
+
end
|
69
|
+
|
70
|
+
specify 'override how a setting is set' do
|
71
|
+
module Watirmark
|
72
|
+
class Configuration
|
73
|
+
def hostname_value(hostname)
|
74
|
+
hostname + '/test'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
Watirmark::Configuration.instance.hostname = 'www.convio.com'
|
79
|
+
Watirmark::Configuration.instance.hostname.should == 'www.convio.com/test'
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
describe Watirmark::Actions do
|
4
|
+
before :all do
|
5
|
+
class ActionView < Page
|
6
|
+
private_keyword(:a)
|
7
|
+
private_keyword(:b)
|
8
|
+
end
|
9
|
+
|
10
|
+
class ActionController < Watirmark::WebPage::Controller
|
11
|
+
@view = ActionView
|
12
|
+
|
13
|
+
def create
|
14
|
+
end
|
15
|
+
|
16
|
+
def edit
|
17
|
+
end
|
18
|
+
|
19
|
+
def before_all
|
20
|
+
end
|
21
|
+
|
22
|
+
def before_each
|
23
|
+
end
|
24
|
+
|
25
|
+
def after_each
|
26
|
+
end
|
27
|
+
|
28
|
+
def after_all
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class ActionModel < Watirmark::Model::Factory
|
33
|
+
keywords :a, :b
|
34
|
+
defaults do
|
35
|
+
a {1}
|
36
|
+
b {2}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
before :each do
|
42
|
+
@controller = ActionController.new(ActionModel.new)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'before and after' do
|
46
|
+
@controller.expects(:before_all).once
|
47
|
+
@controller.expects(:after_all).once
|
48
|
+
@controller.run :create
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'before_each and after_each' do
|
52
|
+
@controller.expects(:before_each).once
|
53
|
+
@controller.expects(:after_each).once
|
54
|
+
@controller.run :create
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'before_each and after_each with multiple methods passed to run' do
|
58
|
+
@controller.expects(:before_each).twice
|
59
|
+
@controller.expects(:after_each).twice
|
60
|
+
@controller.run :create, :edit
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'use hashes instead of models' do
|
64
|
+
controller = ActionController.new(a: 1, b: 2)
|
65
|
+
controller.expects(:before_each).once
|
66
|
+
controller.expects(:after_each).once
|
67
|
+
controller.run :create
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'records should be processed separately' do
|
71
|
+
controller = ActionController.new
|
72
|
+
controller.records << {a:1, b:2}
|
73
|
+
controller.records << {c:3, d:4}
|
74
|
+
controller.expects(:before_all).once
|
75
|
+
controller.expects(:after_all).once
|
76
|
+
controller.expects(:before_each).twice
|
77
|
+
controller.expects(:after_each).twice
|
78
|
+
controller.run :create
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'records should be cleared after run' do
|
82
|
+
controller = ActionController.new
|
83
|
+
controller.records.should == []
|
84
|
+
controller.records << {a:1, b:2}
|
85
|
+
controller.records << {c:3, d:4}
|
86
|
+
controller.records.should == [{a:1, b:2}, {c:3, d:4}]
|
87
|
+
controller.run :create
|
88
|
+
controller.records.should == []
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|