testingbot 0.1.5 → 0.2.2

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 (54) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/test.yml +26 -0
  3. data/.travis.yml +7 -3
  4. data/LICENSE +1 -1
  5. data/README.md +207 -0
  6. data/bin/testingbot +4 -3
  7. data/lib/testingbot.rb +1 -5
  8. data/lib/testingbot/api.rb +153 -35
  9. data/lib/testingbot/version.rb +1 -1
  10. data/spec/integration/api_spec.rb +38 -18
  11. data/spec/resources/test.apk +1 -0
  12. data/spec/spec_helper.rb +6 -3
  13. metadata +55 -94
  14. data/README.rdoc +0 -237
  15. data/examples/android.rb +0 -14
  16. data/examples/capybara.rb +0 -22
  17. data/examples/capybara_multiple_browsers.rb +0 -38
  18. data/examples/cucumber/README.rdoc +0 -15
  19. data/examples/cucumber/Rakefile +0 -20
  20. data/examples/cucumber/features/support/env.rb +0 -13
  21. data/examples/cucumber/features/youtube.feature +0 -10
  22. data/examples/cucumber/features/youtube_steps.rb +0 -15
  23. data/examples/test_rspec.rb +0 -17
  24. data/examples/test_rspec1.rb +0 -36
  25. data/examples/test_unit.rb +0 -30
  26. data/lib/testingbot/capybara.rb +0 -66
  27. data/lib/testingbot/config.rb +0 -125
  28. data/lib/testingbot/cucumber.rb +0 -35
  29. data/lib/testingbot/hooks.rb +0 -287
  30. data/lib/testingbot/jasmine.rb +0 -29
  31. data/lib/testingbot/jasmine/README.rdoc +0 -16
  32. data/lib/testingbot/jasmine/Rakefile +0 -35
  33. data/lib/testingbot/jasmine/public/javascripts/Player.js +0 -22
  34. data/lib/testingbot/jasmine/public/javascripts/Song.js +0 -7
  35. data/lib/testingbot/jasmine/runner.rb +0 -4
  36. data/lib/testingbot/jasmine/spec/javascripts/PlayerSpec.js +0 -58
  37. data/lib/testingbot/jasmine/spec/javascripts/helpers/SpecHelper.js +0 -9
  38. data/lib/testingbot/jasmine/spec/javascripts/support/jasmine.yml +0 -73
  39. data/lib/testingbot/jasmine/test/Rakefile +0 -9
  40. data/lib/testingbot/jasmine/test/public/javascripts/Player.js +0 -22
  41. data/lib/testingbot/jasmine/test/public/javascripts/Song.js +0 -7
  42. data/lib/testingbot/jasmine/test/spec/javascripts/PlayerSpec.js +0 -58
  43. data/lib/testingbot/jasmine/test/spec/javascripts/helpers/SpecHelper.js +0 -9
  44. data/lib/testingbot/jasmine/test/spec/javascripts/support/jasmine.yml +0 -73
  45. data/lib/testingbot/selenium.rb +0 -127
  46. data/lib/testingbot/tunnel.rb +0 -104
  47. data/spec/integration/selenium1_spec.rb +0 -53
  48. data/spec/integration/selenium2_spec.rb +0 -60
  49. data/spec/integration/tunnel_spec.rb +0 -84
  50. data/spec/unit/api_spec.rb +0 -17
  51. data/spec/unit/config_spec.rb +0 -73
  52. data/spec/unit/tunnel_spec.rb +0 -41
  53. data/testingbot.gemspec +0 -25
  54. data/vendor/Testingbot-Tunnel.jar +0 -0
@@ -1,287 +0,0 @@
1
- # rspec 1
2
- if defined?(Spec) && defined?(Spec::VERSION::MAJOR) && Spec::VERSION::MAJOR == 1
3
- require "selenium/rspec/spec_helper"
4
- Spec::Runner.configure do |config|
5
- config.before(:suite) do
6
- if TestingBot.get_config[:require_tunnel]
7
- @@tunnel = TestingBot::Tunnel.new(TestingBot.get_config[:tunnel_options] || {})
8
- @@tunnel.start
9
- end
10
- end
11
-
12
- config.after(:suite) do
13
- @@tunnel.stop if defined? @@tunnel
14
- end
15
-
16
- config.prepend_after(:each) do
17
- client_key = TestingBot.get_config[:client_key]
18
- client_secret = TestingBot.get_config[:client_secret]
19
-
20
- if !client_key.nil?
21
-
22
- session_id = nil
23
-
24
- if !@selenium_driver.nil?
25
- session_id = @selenium_driver.session_id_backup
26
- elsif defined?(Capybara)
27
- begin
28
- if page.driver.browser.respond_to?(:session_id)
29
- session_id = page.driver.browser.session_id
30
- else
31
- session_id = page.driver.browser.instance_variable_get("@bridge").instance_variable_get("@session_id")
32
- end
33
- rescue Exception => e
34
- puts "Could not determine sessionID, can not send results to TestingBot.com #{e.message}"
35
- end
36
- end
37
-
38
- if !session_id.nil?
39
- api = TestingBot::Api.new
40
- params = {
41
- "session_id" => session_id,
42
- "status_message" => @execution_error,
43
- "success" => !actual_failure? ? 1 : 0,
44
- "name" => description.to_s,
45
- "kind" => 2
46
- }
47
-
48
- begin
49
- data = api.update_test(session_id, params)
50
- rescue
51
- end
52
-
53
- if ENV['JENKINS_HOME'] && (TestingBot.get_config[:jenkins_output] == true)
54
- puts "TestingBotSessionID=" + session_id
55
- end
56
- end
57
- else
58
- puts "Can't post test results to TestingBot since I could not find a .testingbot file in your home-directory."
59
- end
60
- end
61
- end
62
- end
63
-
64
- # rspec 2
65
- begin
66
- require 'rspec'
67
-
68
- ::RSpec.configuration.before :suite do
69
- if TestingBot.get_config[:require_tunnel]
70
- @@tunnel = TestingBot::Tunnel.new(TestingBot.get_config[:tunnel_options] || {})
71
- @@tunnel.start
72
- end
73
- end
74
-
75
- module TestingBot
76
- module RSpecInclude
77
- attr_reader :selenium_driver
78
- alias_method :page, :selenium_driver
79
-
80
- def self.included(base)
81
- base.around do |test|
82
- if TestingBot.get_config.desired_capabilities.instance_of?(Array)
83
- TestingBot.get_config.desired_capabilities.each do |browser|
84
-
85
- if defined?(Capybara)
86
- ::Capybara.register_driver :multibrowser do |app|
87
- TestingBot::Capybara::CustomDriver.new(app, { :desired_capabilities => browser })
88
- end
89
-
90
- @selenium_driver = ::Capybara::Session.new(:multibrowser)
91
- else
92
- @selenium_driver = TestingBot::SeleniumWebdriver.new({ :desired_capabilities => browser })
93
- end
94
-
95
- begin
96
- test.run
97
- ensure
98
- @selenium_driver.stop
99
- end
100
- end
101
- else
102
- if defined?(Capybara)
103
- @selenium_driver = ::Capybara::Session.new(:testingbot)
104
- else
105
- @selenium_driver = TestingBot::SeleniumWebdriver.new({ :desired_capabilities => TestingBot.get_config.desired_capabilities })
106
- end
107
- begin
108
- test.run
109
- ensure
110
- @selenium_driver.stop
111
- end
112
- end
113
- end
114
- end
115
- end
116
-
117
- module RSpecIncludeLegacy
118
- attr_reader :selenium_driver
119
- alias_method :page, :selenium_driver
120
-
121
- def self.included(base)
122
- base.around do |test|
123
- if TestingBot.get_config.desired_capabilities.instance_of?(Array)
124
- TestingBot.get_config.desired_capabilities.each do |browser|
125
- @selenium_driver = ::Selenium::Client::Driver.new(:browser => browser[:browserName], :url => TestingBot.get_config[:browserUrl])
126
- @selenium_driver.start_new_browser_session(browser)
127
- begin
128
- test.run
129
- ensure
130
- @selenium_driver.stop
131
- end
132
- end
133
- else
134
- @selenium_driver = ::Selenium::Client::Driver.new(:browser => browser[:browserName], :url => TestingBot.get_config[:browserUrl])
135
- @selenium_driver.start_new_browser_session(TestingBot.get_config.desired_capabilities)
136
- begin
137
- test.run
138
- ensure
139
- @selenium_driver.stop
140
- end
141
- end
142
- end
143
- end
144
- end
145
- end
146
-
147
- ::RSpec.configuration.include(TestingBot::RSpecIncludeLegacy, :multibrowserRC => true)
148
- ::RSpec.configuration.include(TestingBot::RSpecInclude, :multibrowser => true)
149
-
150
- ::RSpec.configuration.after :suite do
151
- @@tunnel.stop if defined? @@tunnel
152
- end
153
-
154
- ::RSpec.configuration.after :each do
155
- client_key = TestingBot.get_config[:client_key]
156
- client_secret = TestingBot.get_config[:client_secret]
157
-
158
- if !client_key.nil?
159
- test_name = ""
160
- if example.metadata && example.metadata[:example_group]
161
- if example.metadata[:example_group][:description_args]
162
- test_name = example.metadata[:example_group][:description_args].join(" ")
163
- end
164
-
165
- if example.metadata[:description_args]
166
- test_name = test_name + " it " + example.metadata[:description_args].join(" ")
167
- end
168
- end
169
-
170
- status_message = ""
171
- status_message = example.exception.to_s if !example.exception.nil?
172
-
173
- session_id = nil
174
-
175
- if !@selenium_driver.nil?
176
- session_id = @selenium_driver.session_id
177
- elsif defined? page
178
- begin
179
- if page.driver.browser.respond_to?(:session_id)
180
- session_id = page.driver.browser.session_id
181
- else
182
- session_id = page.driver.browser.instance_variable_get("@bridge").instance_variable_get("@session_id")
183
- end
184
- rescue Exception => e
185
- p "Could not determine sessionID, can not send results to TestingBot.com #{e.message}"
186
- end
187
-
188
- if session_id.nil? || session_id.empty?
189
- begin
190
- session_id = page.driver.browser.send(:bridge).session_id
191
- rescue
192
- end
193
- end
194
- end
195
-
196
- if !session_id.nil?
197
- if ENV['JENKINS_HOME'] && (TestingBot.get_config[:jenkins_output] == true)
198
- puts "TestingBotSessionID=" + session_id
199
- end
200
- api = TestingBot::Api.new
201
- params = {
202
- "session_id" => session_id,
203
- "status_message" => status_message,
204
- "success" => example.exception.nil? ? 1 : 0,
205
- "name" => test_name,
206
- "kind" => 2
207
- }
208
-
209
- begin
210
- data = api.update_test(session_id, params)
211
- rescue
212
- end
213
- end
214
- else
215
- puts "Can't post test results to TestingBot since I could not find a .testingbot file in your home-directory."
216
- end
217
- end
218
- rescue LoadError
219
- end
220
-
221
- module TestingBot
222
- module SeleniumForTestUnit
223
- attr_accessor :exception
224
- attr_reader :browser
225
-
226
- def run(*args, &blk)
227
- return if @method_name.to_s == "default_test"
228
- if TestingBot.get_config.desired_capabilities.instance_of?(Array)
229
- TestingBot.get_config.desired_capabilities.each do |browser|
230
- @browser = ::Selenium::Client::Driver.new(:browser => browser[:browserName], :url => TestingBot.get_config[:browserUrl])
231
- @browser.start_new_browser_session(browser)
232
- super(*args, &blk)
233
- @browser.stop
234
- end
235
- else
236
- super(*args, &blk)
237
- end
238
- end
239
-
240
- def teardown
241
- return super if @browser.nil?
242
- api = TestingBot::Api.new
243
- params = {
244
- "session_id" => @browser.session_id,
245
- "status_message" => @exception || "",
246
- "success" => passed? ? 1 : 0,
247
- "name" => self.to_s,
248
- "kind" => 2
249
- }
250
-
251
- begin
252
- data = api.update_test(@browser.session_id, params)
253
- rescue
254
- end
255
-
256
- if ENV['JENKINS_HOME'] && (TestingBot.get_config[:jenkins_output] == true)
257
- puts "TestingBotSessionID=" + @browser.session_id
258
- end
259
- super
260
- end
261
-
262
- def handle_exception(e)
263
- @exception = e.to_s
264
- handle_exception_old(e)
265
- end
266
-
267
- alias :handle_exception_old :handle_exception
268
- end
269
- end
270
-
271
- begin
272
- require 'test/unit/testcase'
273
- module TestingBot
274
- class TestCase < Test::Unit::TestCase
275
- include SeleniumForTestUnit
276
- end
277
- end
278
- rescue LoadError
279
- end
280
-
281
- if defined?(ActiveSupport::TestCase)
282
- module TestingBot
283
- class RailsTestCase < ::ActiveSupport::TestCase
284
- include SeleniumForTestUnit
285
- end
286
- end
287
- end
@@ -1,29 +0,0 @@
1
- require 'jasmine'
2
- require 'testingbot/tunnel'
3
-
4
- module TestingBot
5
- module Jasmine
6
-
7
- class Driver < ::Jasmine::SeleniumDriver
8
- attr_reader :http_address, :driver, :browser
9
-
10
- def initialize(browser, http_address)
11
- tunnel = TestingBot::Tunnel.new(TestingBot.get_config[:tunnel_options] || {})
12
- tunnel.start
13
-
14
- @browser = browser
15
- @http_address = http_address
16
- @driver = TestingBot::SeleniumWebdriver.new({ :browserName => browser, :name => "Jasmine Test" })
17
- end
18
- end
19
- end
20
- end
21
-
22
- module Jasmine
23
- class Config
24
- def start
25
- @client = TestingBot::Jasmine::Driver.new(browser, "#{jasmine_host}:3001/")
26
- @client.connect
27
- end
28
- end
29
- end
@@ -1,16 +0,0 @@
1
- = TestingBot
2
-
3
- Testingbot.com is a website where you can use our cloud based Selenium grid. Test your web applications in various environments/browsers/devices.
4
-
5
- == How to run a Jasmine test on TestingBot
6
-
7
- Make sure you have the Jasmine gem installed
8
-
9
- $ gem install jasmine
10
-
11
- Now run our example Rake task:
12
- $ rake jasmine:testingbot
13
-
14
- == More information
15
-
16
- Get more information on http://testingbot.com
@@ -1,35 +0,0 @@
1
- require 'jasmine'
2
- require 'rspec/core/rake_task'
3
- require 'testingbot'
4
-
5
- namespace :jasmine do
6
- def run_jasmine_server
7
- ENV['JASMINE_PORT'] = '3001'
8
- Jasmine::Config.new.start_jasmine_server
9
- end
10
-
11
- desc "Execute Jasmine tests in a Chrome browser on testingbot"
12
- task :testingbot do
13
- run_jasmine_server
14
- Rake::Task['jasmine:testingbot:chrome'].execute
15
- end
16
-
17
- namespace :testingbot do
18
- desc "Execute Jasmine tests in Chrome and Firefox on TestingBot"
19
- task :all do
20
- run_jasmine_server
21
- threads = []
22
- [:chrome, :firefox].each do |browser|
23
- t = Thread.new do
24
- Rake::Task["jasmine:testingbot:#{browser}"].invoke
25
- end
26
- t.abort_on_exception = true
27
- threads << t
28
- end
29
-
30
- threads.each do |t|
31
- t.join
32
- end
33
- end
34
- end
35
- end
@@ -1,22 +0,0 @@
1
- function Player() {
2
- }
3
- Player.prototype.play = function(song) {
4
- this.currentlyPlayingSong = song;
5
- this.isPlaying = true;
6
- };
7
-
8
- Player.prototype.pause = function() {
9
- this.isPlaying = false;
10
- };
11
-
12
- Player.prototype.resume = function() {
13
- if (this.isPlaying) {
14
- throw new Error("song is already playing");
15
- }
16
-
17
- this.isPlaying = true;
18
- };
19
-
20
- Player.prototype.makeFavorite = function() {
21
- this.currentlyPlayingSong.persistFavoriteStatus(true);
22
- };
@@ -1,7 +0,0 @@
1
- function Song() {
2
- }
3
-
4
- Song.prototype.persistFavoriteStatus = function(value) {
5
- // something complicated
6
- throw new Error("not yet implemented");
7
- };
@@ -1,4 +0,0 @@
1
- require 'testingbot'
2
- require 'testingbot/jasmine'
3
- ENV['JASMINE_PORT'] = '3001'
4
- require 'jasmine/runner'
@@ -1,58 +0,0 @@
1
- describe("Player", function() {
2
- var player;
3
- var song;
4
-
5
- beforeEach(function() {
6
- player = new Player();
7
- song = new Song();
8
- });
9
-
10
- it("should be able to play a Song", function() {
11
- player.play(song);
12
- expect(player.currentlyPlayingSong).toEqual(song);
13
-
14
- //demonstrates use of custom matcher
15
- expect(player).toBePlaying(song);
16
- });
17
-
18
- describe("when song has been paused", function() {
19
- beforeEach(function() {
20
- player.play(song);
21
- player.pause();
22
- });
23
-
24
- it("should indicate that the song is currently paused", function() {
25
- expect(player.isPlaying).toBeFalsy();
26
-
27
- // demonstrates use of 'not' with a custom matcher
28
- expect(player).not.toBePlaying(song);
29
- });
30
-
31
- it("should be possible to resume", function() {
32
- player.resume();
33
- expect(player.isPlaying).toBeTruthy();
34
- expect(player.currentlyPlayingSong).toEqual(song);
35
- });
36
- });
37
-
38
- // demonstrates use of spies to intercept and test method calls
39
- it("tells the current song if the user has made it a favorite", function() {
40
- spyOn(song, 'persistFavoriteStatus');
41
-
42
- player.play(song);
43
- player.makeFavorite();
44
-
45
- expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true);
46
- });
47
-
48
- //demonstrates use of expected exceptions
49
- describe("#resume", function() {
50
- it("should throw an exception if song is already playing", function() {
51
- player.play(song);
52
-
53
- expect(function() {
54
- player.resume();
55
- }).toThrow("song is already playing");
56
- });
57
- });
58
- });