magicspec 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+