magicspec 0.0.1

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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.project +18 -0
  4. data/Gemfile +16 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.md +95 -0
  7. data/README.rdoc +38 -0
  8. data/Rakefile +44 -0
  9. data/bin/magicspec +6 -0
  10. data/lib/magicspec/cli.rb +73 -0
  11. data/lib/magicspec/errors.rb +6 -0
  12. data/lib/magicspec/ext/string.rb +11 -0
  13. data/lib/magicspec/generators/magicspec/.rspec +1 -0
  14. data/lib/magicspec/generators/magicspec/app/matchers/.empty_directory +5 -0
  15. data/lib/magicspec/generators/magicspec/app/pages/yale/yale_page.rb.tt +15 -0
  16. data/lib/magicspec/generators/magicspec/app/pages/yale/yale_search_result_page.rb.tt +9 -0
  17. data/lib/magicspec/generators/magicspec/app/reports/.empty_directory +5 -0
  18. data/lib/magicspec/generators/magicspec/app/reports/screenshots/.empty_directory +0 -0
  19. data/lib/magicspec/generators/magicspec/app/spec/shared/login.rb +11 -0
  20. data/lib/magicspec/generators/magicspec/app/spec/spec_helper.rb.tt +114 -0
  21. data/lib/magicspec/generators/magicspec/app/spec/support/formatters/dry_run_formatter.rb +13 -0
  22. data/lib/magicspec/generators/magicspec/app/spec/support/formatters/html_override.rb +360 -0
  23. data/lib/magicspec/generators/magicspec/app/spec/support/formatters/magicspec_formatter.rb +46 -0
  24. data/lib/magicspec/generators/magicspec/app/spec/support/matchers/custom_matcher.rb +7 -0
  25. data/lib/magicspec/generators/magicspec/app/spec/support/matchers/email_matcher.rb +1 -0
  26. data/lib/magicspec/generators/magicspec/app/spec/support/matchers/file_matcher.rb +12 -0
  27. data/lib/magicspec/generators/magicspec/app/spec/yale/yale_example_spec.rb +34 -0
  28. data/lib/magicspec/generators/magicspec/app/test_data/baidu.yml +4 -0
  29. data/lib/magicspec/generators/magicspec/app/test_data/login_user.yml +4 -0
  30. data/lib/magicspec/generators/magicspec/bin/console +7 -0
  31. data/lib/magicspec/generators/magicspec/bin/console.bat +6 -0
  32. data/lib/magicspec/generators/magicspec/bin/setup.rb.tt +12 -0
  33. data/lib/magicspec/generators/magicspec/config/config.yml +6 -0
  34. data/lib/magicspec/generators/magicspec/config/magicspec_formatter.rb +47 -0
  35. data/lib/magicspec/generators/magicspec/config/override.rb +351 -0
  36. data/lib/magicspec/magicspec_config.rb +21 -0
  37. data/lib/magicspec/magicspec_initializer.rb +33 -0
  38. data/lib/magicspec/page_override.rb +5 -0
  39. data/lib/magicspec/templates/browser_spec_template.rb.tt +22 -0
  40. data/lib/magicspec/templates/mobile_template.rb.tt +15 -0
  41. data/lib/magicspec/templates/plain_template.rb.tt +22 -0
  42. data/lib/magicspec/templates/template_page.rb.tt +11 -0
  43. data/lib/magicspec/templates/web_service_template.rb.tt +18 -0
  44. data/lib/magicspec/watir_browser.rb +7 -0
  45. data/lib/magicspec.rb +8 -0
  46. data/magicspec.gemspec +120 -0
  47. data/spec/app/pages/components/footer.rb +3 -0
  48. data/spec/app/pages/components/sub/sub_footer.rb +3 -0
  49. data/spec/app/pages/module1/module1_page.rb +6 -0
  50. data/spec/app/pages/module1/sub_test_page.rb +4 -0
  51. data/spec/app/pages/test_navigator.rb +4 -0
  52. data/spec/app/pages/test_page.rb +4 -0
  53. data/spec/config/config.yml +3 -0
  54. data/spec/config/wrong_config.yml +5 -0
  55. data/spec/lazy_initializer_spec.rb +28 -0
  56. data/spec/lazy_navigator_spec.rb +36 -0
  57. data/spec/lazy_page_spec.rb +44 -0
  58. data/spec/magicspec_config_spec.rb +28 -0
  59. data/spec/pages/components/footer.rb +2 -0
  60. data/spec/pages/test_page.rb +5 -0
  61. data/spec/spec_helper.rb +20 -0
  62. data/spec/string_spec.rb +10 -0
  63. metadata +206 -0
@@ -0,0 +1,351 @@
1
+ require 'rspec'
2
+ require 'rspec/core/formatters/base_text_formatter'
3
+ require 'rspec/core/formatters/html_printer'
4
+ require 'gmail'
5
+ require 'sys/uname'
6
+ include Sys
7
+
8
+ #https://github.com/GICodeWarrior/threaded-rspec
9
+
10
+ module RSpec
11
+ module Core
12
+ module Formatters
13
+ class HtmlPrinter
14
+ def print_html_start
15
+ @output.puts YALE_HTML_HEADER
16
+ @output.puts YALE_REPORT_HEADER
17
+ end
18
+
19
+ def print_summary( was_dry_run, duration, example_count, failure_count, pending_count )
20
+ # TODO - kill dry_run?
21
+ if was_dry_run
22
+ totals = "This was a dry-run"
23
+ else
24
+ totals = "#{example_count} example#{'s' unless example_count == 1}, "
25
+ totals << "#{failure_count} failure#{'s' unless failure_count == 1}"
26
+ totals << ", #{pending_count} pending" if pending_count > 0
27
+ end
28
+
29
+ formatted_duration = sprintf("%.5f", duration)
30
+
31
+ @output.puts "<script type=\"text/javascript\">document.getElementById('duration').innerHTML = \"Finished in <strong>#{formatted_duration} seconds</strong>\";</script>"
32
+ @output.puts "<script type=\"text/javascript\">document.getElementById('totals').innerHTML = \"#{totals}\";</script>"
33
+ @output.puts "<script type=\"text/javascript\">document.getElementById('browser').innerHTML = \"#{Uname.sysname}\";</script>"
34
+ @output.puts "<script type=\"text/javascript\">localStorage.g=JSON.stringify([['Pass',#{example_count}],['Fail',#{failure_count}],['Pending',#{pending_count}]])</script>"
35
+ @output.puts "</div>"
36
+ @output.puts "</div>"
37
+ @output.puts "</body>"
38
+ @output.puts "</html>"
39
+
40
+ gmail = Gmail.new("yaleqa@gmail.com","")
41
+ gmail.deliver do
42
+ to "dan.franko@yale.edu"
43
+ subject "Test is complete!"
44
+ html_part do
45
+ content_type 'text/html; charset=UTF-8'
46
+ body "<p>Done!</p>"
47
+ end
48
+ #add_file "/path/to/some_image.jpg"
49
+ end
50
+ end
51
+
52
+ YALE_REPORT_HEADER = <<-EOF
53
+ <div class="rspec-report container">
54
+ <div id="rspec-header">
55
+ <div id="label">
56
+ <h1>Yale Automation Report</h1>
57
+ </div>
58
+
59
+ <div id="display-filters">
60
+ <input id="passed_checkbox" name="passed_checkbox" type="checkbox" checked="checked" onchange="apply_filters()" value="1" /> <label for="passed_checkbox">Passed</label>
61
+ <input id="failed_checkbox" name="failed_checkbox" type="checkbox" checked="checked" onchange="apply_filters()" value="2" /> <label for="failed_checkbox">Failed</label>
62
+ <input id="pending_checkbox" name="pending_checkbox" type="checkbox" checked="checked" onchange="apply_filters()" value="3" /> <label for="pending_checkbox">Pending</label>
63
+ </div>
64
+
65
+ <div id="summary">
66
+ <p id="totals">&#160;</p>
67
+ <p id="duration">&#160;</p>
68
+ </div>
69
+ <div id="chart">
70
+ <div id="container" style="min-width: 200px; height: 200px; margin: 0 auto"></div>
71
+ <script>
72
+ $(function () {
73
+ var chart;
74
+
75
+ $(document).ready(function () {
76
+
77
+ // Build the chart
78
+ $('#container').highcharts({
79
+ chart: {
80
+ plotBackgroundColor: null,
81
+ plotBorderWidth: null,
82
+ plotShadow: false
83
+ },
84
+ title: {
85
+ text: 'Test Results'
86
+ },
87
+ tooltip: {
88
+ pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
89
+ },
90
+ plotOptions: {
91
+ pie: {
92
+ allowPointSelect: true,
93
+ cursor: 'pointer',
94
+ dataLabels: {
95
+ enabled: false
96
+ },
97
+ showInLegend: true
98
+ }
99
+ },
100
+ series: [{
101
+ type: 'pie',
102
+ name: 'Browser share',
103
+ data: JSON.parse(localStorage.g)
104
+ }]
105
+ });
106
+ });
107
+
108
+ });
109
+ </script>
110
+ </div>
111
+ <div id="deets">
112
+ <table class="table table-bordered table-condensed table-responsive">
113
+ <tr>
114
+ <td>Browser</td>
115
+ <td id="browser"></td>
116
+ </tr>
117
+ <tr>
118
+ <td>OS</td>
119
+ <td id="OS">Mac</td>
120
+ </tr>
121
+ <tr>
122
+ <td>Date</td>
123
+ <td id="Date">#{Time.now.to_s}</td>
124
+ </tr>
125
+ <tr>
126
+ <td>Time</td>
127
+ <td id="Time">12 PM</td>
128
+ </tr>
129
+ </table>
130
+ </div>
131
+ </div>
132
+ <div class="results">
133
+ EOF
134
+
135
+
136
+ YALE_GLOBAL_STYLES = <<-EOF
137
+ #rspec-header {
138
+ background: #65C400; color: #fff; height: 250px;
139
+ margin: 10px 10px 10px 10px;
140
+ position: relative;
141
+ }
142
+
143
+ .rspec-report h1 {
144
+ margin: 0px 10px 0px 10px;
145
+ padding: 10px;
146
+ font-family: "Lucida Grande", Helvetica, sans-serif;
147
+ font-size: 1.8em;
148
+ position: absolute;
149
+ }
150
+
151
+ #deets {
152
+ float:left;
153
+ margin: 60px 10px 0px 20px;
154
+ position: absolute;
155
+ }
156
+
157
+ #chart {
158
+ float:right;
159
+ margin: 10px 10px 0px 60px;
160
+ }
161
+
162
+ #label {
163
+ float:left;
164
+ }
165
+
166
+ #display-filters {
167
+ font-family: "Lucida Grande",Helvetica,sans-serif;
168
+ position: absolute;
169
+ bottom: 0;
170
+ left: 20px;
171
+ }
172
+
173
+ #summary {
174
+ float:right;
175
+ padding: 5px 10px;
176
+ font-family: "Lucida Grande", Helvetica, sans-serif;
177
+ text-align: right;
178
+ }
179
+
180
+ #summary p {
181
+ margin: 0 0 0 2px;
182
+ }
183
+
184
+ #summary #totals {
185
+ font-size: 1.2em;
186
+ }
187
+
188
+ .example_group {
189
+ margin: 0 10px 5px;
190
+ background: #fff;
191
+ }
192
+
193
+ dl {
194
+ margin: 0; padding: 0 0 5px;
195
+ font: normal 11px "Lucida Grande", Helvetica, sans-serif;
196
+ }
197
+
198
+ dt {
199
+ padding: 3px;
200
+ background: #65C400;
201
+ color: #fff;
202
+ font-weight: bold;
203
+ }
204
+
205
+ dd {
206
+ margin: 5px 0 5px 5px;
207
+ padding: 3px 3px 3px 18px;
208
+ }
209
+
210
+ dd .duration {
211
+ padding-left: 5px;
212
+ text-align: right;
213
+ right: 0px;
214
+ float:right;
215
+ }
216
+
217
+ dd.example.passed {
218
+ border-left: 5px solid #65C400;
219
+ border-bottom: 1px solid #65C400;
220
+ background: #DBFFB4; color: #3D7700;
221
+ }
222
+
223
+ dd.example.not_implemented {
224
+ border-left: 5px solid #FAF834;
225
+ border-bottom: 1px solid #FAF834;
226
+ background: #FCFB98; color: #131313;
227
+ }
228
+
229
+ dd.example.pending_fixed {
230
+ border-left: 5px solid #0000C2;
231
+ border-bottom: 1px solid #0000C2;
232
+ color: #0000C2; background: #D3FBFF;
233
+ }
234
+
235
+ dd.example.failed {
236
+ border-left: 5px solid #C20000;
237
+ border-bottom: 1px solid #C20000;
238
+ color: #C20000; background: #FFFBD3;
239
+ }
240
+
241
+
242
+ dt.not_implemented {
243
+ color: #000000; background: #FAF834;
244
+ }
245
+
246
+ dt.pending_fixed {
247
+ color: #FFFFFF; background: #C40D0D;
248
+ }
249
+
250
+ dt.failed {
251
+ color: #FFFFFF; background: #C40D0D;
252
+ }
253
+
254
+
255
+ #rspec-header.not_implemented {
256
+ color: #000000; background: #FAF834;
257
+ }
258
+
259
+ #rspec-header.pending_fixed {
260
+ color: #FFFFFF; background: #C40D0D;
261
+ }
262
+
263
+ #rspec-header.failed {
264
+ color: #FFFFFF; background: #C40D0D;
265
+ }
266
+
267
+
268
+ .backtrace {
269
+ color: #000;
270
+ font-size: 12px;
271
+ }
272
+
273
+ a {
274
+ color: #BE5C00;
275
+ }
276
+
277
+ /* Ruby code, style similar to vibrant ink */
278
+ .ruby {
279
+ font-size: 12px;
280
+ font-family: monospace;
281
+ color: white;
282
+ background-color: black;
283
+ padding: 0.1em 0 0.2em 0;
284
+ }
285
+
286
+ .ruby .keyword { color: #FF6600; }
287
+ .ruby .constant { color: #339999; }
288
+ .ruby .attribute { color: white; }
289
+ .ruby .global { color: white; }
290
+ .ruby .module { color: white; }
291
+ .ruby .class { color: white; }
292
+ .ruby .string { color: #66FF00; }
293
+ .ruby .ident { color: white; }
294
+ .ruby .method { color: #FFCC00; }
295
+ .ruby .number { color: white; }
296
+ .ruby .char { color: white; }
297
+ .ruby .comment { color: #9933CC; }
298
+ .ruby .symbol { color: white; }
299
+ .ruby .regex { color: #44B4CC; }
300
+ .ruby .punct { color: white; }
301
+ .ruby .escape { color: white; }
302
+ .ruby .interp { color: white; }
303
+ .ruby .expr { color: white; }
304
+
305
+ .ruby .offending { background-color: gray; }
306
+ .ruby .linenum {
307
+ width: 75px;
308
+ padding: 0.1em 1em 0.2em 0;
309
+ color: #000000;
310
+ background-color: #FFFBD3;
311
+ }
312
+ EOF
313
+
314
+
315
+ YALE_HTML_HEADER = <<-EOF
316
+ <!DOCTYPE html>
317
+ <html lang='en'>
318
+ <head>
319
+ <title>RSpec results</title>
320
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
321
+ <meta http-equiv="Expires" content="-1" />
322
+ <meta http-equiv="Pragma" content="no-cache" />
323
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
324
+ <script src='http://code.jquery.com/jquery-1.10.1.min.js'></script>"
325
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
326
+ <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet">
327
+ <script src='http://code.highcharts.com/highcharts.js'></script>
328
+ <style type="text/css">
329
+ body {
330
+ margin: 0;
331
+ padding: 0;
332
+ background: #fff;
333
+ font-size: 80%;
334
+ }
335
+ </style>
336
+ <script type="text/javascript">
337
+ // <![CDATA[
338
+ #{GLOBAL_SCRIPTS}
339
+ // ]]>
340
+ </script>
341
+ <style type="text/css">
342
+ #{YALE_GLOBAL_STYLES}
343
+ </style>
344
+ </head>
345
+ <body>
346
+ EOF
347
+
348
+ end
349
+ end
350
+ end
351
+ end
@@ -0,0 +1,21 @@
1
+ require 'yaml'
2
+ require 'magicspec/errors'
3
+ require 'ostruct'
4
+
5
+ module Magicspec
6
+ class Config
7
+ attr_reader :hash_content, :content
8
+
9
+ def initialize filepath
10
+ @f ||= filepath if valid?(filepath)
11
+ File.open(@f) {|handle| @hash_content = YAML.load(handle)}
12
+ @content = OpenStruct.new(@hash_content)
13
+ end
14
+
15
+ def valid?(filepath)
16
+ raise ConfigFileMissingError unless File.exists?(filepath)
17
+ true
18
+ end
19
+
20
+ end
21
+ end #Magicspec
@@ -0,0 +1,33 @@
1
+ module Magicspec
2
+ class Initializer
3
+ def initialize root, app_name
4
+ @root ||= root
5
+ @app_name ||= app_name
6
+
7
+ @pages_path = File.join(@root, 'app', 'pages')
8
+ $:.unshift(@pages_path)
9
+
10
+ load_config
11
+ load_all_pages
12
+ generate_pathes
13
+ end
14
+
15
+ def load_all_pages
16
+ Dir.glob(File.join @pages_path, '**', '*.rb').select { |p| p =~ /page\.rb$/ }.each do |page|
17
+ puts "#{page}" if $debug
18
+ require "#{page}"
19
+ end #each
20
+ end
21
+
22
+ def load_config
23
+ # hard code config file name here
24
+ @config_file = File.join @root, 'config', 'config.yml'
25
+ $config = Config.new(@config_file).content
26
+ end
27
+
28
+ def generate_pathes
29
+ $root = @root
30
+ $pages = @pages_path
31
+ end
32
+ end
33
+ end #Magicspec
@@ -0,0 +1,5 @@
1
+ module PageObject
2
+ def turn_to kls
3
+ kls.new(@browser)
4
+ end
5
+ end
@@ -0,0 +1,22 @@
1
+ #encoding: utf-8
2
+ require File.expand_path 'app/spec/spec_helper'
3
+
4
+ $browsers.each do |b|
5
+ describe "The template using the '#{b}' browser",:template do
6
+ before(:all) do
7
+ @browser = initBrowser(b,:platform => :VISTA)
8
+ @yale_page = YalePage.new(@browser)
9
+ @yale_page.goto
10
+ end
11
+
12
+ it 'will always fail' do
13
+ expect(false).to be_true
14
+ end
15
+
16
+ it 'is pending'
17
+
18
+ after(:all) do
19
+ @browser.close rescue nil
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ #encoding: utf-8
2
+ require File.expand_path 'app/spec/spec_helper'
3
+
4
+ describe "The mobile template",:template do
5
+ before(:all) do
6
+ # Do something to set things up
7
+ end
8
+
9
+ after(:all) do
10
+ # Do something to tear things down
11
+ end
12
+
13
+ it 'will do something with a mobile device(s)'
14
+
15
+ end
@@ -0,0 +1,22 @@
1
+ #encoding: utf-8
2
+ require File.expand_path 'app/spec/spec_helper'
3
+
4
+ describe "The vanilla template",:template do
5
+ before(:all) do
6
+ # Do something to set things up
7
+ end
8
+
9
+ after(:all) do
10
+ # Do something to tear things down
11
+ end
12
+
13
+ it 'will always fail' do
14
+ expect(false).to be_true
15
+ end
16
+
17
+ it 'will always pass' do
18
+ expect(pass).to be_true
19
+ end
20
+
21
+ it 'is pending'
22
+ end
@@ -0,0 +1,11 @@
1
+ #encoding: utf-8
2
+
3
+ class <%= @name.capitalize%>Page
4
+ include PageObject
5
+ button(:goButton,:value => "Go")
6
+
7
+ def doSomething
8
+ self.goButton
9
+ turn_to AnotherPage
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ require 'active_support/core_ext/hash/conversions'
2
+ require File.expand_path 'app/specs/spec_helper'
3
+
4
+ describe "Template tests",:template do
5
+ before(:all) do
6
+ client = Savon.client(wsdl: "http://www.webservicex.net/stockquote.asmx?WSDL",
7
+ #:basic_auth => [$config["user"]["name"], $config["user"]["password"]],
8
+ :log_level => :error)
9
+
10
+ response = client.call(:get_quote, message: { symbol: "Goog"})
11
+ # Create a hash out of the response
12
+ @hashedResponse = Hash.from_xml(response.to_hash[:get_quote_response][:get_quote_result])
13
+ end
14
+
15
+ it 'returns the symbol' do
16
+ expect(@hashedResponse["StockQuotes"]["Stock"]["Symbol"]).to eq "GOOG"
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ module Watir
2
+ class Browser
3
+ def factory
4
+ puts "This be the factory yo."
5
+ end
6
+ end
7
+ end
data/lib/magicspec.rb ADDED
@@ -0,0 +1,8 @@
1
+ require 'active_support/all' # need be replaced, only required string of active support
2
+ require 'watir-webdriver'
3
+ require 'page-object'
4
+ require 'magicspec/ext/string'
5
+ require 'magicspec/magicspec_config'
6
+ require 'magicspec/magicspec_initializer'
7
+ require 'magicspec/page_override'
8
+ require 'magicspec/watir_browser'
data/magicspec.gemspec ADDED
@@ -0,0 +1,120 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "magicspec"
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["easonhan,dmfranko"]
12
+ s.date = "2013-12-18"
13
+ s.description = "A test framework using watir-webdriver rspec and page-object"
14
+ s.email = "dan.franko@yale.edu"
15
+ s.executables = ["magicspec"]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.md",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".project",
24
+ "Gemfile",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "README.rdoc",
28
+ "Rakefile",
29
+ "bin/magicspec",
30
+ "magicspec.gemspec",
31
+ "lib/magicspec.rb",
32
+ "lib/magicspec/cli.rb",
33
+ "lib/magicspec/errors.rb",
34
+ "lib/magicspec/ext/string.rb",
35
+ "lib/magicspec/generators/magicspec/.rspec",
36
+ "lib/magicspec/generators/magicspec/app/matchers/.empty_directory",
37
+ "lib/magicspec/generators/magicspec/app/pages/yale/yale_page.rb.tt",
38
+ "lib/magicspec/generators/magicspec/app/pages/yale/yale_search_result_page.rb.tt",
39
+ "lib/magicspec/generators/magicspec/app/reports/.empty_directory",
40
+ "lib/magicspec/generators/magicspec/app/reports/screenshots/.empty_directory",
41
+ "lib/magicspec/generators/magicspec/app/spec/shared/login.rb",
42
+ "lib/magicspec/generators/magicspec/app/spec/spec_helper.rb.tt",
43
+ "lib/magicspec/generators/magicspec/app/spec/support/formatters/dry_run_formatter.rb",
44
+ "lib/magicspec/generators/magicspec/app/spec/support/formatters/html_override.rb",
45
+ "lib/magicspec/generators/magicspec/app/spec/support/formatters/magicspec_formatter.rb",
46
+ "lib/magicspec/generators/magicspec/app/spec/support/matchers/custom_matcher.rb",
47
+ "lib/magicspec/generators/magicspec/app/spec/support/matchers/email_matcher.rb",
48
+ "lib/magicspec/generators/magicspec/app/spec/support/matchers/file_matcher.rb",
49
+ "lib/magicspec/generators/magicspec/app/spec/yale/yale_example_spec.rb",
50
+ "lib/magicspec/generators/magicspec/app/test_data/baidu.yml",
51
+ "lib/magicspec/generators/magicspec/app/test_data/login_user.yml",
52
+ "lib/magicspec/generators/magicspec/bin/console",
53
+ "lib/magicspec/generators/magicspec/bin/console.bat",
54
+ "lib/magicspec/generators/magicspec/bin/setup.rb.tt",
55
+ "lib/magicspec/generators/magicspec/config/config.yml",
56
+ "lib/magicspec/generators/magicspec/config/magicspec_formatter.rb",
57
+ "lib/magicspec/generators/magicspec/config/override.rb",
58
+ "lib/magicspec/magicspec_config.rb",
59
+ "lib/magicspec/magicspec_initializer.rb",
60
+ "lib/magicspec/page_override.rb",
61
+ "lib/magicspec/watir_browser.rb",
62
+ "lib/magicspec/templates/browser_spec_template.rb.tt",
63
+ "lib/magicspec/templates/mobile_template.rb.tt",
64
+ "lib/magicspec/templates/plain_template.rb.tt",
65
+ "lib/magicspec/templates/template_page.rb.tt",
66
+ "lib/magicspec/templates/web_service_template.rb.tt",
67
+ "spec/app/pages/components/footer.rb",
68
+ "spec/app/pages/components/sub/sub_footer.rb",
69
+ "spec/app/pages/module1/module1_page.rb",
70
+ "spec/app/pages/module1/sub_test_page.rb",
71
+ "spec/app/pages/test_navigator.rb",
72
+ "spec/app/pages/test_page.rb",
73
+ "spec/config/config.yml",
74
+ "spec/config/wrong_config.yml",
75
+ "spec/magicspec_config_spec.rb",
76
+ "spec/lazy_initializer_spec.rb",
77
+ "spec/lazy_navigator_spec.rb",
78
+ "spec/lazy_page_spec.rb",
79
+ "spec/pages/components/footer.rb",
80
+ "spec/pages/test_page.rb",
81
+ "spec/spec_helper.rb",
82
+ "spec/string_spec.rb"
83
+ ]
84
+ s.homepage = "https://github.com/dmfranko/magic_spec"
85
+ s.licenses = ["MIT"]
86
+ s.require_paths = ["lib"]
87
+ s.rubygems_version = "2.0.3"
88
+ s.summary = "A simple web automation test framework"
89
+
90
+ if s.respond_to? :specification_version then
91
+ s.specification_version = 4
92
+
93
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
94
+ s.add_runtime_dependency(%q<page-object>, [">= 0"])
95
+ s.add_runtime_dependency(%q<thor>, [">= 0"])
96
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
97
+ s.add_development_dependency(%q<bundler>, [">= 0"])
98
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
99
+ s.add_development_dependency(%q<page-object>, [">= 0"])
100
+ s.add_development_dependency(%q<thor>, [">= 0"])
101
+ else
102
+ s.add_dependency(%q<page-object>, [">= 0"])
103
+ s.add_dependency(%q<thor>, [">= 0"])
104
+ s.add_dependency(%q<rdoc>, [">= 0"])
105
+ s.add_dependency(%q<bundler>, [">= 0"])
106
+ s.add_dependency(%q<jeweler>, [">= 0"])
107
+ s.add_dependency(%q<page-object>, [">= 0"])
108
+ s.add_dependency(%q<thor>, [">= 0"])
109
+ end
110
+ else
111
+ s.add_dependency(%q<page-object>, [">= 0"])
112
+ s.add_dependency(%q<thor>, [">= 0"])
113
+ s.add_dependency(%q<rdoc>, [">= 0"])
114
+ s.add_dependency(%q<bundler>, [">= 0"])
115
+ s.add_dependency(%q<jeweler>, [">= 0"])
116
+ s.add_dependency(%q<page-object>, [">= 0"])
117
+ s.add_dependency(%q<thor>, [">= 0"])
118
+ end
119
+ end
120
+
@@ -0,0 +1,3 @@
1
+ puts 'required files in components' if $debug
2
+ module Footer
3
+ end
@@ -0,0 +1,3 @@
1
+ puts 'required files in sub footer' if $debug
2
+ module SubFooter
3
+ end
@@ -0,0 +1,6 @@
1
+ puts 'required files in module1' if $debug
2
+ class Module1Page < Lazyman::Page
3
+ end
4
+
5
+ class CustomModule1Page < Lazyman::Page
6
+ end
@@ -0,0 +1,4 @@
1
+ puts 'required files in sub test page' if $debug
2
+ class SubTestPage < TestPage
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ puts 'required app navigator' if $debug
2
+ class TestNavigator < Lazyman::Navigator
3
+ end
4
+
@@ -0,0 +1,4 @@
1
+ puts 'required app pages' if $debug
2
+ class TestPage < Lazyman::Page
3
+ end
4
+
@@ -0,0 +1,3 @@
1
+ ---
2
+ host: www.example.com
3
+