mini_autobot 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 (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +26 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +191 -0
  7. data/LICENSE +22 -0
  8. data/README.md +632 -0
  9. data/bin/mini_autobot +5 -0
  10. data/lib/mini_autobot.rb +44 -0
  11. data/lib/mini_autobot/connector.rb +288 -0
  12. data/lib/mini_autobot/console.rb +15 -0
  13. data/lib/mini_autobot/emails.rb +5 -0
  14. data/lib/mini_autobot/emails/mailbox.rb +15 -0
  15. data/lib/mini_autobot/endeca/base.rb +6 -0
  16. data/lib/mini_autobot/init.rb +63 -0
  17. data/lib/mini_autobot/logger.rb +12 -0
  18. data/lib/mini_autobot/page_objects.rb +22 -0
  19. data/lib/mini_autobot/page_objects/base.rb +264 -0
  20. data/lib/mini_autobot/page_objects/overlay/base.rb +76 -0
  21. data/lib/mini_autobot/page_objects/widgets/base.rb +47 -0
  22. data/lib/mini_autobot/parallel.rb +197 -0
  23. data/lib/mini_autobot/runner.rb +91 -0
  24. data/lib/mini_autobot/settings.rb +78 -0
  25. data/lib/mini_autobot/test_case.rb +233 -0
  26. data/lib/mini_autobot/test_cases.rb +7 -0
  27. data/lib/mini_autobot/utils.rb +10 -0
  28. data/lib/mini_autobot/utils/assertion_helper.rb +35 -0
  29. data/lib/mini_autobot/utils/castable.rb +103 -0
  30. data/lib/mini_autobot/utils/data_generator_helper.rb +145 -0
  31. data/lib/mini_autobot/utils/endeca_helper.rb +46 -0
  32. data/lib/mini_autobot/utils/loggable.rb +16 -0
  33. data/lib/mini_autobot/utils/overlay_and_widget_helper.rb +78 -0
  34. data/lib/mini_autobot/utils/page_object_helper.rb +209 -0
  35. data/lib/mini_autobot/version.rb +3 -0
  36. data/lib/minitap/minitest5_rent.rb +22 -0
  37. data/lib/minitest/autobot_settings_plugin.rb +77 -0
  38. data/lib/tapout/custom_reporters/fancy_tap_reporter.rb +94 -0
  39. data/lib/yard/tagged_test_case_handler.rb +61 -0
  40. data/mini_autobot.gemspec +38 -0
  41. metadata +299 -0
@@ -0,0 +1,3 @@
1
+ module MiniAutobot
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,22 @@
1
+ require 'minitap'
2
+
3
+ module Minitest
4
+
5
+ ##
6
+ # Base class for TapY and TapJ runners.
7
+ #
8
+ class Minitap
9
+
10
+ def tapout_before_case(test_case)
11
+ doc = {
12
+ 'type' => 'case',
13
+ 'subtype' => '',
14
+ 'label' => "#{test_case}",
15
+ 'level' => 0
16
+ }
17
+ return doc
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,77 @@
1
+ module Minitest
2
+
3
+ # Minitest plugin: autobot_settings
4
+ #
5
+ # This is where the options are propagated to +MiniAutobot.settings+.
6
+ def self.plugin_autobot_settings_init(options)
7
+ MiniAutobot.settings = options
8
+
9
+ MiniAutobot.logger = MiniAutobot::Logger.new('mini_autobot.log', 'daily').tap do |logger|
10
+ logger.formatter = proc do |sev, ts, prog, msg|
11
+ msg = msg.inspect unless String === msg
12
+ "#{ts.strftime('%Y-%m-%dT%H:%M:%S.%6N')} #{sev}: #{String === msg ? msg : msg.inspect}\n"
13
+ end
14
+ logger.level = case MiniAutobot.settings.verbosity_level
15
+ when 0
16
+ Logger::WARN
17
+ when 1
18
+ Logger::INFO
19
+ else
20
+ Logger::DEBUG
21
+ end
22
+ logger.info("Booting up with arguments: #{options[:args].inspect}")
23
+ at_exit { logger.info("Shutting down") }
24
+ end
25
+
26
+ MiniAutobot::Console.bootstrap! if options[:console]
27
+
28
+ self
29
+ end
30
+
31
+ # Minitest plugin: autobot_settings
32
+ #
33
+ # This plugin for minitest injects mini_autobot-specific command-line arguments, and
34
+ # passes it along to mini_autobot.
35
+ def self.plugin_autobot_settings_options(parser, options)
36
+ options[:auto_finalize] = true
37
+ parser.on('-Q', '--no-auto-quit-driver', "Don't automatically quit the driver after a test case") do |value|
38
+ options[:auto_finalize] = value
39
+ end
40
+
41
+ options[:connector] = ENV['AUTOBOT_CONNECTOR'] if ENV.has_key?('AUTOBOT_CONNECTOR')
42
+ parser.on('-c', '--connector TYPE', 'Run using a specific connector profile') do |value|
43
+ options[:connector] = value
44
+ end
45
+
46
+ options[:env] = ENV['AUTOBOT_ENV'] if ENV.has_key?('AUTOBOT_ENV')
47
+ parser.on('-e', '--env ENV', 'Run against a specific environment, host_env') do |value|
48
+ options[:env] = value
49
+ end
50
+
51
+ options[:console] = false
52
+ parser.on('-i', '--console', 'Run an interactive session within the context of an empty test') do |value|
53
+ options[:console] = true
54
+ end
55
+
56
+ options[:reuse_driver] = false
57
+ parser.on('-r', '--reuse-driver', "Reuse driver between tests") do |value|
58
+ options[:reuse_driver] = value
59
+ end
60
+
61
+ parser.on('-t', '--tag TAGLIST', 'Run only tests matching a specific tag, tags, or tagsets') do |value|
62
+ options[:tags] ||= [ ]
63
+ options[:tags] << value.to_s.split(',').map { |t| t.to_sym }
64
+ end
65
+
66
+ options[:verbosity_level] = 0
67
+ parser.on('-v', '--verbose', 'Output verbose logs to the log file') do |value|
68
+ options[:verbosity_level] += 1
69
+ end
70
+
71
+ options[:parallel] = false
72
+ parser.on('-P', '--parallel', 'Run in parallel') do |value|
73
+ options[:parallel] = value
74
+ end
75
+ end
76
+
77
+ end
@@ -0,0 +1,94 @@
1
+ class FancyTapReporter < Tapout::Reporters::Abstract
2
+
3
+ #
4
+ def start_suite(entry)
5
+ @start = Time.now
6
+ @i = 0
7
+ #n = 0
8
+ #suite.concerns.each{ |f| f.concerns.each { |s| n += s.ok.size } }
9
+ puts "1..#{entry['count']}"
10
+ end
11
+
12
+ #
13
+ def start_case(entry)
14
+ #$stdout.puts concern.label.ansi(:bold)
15
+ end
16
+
17
+ #
18
+ def pass(entry)
19
+ super(entry)
20
+
21
+ @i += 1
22
+ #desc = entry['message'] #+ " #{ok.arguments.inspect}"
23
+
24
+ puts "ok".ansi(*config.pass) + highlight(" #{@i} - #{entry['label']}")
25
+ end
26
+
27
+ #
28
+ def fail(entry)
29
+ super(entry)
30
+
31
+ @i += 1
32
+ x = entry['exception']
33
+
34
+ #desc = #ok.concern.label + " #{ok.arguments.inspect}"
35
+
36
+ body = []
37
+ body << "FAIL #{x['file']}:#{x['line']}" #clean_backtrace(exception.backtrace)[0]
38
+ body << "#{x['message']}"
39
+ body << x['snippet']
40
+ body << x['backtrace']
41
+ body << entry['stdout']
42
+ body = body.join("\n").gsub(/^/, ' # ')
43
+
44
+ puts "not ok".ansi(*config.fail) + highlight(" #{@i} - #{entry['label']}")
45
+ puts body
46
+ end
47
+
48
+ #
49
+ def error(entry)
50
+ super(entry)
51
+
52
+ @i += 1
53
+ x = entry['exception']
54
+
55
+ #desc = ok.concern.label + " #{ok.arguments.inspect}"
56
+
57
+ body = []
58
+ body << "ERROR #{x['file']}:#{x['line']}" #clean_backtrace(exception.backtrace)[0..2].join(" \n")
59
+ body << "#{x['class']}: #{x['message']}"
60
+ body << ""
61
+ body << x['backtrace']
62
+ body << entry['stdout']
63
+ body = body.join("\n").gsub(/^/, ' # ')
64
+
65
+ puts "not ok".ansi(*config.error) + highlight(" #{@i} - #{entry['label']}")
66
+ puts body
67
+ end
68
+
69
+ def todo(entry)
70
+ super(entry)
71
+ @i += 1
72
+ puts 'ok'.ansi(*config.pass) + highlight(" #{@i} - #{entry['label']} # skip #{entry['exception']['message']}")
73
+ puts " # #{entry['exception']['message']}"
74
+ end
75
+
76
+ def highlight(anything)
77
+ anything.ansi(*config.highlight)
78
+ end
79
+
80
+ # to print out formatted time and rates
81
+ def finish_suite(entry)
82
+ time, rate, avg = time_tally(entry)
83
+ delta = duration(time)
84
+
85
+ ending = []
86
+ ending << ""
87
+ ending << tally_message(entry)
88
+ ending << "[%s %.2ft/s %.4fs/t] " % [delta, rate, avg] + "Finished at: #{Time.now}"
89
+ ending = ending.join("\n").gsub(/^/, ' # ')
90
+
91
+ puts ending
92
+ end
93
+
94
+ end
@@ -0,0 +1,61 @@
1
+
2
+ module YARD
3
+
4
+ # Intercept all tagged test case definitions in order to document test case
5
+ # taggings automatically.
6
+ class TaggedTestCaseHandler < YARD::Handlers::Ruby::Base
7
+ # Register ourselves to handle method calls to `test`. Limit our interactions
8
+ # to the current namespace only.
9
+ handles method_call(:test)
10
+ namespace_only
11
+
12
+ # Process the method call to `test do ... end` as a dynamic method definition.
13
+ def process
14
+ # Retrieve the currently-active statement and its parameters
15
+ stmt = self.statement
16
+ params = stmt.parameters
17
+
18
+ # Move the AST pointer to the first parameter that is either a string or
19
+ # an identifier (e.g., inner symbol)
20
+ name = params.first.jump(:tstring_content, :ident).source
21
+
22
+ # Create a new method object in the namespace with the correct name
23
+ object = YARD::CodeObjects::MethodObject.new(self.namespace, "test_#{name}")
24
+
25
+ # Parse the block between the `test do` and `end` and attribute it to the
26
+ # method object above
27
+ self.parse_block(stmt.last.last, owner: object)
28
+
29
+ # Annotate it as a dynamic object with custom attributes
30
+ object.dynamic = true
31
+
32
+ # The options s-exp looks like:
33
+ #
34
+ # s(s(:assoc, s(:label, 'Key1'), s(...)),
35
+ # s(:assoc, s(:label, 'Key2'), s(...))
36
+ # )
37
+ #
38
+ # if one exists (nil otherwise)
39
+ if opts_sexp = params[1]
40
+ object['test_case_attrs'] = opts_sexp.inject(Hash.new) do |hsh, kv|
41
+ key_sexp, value_sexp = kv.jump(:assoc)
42
+
43
+ if (string_sexp = value_sexp.jump(:tstring_content)) && (string_sexp.type == :tstring_content)
44
+ hsh[key_sexp.first] = string_sexp.first
45
+ elsif (array_sexp = value_sexp.jump(:array)) && (array_sexp.type == :array)
46
+ hsh[key_sexp.first] = array_sexp.first.map { |sexp| sexp.jump(:tstring_content, :ident).first }
47
+ else
48
+ raise ArgumentError, "Cannot parse and render: #{kv.inspect}"
49
+ end
50
+
51
+ hsh
52
+ end
53
+ end
54
+
55
+ # Register the object
56
+ self.register(object)
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,38 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'mini_autobot/version'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "mini_autobot"
7
+ s.version = MiniAutobot::VERSION
8
+ s.authors = ["Ripta Pasay", "Peijie Hu", "RentPath"]
9
+
10
+ s.summary = %q{Web automation framework on minitest, selenium webdriver, and page objects.}
11
+ s.description = %q{Wrapper of minitest and selenium-webdriver that supports multiple webapps
12
+ and multiple OS/browser ui automation testing, ready to be integrated in
13
+ development pipeline with jenkins and saucelabs.}
14
+ s.homepage = "https://github.com/rentpath/autobots"
15
+ s.license = "MIT"
16
+
17
+ s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ s.bindir = "bin"
19
+ s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'activesupport', '~> 4.2'
23
+ s.add_dependency 'faker', '~> 1.4'
24
+ s.add_dependency 'google-api-client', '~> 0.8'
25
+ s.add_dependency 'google_drive', '~> 1.0'
26
+ s.add_dependency 'mail', '~> 2.6'
27
+ s.add_dependency 'minitap', '~> 0.5.3'
28
+ s.add_dependency 'pry', '~> 0.10'
29
+ s.add_dependency 'minitest', '~>5.4.0'
30
+ s.add_dependency 'selenium-webdriver', '~> 2.46'
31
+ s.add_dependency 'rest-client', '~> 1.8'
32
+
33
+ s.add_development_dependency 'rake'
34
+ s.add_development_dependency 'rspec', '~> 3.3.0'
35
+ s.add_development_dependency 'guard'
36
+ s.add_development_dependency 'guard-minitest'
37
+ s.add_development_dependency 'yard'
38
+ end
metadata ADDED
@@ -0,0 +1,299 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mini_autobot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Ripta Pasay
8
+ - Peijie Hu
9
+ - RentPath
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2015-08-11 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '4.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '4.2'
29
+ - !ruby/object:Gem::Dependency
30
+ name: faker
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.4'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.4'
43
+ - !ruby/object:Gem::Dependency
44
+ name: google-api-client
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.8'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.8'
57
+ - !ruby/object:Gem::Dependency
58
+ name: google_drive
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: mail
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '2.6'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '2.6'
85
+ - !ruby/object:Gem::Dependency
86
+ name: minitap
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 0.5.3
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 0.5.3
99
+ - !ruby/object:Gem::Dependency
100
+ name: pry
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '0.10'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '0.10'
113
+ - !ruby/object:Gem::Dependency
114
+ name: minitest
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: 5.4.0
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: 5.4.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: selenium-webdriver
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '2.46'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '2.46'
141
+ - !ruby/object:Gem::Dependency
142
+ name: rest-client
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.8'
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: '1.8'
155
+ - !ruby/object:Gem::Dependency
156
+ name: rake
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: rspec
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: 3.3.0
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: 3.3.0
183
+ - !ruby/object:Gem::Dependency
184
+ name: guard
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ type: :development
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ - !ruby/object:Gem::Dependency
198
+ name: guard-minitest
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - ">="
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ type: :development
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
211
+ - !ruby/object:Gem::Dependency
212
+ name: yard
213
+ requirement: !ruby/object:Gem::Requirement
214
+ requirements:
215
+ - - ">="
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ type: :development
219
+ prerelease: false
220
+ version_requirements: !ruby/object:Gem::Requirement
221
+ requirements:
222
+ - - ">="
223
+ - !ruby/object:Gem::Version
224
+ version: '0'
225
+ description: |-
226
+ Wrapper of minitest and selenium-webdriver that supports multiple webapps
227
+ and multiple OS/browser ui automation testing, ready to be integrated in
228
+ development pipeline with jenkins and saucelabs.
229
+ email:
230
+ executables:
231
+ - mini_autobot
232
+ extensions: []
233
+ extra_rdoc_files: []
234
+ files:
235
+ - ".gitignore"
236
+ - ".rspec"
237
+ - ".ruby-version"
238
+ - Gemfile
239
+ - Gemfile.lock
240
+ - LICENSE
241
+ - README.md
242
+ - bin/mini_autobot
243
+ - lib/mini_autobot.rb
244
+ - lib/mini_autobot/connector.rb
245
+ - lib/mini_autobot/console.rb
246
+ - lib/mini_autobot/emails.rb
247
+ - lib/mini_autobot/emails/mailbox.rb
248
+ - lib/mini_autobot/endeca/base.rb
249
+ - lib/mini_autobot/init.rb
250
+ - lib/mini_autobot/logger.rb
251
+ - lib/mini_autobot/page_objects.rb
252
+ - lib/mini_autobot/page_objects/base.rb
253
+ - lib/mini_autobot/page_objects/overlay/base.rb
254
+ - lib/mini_autobot/page_objects/widgets/base.rb
255
+ - lib/mini_autobot/parallel.rb
256
+ - lib/mini_autobot/runner.rb
257
+ - lib/mini_autobot/settings.rb
258
+ - lib/mini_autobot/test_case.rb
259
+ - lib/mini_autobot/test_cases.rb
260
+ - lib/mini_autobot/utils.rb
261
+ - lib/mini_autobot/utils/assertion_helper.rb
262
+ - lib/mini_autobot/utils/castable.rb
263
+ - lib/mini_autobot/utils/data_generator_helper.rb
264
+ - lib/mini_autobot/utils/endeca_helper.rb
265
+ - lib/mini_autobot/utils/loggable.rb
266
+ - lib/mini_autobot/utils/overlay_and_widget_helper.rb
267
+ - lib/mini_autobot/utils/page_object_helper.rb
268
+ - lib/mini_autobot/version.rb
269
+ - lib/minitap/minitest5_rent.rb
270
+ - lib/minitest/autobot_settings_plugin.rb
271
+ - lib/tapout/custom_reporters/fancy_tap_reporter.rb
272
+ - lib/yard/tagged_test_case_handler.rb
273
+ - mini_autobot.gemspec
274
+ homepage: https://github.com/rentpath/autobots
275
+ licenses:
276
+ - MIT
277
+ metadata: {}
278
+ post_install_message:
279
+ rdoc_options: []
280
+ require_paths:
281
+ - lib
282
+ required_ruby_version: !ruby/object:Gem::Requirement
283
+ requirements:
284
+ - - ">="
285
+ - !ruby/object:Gem::Version
286
+ version: '0'
287
+ required_rubygems_version: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - ">="
290
+ - !ruby/object:Gem::Version
291
+ version: '0'
292
+ requirements: []
293
+ rubyforge_project:
294
+ rubygems_version: 2.2.2
295
+ signing_key:
296
+ specification_version: 4
297
+ summary: Web automation framework on minitest, selenium webdriver, and page objects.
298
+ test_files: []
299
+ has_rdoc: