watirmark 5.14.16
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/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,50 @@
|
|
|
1
|
+
require 'watirmark/page/page_definition'
|
|
2
|
+
|
|
3
|
+
module Watirmark
|
|
4
|
+
class Page
|
|
5
|
+
extend PageDefinition
|
|
6
|
+
|
|
7
|
+
attr_accessor :browser
|
|
8
|
+
attr_reader :keyed_elements
|
|
9
|
+
|
|
10
|
+
def initialize(browser=self.class.browser)
|
|
11
|
+
@browser = browser
|
|
12
|
+
@keyed_elements = []
|
|
13
|
+
create_keyword_methods
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def keywords
|
|
17
|
+
self.class.keywords
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def native_keywords
|
|
21
|
+
self.class.native_keywords
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process_pages
|
|
25
|
+
self.class.process_pages
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def process_page(x)
|
|
29
|
+
process_pages.each { |page| return page if page.name == x }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def create_keyword_methods
|
|
35
|
+
keywords = self.class.keyword_metadata || {}
|
|
36
|
+
keywords.each_key do |key|
|
|
37
|
+
keyed_element = KeyedElement.new(self, keywords[key])
|
|
38
|
+
@keyed_elements << keyed_element
|
|
39
|
+
meta_def key do |*args|
|
|
40
|
+
keyed_element.get *args
|
|
41
|
+
end
|
|
42
|
+
meta_def "#{key}=" do |*args|
|
|
43
|
+
keyed_element.set *args
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
Page = Watirmark::Page
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
require 'watirmark/page/process_page'
|
|
2
|
+
|
|
3
|
+
module Watirmark
|
|
4
|
+
module ProcessPageDefinition
|
|
5
|
+
attr_accessor :process_pages,
|
|
6
|
+
:process_page_navigate_method,
|
|
7
|
+
:process_page_active_page_method,
|
|
8
|
+
:process_page_submit_method
|
|
9
|
+
|
|
10
|
+
def process_page(name, method=nil)
|
|
11
|
+
@current_process_page = find_or_create_process_page(name)
|
|
12
|
+
yield
|
|
13
|
+
@current_process_page = @current_process_page.parent
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def process_page_alias(x)
|
|
17
|
+
@current_process_page.alias << x
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def always_activate_parent
|
|
21
|
+
@current_process_page.always_activate_parent = @current_process_page.parent.name
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process_page_navigate_method(proc=nil)
|
|
25
|
+
@process_page_navigate_method = proc
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def process_page_submit_method(proc)
|
|
29
|
+
@process_page_submit_method = proc
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def process_page_active_page_method(proc)
|
|
33
|
+
@process_page_active_page_method = proc
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
def add_superclass_process_pages_to_subclass(klass)
|
|
39
|
+
klass.process_pages = (@process_pages ? @process_pages.dup : klass.process_pages = [])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def create_default_process_page(klass)
|
|
44
|
+
klass.instance_variable_set :@current_process_page, ProcessPage.new
|
|
45
|
+
current_page = klass.instance_variable_get(:@current_process_page)
|
|
46
|
+
current_page.root = true
|
|
47
|
+
klass.process_pages << current_page
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def find_or_create_process_page(name)
|
|
51
|
+
mypage = find_process_page(name)
|
|
52
|
+
unless mypage
|
|
53
|
+
mypage = ProcessPage.new(name,
|
|
54
|
+
@current_process_page,
|
|
55
|
+
@process_page_active_page_method,
|
|
56
|
+
@process_page_navigate_method,
|
|
57
|
+
@process_page_submit_method
|
|
58
|
+
)
|
|
59
|
+
@process_pages ||= []
|
|
60
|
+
@process_pages << mypage
|
|
61
|
+
end
|
|
62
|
+
mypage
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def find_process_page(name)
|
|
66
|
+
if @current_process_page.root
|
|
67
|
+
underscored_name = name
|
|
68
|
+
else
|
|
69
|
+
underscored_name = (@current_process_page.underscored_name + '_' + name).downcase.gsub!(/\s+/, '_')
|
|
70
|
+
end
|
|
71
|
+
@process_pages.find { |p| p.underscored_name == underscored_name }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
module PageDefinition
|
|
78
|
+
include ProcessPageDefinition
|
|
79
|
+
attr_accessor :kwds, :perms, :kwd_metadata
|
|
80
|
+
|
|
81
|
+
@@browser = nil
|
|
82
|
+
|
|
83
|
+
def inherited(klass)
|
|
84
|
+
add_superclass_keywords_to_subclass(klass)
|
|
85
|
+
add_superclass_keyword_metadata_to_subclass(klass)
|
|
86
|
+
add_superclass_process_pages_to_subclass(klass)
|
|
87
|
+
create_default_process_page(klass)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def keyword(name, map=nil, &block)
|
|
91
|
+
create_new_keyword(name, map, permissions={:populate => true, :verify => true}, &block)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def populate_keyword(name, map=nil, &block)
|
|
95
|
+
create_new_keyword(name, map, permissions={:populate => true}, &block)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def verify_keyword(name, map=nil, &block)
|
|
99
|
+
create_new_keyword(name, map, permissions={:verify => true}, &block)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def private_keyword(name, map=nil, &block)
|
|
103
|
+
create_new_keyword(name, map, &block)
|
|
104
|
+
end
|
|
105
|
+
alias :navigation_keyword :private_keyword
|
|
106
|
+
|
|
107
|
+
# Create an alias to an existing keyword
|
|
108
|
+
def keyword_alias(keyword_alias_name, keyword_name)
|
|
109
|
+
keyword_data = @kwd_metadata[self.to_s][keyword_name]
|
|
110
|
+
create_new_keyword(keyword_alias_name, keyword_data[:map], keyword_data[:permissions], &keyword_data[:block])
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def browser
|
|
114
|
+
@@browser ||= Watirmark::Session.instance.openbrowser
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def browser=(x)
|
|
118
|
+
@@browser = x
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def browser_exists?
|
|
122
|
+
!! @@browser
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def keywords
|
|
126
|
+
@kwds.values.flatten.uniq.sort_by { |key| key.to_s }
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def native_keywords
|
|
130
|
+
@kwds[self.to_s].sort_by { |key| key.to_s }
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def keyword_metadata
|
|
134
|
+
@kwd_metadata ||= nested_hash
|
|
135
|
+
@kwd_metadata.values.inject(:merge)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
private
|
|
139
|
+
def nested_hash
|
|
140
|
+
Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k]=Hash.new } }
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def create_new_keyword(name, map=nil, permissions, &block)
|
|
144
|
+
keyword_name = name.to_sym
|
|
145
|
+
add_to_keywords(keyword_name)
|
|
146
|
+
add_to_current_process_page(keyword_name, permissions)
|
|
147
|
+
add_keyword_metadata(keyword_name, map, permissions, block)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def add_keyword_metadata(name, map, permissions, block)
|
|
151
|
+
@kwd_metadata ||= nested_hash
|
|
152
|
+
@kwd_metadata[self.to_s][name][:keyword] = name
|
|
153
|
+
@kwd_metadata[self.to_s][name][:map] = map
|
|
154
|
+
@kwd_metadata[self.to_s][name][:permissions] = permissions
|
|
155
|
+
@kwd_metadata[self.to_s][name][:block] = block
|
|
156
|
+
@kwd_metadata[self.to_s][name][:process_page] = @current_process_page
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def add_to_current_process_page(name, permissions)
|
|
160
|
+
@current_process_page << name if permissions
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def add_to_keywords(method_sym)
|
|
164
|
+
@kwds ||= Hash.new { |h, k| h[k] = Array.new }
|
|
165
|
+
@kwds[self.to_s] << method_sym unless @kwds.include?(method_sym)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def add_superclass_keywords_to_subclass(klass)
|
|
169
|
+
update_subclass_variables(klass, method='kwds', default=Hash.new { |h, k| h[k] = Array.new })
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def add_superclass_keyword_metadata_to_subclass(klass)
|
|
173
|
+
update_subclass_variables(klass, method='kwd_metadata', default=Hash.new { |h, k| h[k] = Hash.new { |h, k| h[k] = Hash.new } })
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def update_subclass_variables(klass, method, default)
|
|
177
|
+
var = self.send(method)
|
|
178
|
+
if var
|
|
179
|
+
klass.send("#{method}=", default) unless klass.send(method)
|
|
180
|
+
var.each_key do |k|
|
|
181
|
+
klass.send(method).store(k, var.fetch(k).dup)
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
end
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
module Watirmark
|
|
2
|
+
class ProcessPage
|
|
3
|
+
|
|
4
|
+
attr_reader :parent, :keywords
|
|
5
|
+
attr_accessor :alias, :name, :root, :always_activate_parent
|
|
6
|
+
attr_accessor :submit_method, :active_page_method, :navigate_method
|
|
7
|
+
|
|
8
|
+
@@navigate_method_default ||= Proc.new {}
|
|
9
|
+
@@submit_method_default ||= Proc.new {}
|
|
10
|
+
@@active_page_method_default ||= Proc.new {}
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
def navigate_method_default=(proc)
|
|
14
|
+
@@navigate_method_default = proc
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def submit_method_default=(proc)
|
|
18
|
+
@@submit_method_default = proc
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def active_page_method_default=(proc)
|
|
22
|
+
@@active_page_method_default = proc
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def navigate_method_default
|
|
26
|
+
@@navigate_method_default
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def submit_method_default
|
|
30
|
+
@@submit_method_default
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def active_page_method_default
|
|
34
|
+
@@active_page_method_default
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def initialize(name='', parent=nil, active_page=nil, navigate_page=nil, submit_page=nil)
|
|
39
|
+
@name = name
|
|
40
|
+
@parent = parent
|
|
41
|
+
@keywords = []
|
|
42
|
+
@root = false
|
|
43
|
+
@always_activate_parent = false
|
|
44
|
+
@alias = []
|
|
45
|
+
@active_page_method = active_page if active_page
|
|
46
|
+
@navigate_method = navigate_page if navigate_page
|
|
47
|
+
@submit_method = submit_page if submit_page
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Give the full name of this process page, including the
|
|
51
|
+
# parent process pages. The argument allows us to
|
|
52
|
+
# easily get the full path for alias names.
|
|
53
|
+
def underscored_name(name=@name)
|
|
54
|
+
u_name = (@parent && !@parent.root) ? "#{@parent.underscored_name}_#{name}" : name
|
|
55
|
+
u_name.downcase.gsub(/\s+/, '_') if u_name
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def activate
|
|
59
|
+
return if (@root || active?)
|
|
60
|
+
if @always_activate_parent
|
|
61
|
+
@parent.goto_process_page
|
|
62
|
+
else
|
|
63
|
+
@parent.activate if @parent
|
|
64
|
+
end
|
|
65
|
+
goto_process_page
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def <<(x)
|
|
69
|
+
@keywords << x.to_sym
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def goto_process_page
|
|
73
|
+
unless navigate
|
|
74
|
+
aliases.each do |alias_name|
|
|
75
|
+
alias_process_page = self.dup
|
|
76
|
+
alias_process_page.alias = []
|
|
77
|
+
alias_process_page.name = alias_name
|
|
78
|
+
alias_process_page.alias = nil
|
|
79
|
+
alias_process_page.goto_process_page
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def navigate
|
|
85
|
+
instance_eval &(@navigate_method || @@navigate_method_default)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def submit
|
|
89
|
+
instance_eval &(@submit_method || @@submit_method_default)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def active_page
|
|
93
|
+
instance_eval &(@active_page_method || @@active_page_method_default)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def aliases
|
|
97
|
+
@alias ||= []
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def active?
|
|
101
|
+
page = active_page
|
|
102
|
+
return true if in_submenu(page, underscored_name)
|
|
103
|
+
aliases.each { |a| return true if in_submenu(page, underscored_name(a)) } unless aliases.empty?
|
|
104
|
+
false
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def in_submenu(active_page, requested_page)
|
|
108
|
+
!!(active_page.to_s.downcase.delete('>').gsub(/\s+/, '_') =~ /^#{requested_page}/)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end
|
|
112
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module Watirmark
|
|
2
|
+
|
|
3
|
+
class RadioMapElement
|
|
4
|
+
attr_accessor :list, :value
|
|
5
|
+
|
|
6
|
+
def initialize(*args)
|
|
7
|
+
@list= *args
|
|
8
|
+
@value = nil
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def map_to(x)
|
|
12
|
+
@value = x
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
alias :maps_to :map_to
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class RadioMap
|
|
20
|
+
def initialize hash={}
|
|
21
|
+
@maps = []
|
|
22
|
+
hash.each_pair do |key, val|
|
|
23
|
+
values(key).maps_to(val)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def values(*args)
|
|
28
|
+
element = RadioMapElement.new(*args)
|
|
29
|
+
@maps << element
|
|
30
|
+
element
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
alias :value :values
|
|
34
|
+
|
|
35
|
+
def lookup(x)
|
|
36
|
+
return nil if x.nil?
|
|
37
|
+
@maps.each do |map|
|
|
38
|
+
if Array === map.list
|
|
39
|
+
map.list.each do |items|
|
|
40
|
+
[*items].each do |item|
|
|
41
|
+
return map.value if item.matches x
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
return map.value if map.list.matches x
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
raise Watirmark::TestError, "No map value exists for '#{x}'" unless x
|
|
49
|
+
x
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'ruby-prof'
|
|
2
|
+
|
|
3
|
+
class Profiler
|
|
4
|
+
def self.profile(options={}, &block)
|
|
5
|
+
RubyProf.start
|
|
6
|
+
beginning = Time.now
|
|
7
|
+
puts '-----------------------'
|
|
8
|
+
puts options[:name]
|
|
9
|
+
puts '-----------------------'
|
|
10
|
+
block.call
|
|
11
|
+
result = RubyProf.stop
|
|
12
|
+
result.eliminate_methods!([/IO/, /Net::/, /Global/])
|
|
13
|
+
printer = RubyProf::FlatPrinter.new(result)
|
|
14
|
+
printer.print(STDOUT, :min_percent=> (options[:min_percent] || 1))
|
|
15
|
+
puts "----> Time elapsed #{Time.now - beginning} seconds"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
#require 'watirmark/profile'
|
|
21
|
+
# Profiler.profile(:name => "#{element.keyword}, #{element}") do
|
|
22
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module SmokeTest
|
|
2
|
+
|
|
3
|
+
class << self
|
|
4
|
+
def rspec_task(task_name, files, tag=:smoke)
|
|
5
|
+
RSpec::Core::RakeTask.new(task_name) do |spec|
|
|
6
|
+
spec.rspec_opts = "--tag #{tag} -fd -fh --out spec/reports/#{spec.name}.html --backtrace"
|
|
7
|
+
spec.pattern = files
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def cucumber_task(task_name, files=nil, tag=:smoke)
|
|
12
|
+
Cucumber::Rake::Task.new(task_name) do |t|
|
|
13
|
+
t.cucumber_opts = "--tags @#{tag} -r features #{FileList[files]} -b --format html -o reports/report.html --format pretty"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|