testingbot 0.1.7 → 0.2.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/LICENSE +1 -1
  4. data/README.md +137 -0
  5. data/bin/testingbot +4 -3
  6. data/lib/testingbot.rb +1 -5
  7. data/lib/testingbot/api.rb +91 -15
  8. data/lib/testingbot/version.rb +1 -1
  9. data/spec/integration/api_spec.rb +21 -15
  10. data/spec/spec_helper.rb +6 -3
  11. data/testingbot.gemspec +3 -3
  12. metadata +7 -52
  13. data/README.rdoc +0 -237
  14. data/examples/android.rb +0 -14
  15. data/examples/capybara.rb +0 -22
  16. data/examples/capybara_multiple_browsers.rb +0 -38
  17. data/examples/cucumber/README.rdoc +0 -15
  18. data/examples/cucumber/Rakefile +0 -20
  19. data/examples/cucumber/features/support/env.rb +0 -13
  20. data/examples/cucumber/features/youtube.feature +0 -10
  21. data/examples/cucumber/features/youtube_steps.rb +0 -15
  22. data/examples/test_rspec.rb +0 -17
  23. data/examples/test_rspec1.rb +0 -36
  24. data/examples/test_unit.rb +0 -30
  25. data/lib/testingbot/capybara.rb +0 -66
  26. data/lib/testingbot/config.rb +0 -125
  27. data/lib/testingbot/cucumber.rb +0 -35
  28. data/lib/testingbot/hooks.rb +0 -284
  29. data/lib/testingbot/jasmine.rb +0 -29
  30. data/lib/testingbot/jasmine/README.rdoc +0 -16
  31. data/lib/testingbot/jasmine/Rakefile +0 -35
  32. data/lib/testingbot/jasmine/public/javascripts/Player.js +0 -22
  33. data/lib/testingbot/jasmine/public/javascripts/Song.js +0 -7
  34. data/lib/testingbot/jasmine/runner.rb +0 -4
  35. data/lib/testingbot/jasmine/spec/javascripts/PlayerSpec.js +0 -58
  36. data/lib/testingbot/jasmine/spec/javascripts/helpers/SpecHelper.js +0 -9
  37. data/lib/testingbot/jasmine/spec/javascripts/support/jasmine.yml +0 -73
  38. data/lib/testingbot/jasmine/test/Rakefile +0 -9
  39. data/lib/testingbot/jasmine/test/public/javascripts/Player.js +0 -22
  40. data/lib/testingbot/jasmine/test/public/javascripts/Song.js +0 -7
  41. data/lib/testingbot/jasmine/test/spec/javascripts/PlayerSpec.js +0 -58
  42. data/lib/testingbot/jasmine/test/spec/javascripts/helpers/SpecHelper.js +0 -9
  43. data/lib/testingbot/jasmine/test/spec/javascripts/support/jasmine.yml +0 -73
  44. data/lib/testingbot/selenium.rb +0 -127
  45. data/lib/testingbot/tunnel.rb +0 -104
  46. data/spec/integration/selenium1_spec.rb +0 -53
  47. data/spec/integration/selenium2_spec.rb +0 -60
  48. data/spec/integration/tunnel_spec.rb +0 -84
  49. data/spec/unit/api_spec.rb +0 -17
  50. data/spec/unit/config_spec.rb +0 -73
  51. data/spec/unit/tunnel_spec.rb +0 -41
  52. data/vendor/Testingbot-Tunnel.jar +0 -0
@@ -1,127 +0,0 @@
1
- # we create our own Selenium classes here to extend them with user credentials and config
2
-
3
- require 'selenium/client'
4
- require 'selenium/webdriver'
5
- require 'selenium/webdriver/remote/http/persistent'
6
-
7
- module TestingBot
8
-
9
- class SeleniumWebdriver
10
-
11
- attr_reader :config, :driver
12
- attr_accessor :session_id_backup
13
-
14
- def initialize(options = {})
15
- @options = TestingBot::get_config.options
16
- @options = @options.merge(options)
17
-
18
- http_client = ::Selenium::WebDriver::Remote::Http::Persistent.new
19
- if ENV['TESTINGBOT_CLIENT_PROXY']
20
- require 'ostruct'
21
- http_client.proxy = OpenStruct.new(:http => ENV['TESTINGBOT_CLIENT_PROXY'])
22
- end
23
- http_client.timeout = 400
24
- @driver = ::Selenium::WebDriver.for(:remote, :url => "http://#{@options[:client_key]}:#{@options[:client_secret]}@#{@options[:host]}:#{@options[:port]}/wd/hub", :desired_capabilities => @options[:desired_capabilities], :http_client => http_client)
25
- http_client.timeout = 120
26
- end
27
-
28
- def method_missing(meth, *args)
29
- @driver.send(meth, *args)
30
- end
31
-
32
- def session_id
33
- @driver.send(:bridge).session_id
34
- end
35
-
36
- def stop
37
- @session_id_backup = session_id
38
- @driver.quit
39
- end
40
- end
41
- end
42
-
43
- # if selenium RC, add testingbot credentials to request
44
- if defined?(Selenium) && defined?(Selenium::Client) && defined?(Selenium::Client::Protocol)
45
- module Selenium
46
- module Client
47
- module Protocol
48
- # add custom parameters for testingbot.com
49
- def http_request_for_testingbot(verb, args)
50
- raise "Please specify your key and secret in a ~/.testingbot or C:\\.testingbot file" if TestingBot.get_config[:client_key].nil?
51
- data = http_request_for_original(verb, args)
52
- data << "&client_key=#{TestingBot.get_config[:client_key]}&client_secret=#{TestingBot.get_config[:client_secret]}"
53
- end
54
-
55
- begin
56
- alias http_request_for_original http_request_for
57
- alias http_request_for http_request_for_testingbot
58
- rescue
59
- end
60
- end
61
- end
62
- end
63
- end
64
-
65
- if defined?(Selenium) && defined?(Selenium::Client) && defined?(Selenium::Client::Base)
66
- module Selenium
67
- module Client
68
- module Base
69
- DEFAULT_OPTIONS = {
70
- :screenshot => true
71
- }
72
-
73
- alias :close_current_browser_session_old :close_current_browser_session
74
- alias :start_new_browser_session_old :start_new_browser_session
75
- alias :initialize_old :initialize
76
-
77
- attr_accessor :options
78
- attr_accessor :session_id_backup
79
- attr_accessor :extra
80
- attr_accessor :platform
81
- attr_accessor :version
82
-
83
- attr_reader :config
84
-
85
- def initialize(*args)
86
- @config = TestingBot::get_config
87
- @options = @config[:options] || {}
88
-
89
- if args[0].kind_of?(Hash)
90
- options = args[0]
91
- @platform = options[:platform] || "WINDOWS"
92
- @version = options[:version] if options[:version]
93
- end
94
-
95
- @options = DEFAULT_OPTIONS
96
- initialize_old(*args)
97
- @host = options[:host] || @config[:host]
98
- @port = options[:port] || @config[:port]
99
- end
100
-
101
- def close_current_browser_session
102
- @session_id_backup = @session_id
103
- close_current_browser_session_old
104
- end
105
-
106
- def session_id
107
- @session_id || @session_id_backup || ""
108
- end
109
-
110
- def start_new_browser_session(options={})
111
- options = @options.merge options
112
- options[:platform] = @platform
113
- options[:version] = @version unless @version.nil?
114
- start_new_browser_session_old(options)
115
- end
116
-
117
- def extra=(str)
118
- @extra = str
119
- end
120
-
121
- def options=(opts = {})
122
- @options = @options.merge opts
123
- end
124
- end
125
- end
126
- end
127
- end
@@ -1,104 +0,0 @@
1
- module TestingBot
2
- class Tunnel
3
- TIMEOUT_SECONDS = 140
4
-
5
- @@running = false
6
-
7
- attr_reader :options, :config, :process, :available, :connected, :errors
8
-
9
- def initialize(opts = {})
10
- @available = false
11
- @errors = []
12
- @config = TestingBot.get_config
13
- @options = default_options
14
- @options = @options.merge(opts)
15
-
16
- raise ArgumentError, "Please make sure you have put the .testingbot file in the your user directory, or set the environment variables TESTINGBOT_CLIENTKEY AND TESTINGBOT_CLIENTSECRET" if @config[:client_key].nil? || @config[:client_secret].nil?
17
- end
18
-
19
- def start
20
- return if @@running == true
21
-
22
- @@running = true
23
-
24
- @config.require_tunnel
25
- p "Starting the TestingBot Tunnel" if @options[:verbose] == true
26
- @process = IO.popen("exec java -jar #{get_jar_path} #{@options[:client_key] || @config[:client_key]} #{@options[:client_secret] || @config[:client_secret]} #{extra_options} 2>&1")
27
- at_exit do
28
- @@running = false
29
- # make sure we kill the tunnel
30
- Process.kill("INT", @process.pid) if @available == true
31
- end
32
-
33
- Thread.new do
34
- while (line = @process.gets)
35
- if line =~ /^You may start your tests/
36
- @available = true
37
- end
38
-
39
- if line =~ /Exception/ || line =~ /error/
40
- @errors << line
41
- end
42
-
43
- p line if @options[:verbose] == true
44
- end
45
- end
46
-
47
- poll_ready
48
-
49
- p "You are now ready to start your test" if @options[:verbose] == true
50
- end
51
-
52
- def is_connected?
53
- @available
54
- end
55
-
56
- def errors
57
- @errors || []
58
- end
59
-
60
- def stop
61
- raise "Can't stop tunnel, it has not been started yet" if @process.nil?
62
- p "Stopping TestingBot Tunnel" if @options[:verbose] == true
63
-
64
- kill
65
- end
66
-
67
- def kill
68
- @@running = false
69
- @available = false
70
- Process.kill("INT", @process.pid)
71
- Process.wait
72
- end
73
-
74
- def extra_options
75
- extra = @options[:options] || []
76
- extra.join(" ")
77
- end
78
-
79
- private
80
-
81
- def default_options
82
- {
83
- :verbose => true
84
- }
85
- end
86
-
87
- def get_jar_path
88
- file = File.expand_path(File.dirname(__FILE__) + '/../../vendor/Testingbot-Tunnel.jar')
89
- raise RuntimeException, "Could not find TestingBot-Tunnel.jar in vendor directory" unless File.exists?(file)
90
-
91
- file
92
- end
93
-
94
- def poll_ready
95
- seconds = 0
96
- while ((@available == false) && (seconds < TIMEOUT_SECONDS) && @errors.empty?)
97
- sleep 1
98
- seconds = seconds + 1
99
- end
100
-
101
- raise "Could not start Tunnel after #{TIMEOUT_SECONDS} seconds" if !is_connected? && @errors.empty?
102
- end
103
- end
104
- end
@@ -1,53 +0,0 @@
1
- require "uri"
2
- require "net/http"
3
- require 'rspec'
4
-
5
- @@success = true
6
- @@check_api = true
7
-
8
- # disabled until RSpec2 has append_after support
9
- # ::RSpec.configuration.after :each do
10
- # if @@check_api
11
- # api = TestingBot::Api.new
12
- # single_test = api.get_single_test(@selenium_driver.session_id)
13
- # single_test["success"].should eql(@@success)
14
- # single_test["extra"].should eql("just a test")
15
- # end
16
- # end
17
-
18
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
19
-
20
- describe "Selenium RC test" do
21
-
22
- before(:all) do
23
- @selenium_driver = Selenium::Client::Driver.new \
24
- :browser => "firefox",
25
- :url => "http://testingbot.com",
26
- :timeout_in_second => 60,
27
- :platform => "WINDOWS",
28
- :version => "10"
29
- end
30
- before(:each) do
31
- @selenium_driver.start_new_browser_session({ :extra => "just a test" })
32
- end
33
-
34
- after(:each) do
35
- @selenium_driver.close_current_browser_session
36
- end
37
-
38
- context "Connect and run successfully to the TestingBot Grid with Selenium 1 (RC)" do
39
- it "should be able to run an RC test successfully" do
40
- @check_api = false
41
- @selenium_driver.open "/"
42
- @selenium_driver.text?("TestingBot").should be_true
43
- end
44
- end
45
-
46
- context "Check that we report the test status back successfully" do
47
- it "should send a success status to TestingBot upon success of the test" do
48
- @check_api = true
49
- @selenium_driver.open "/"
50
- @selenium_driver.text?("TestingBot").should be_true
51
- end
52
- end
53
- end
@@ -1,60 +0,0 @@
1
- require "uri"
2
- require "net/http"
3
- require 'rspec'
4
-
5
- @@success = true
6
- @@check_api = true
7
-
8
- # disabled until RSpec2 has append_after support
9
- # ::RSpec.configuration.after :each do
10
- # if @@check_api
11
- # api = TestingBot::Api.new
12
- # single_test = api.get_single_test(@selenium_driver.session_id)
13
- # single_test["success"].should eql(@@success)
14
- # end
15
- # end
16
-
17
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
18
-
19
-
20
- TestingBot::config do |config|
21
- config[:desired_capabilities] = { :browserName => "firefox", :version => 9, :platform => "WINDOWS" }
22
- end
23
-
24
- describe "Selenium WebDriver test" do
25
-
26
- before(:all) do
27
- @selenium_driver = TestingBot::SeleniumWebdriver.new
28
- end
29
-
30
- after(:each) do
31
- @selenium_driver.stop
32
- end
33
-
34
- context "Connect and run successfully to the TestingBot Grid with Selenium 2" do
35
- it "should be able to run an RC test successfully" do
36
- @check_api = false
37
- @selenium_driver.navigate.to "http://testingbot.com"
38
- @selenium_driver.title.should match /^Selenium Testing/
39
- end
40
- end
41
- end
42
-
43
- describe "Selenium WebDriver test API" do
44
-
45
- before(:all) do
46
- @selenium_driver = TestingBot::SeleniumWebdriver.new
47
- end
48
-
49
- after(:each) do
50
- @selenium_driver.stop
51
- end
52
-
53
- context "Check that we report the test status back successfully" do
54
- it "should send a success status to TestingBot upon success of the test" do
55
- @check_api = true
56
- @selenium_driver.navigate.to "http://testingbot.com"
57
- @selenium_driver.title.should match /^Selenium Testing/
58
- end
59
- end
60
- end
@@ -1,84 +0,0 @@
1
- require 'rspec'
2
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
-
4
- describe "Testingbot Tunnel" do
5
- after :each do
6
- @tunnel.stop if @tunnel.is_connected?
7
- TestingBot.reset_config!
8
- end
9
-
10
- context "the tunnel should start and block until it's ready" do
11
- it "should successfully start a tunnel connection" do
12
- @tunnel = TestingBot::Tunnel.new()
13
- @tunnel.start
14
- @tunnel.is_connected?.should == true
15
- end
16
-
17
- it "should raise an exception when trying to stop a tunnel that has not been started yet" do
18
- @tunnel = TestingBot::Tunnel.new()
19
- lambda { @tunnel.stop }.should raise_error(RuntimeError, /not been started/)
20
- end
21
- end
22
-
23
- context "the tunnel needs to handle proper credentials" do
24
- it "should fail to start a tunnel connection when invalid credentials are supplied" do
25
- @tunnel = TestingBot::Tunnel.new({ :client_key => "fake", :client_secret => "bogus" })
26
- @tunnel.start
27
- @tunnel.is_connected?.should == false
28
- @tunnel.errors.should_not be_empty
29
- @tunnel.kill
30
- end
31
-
32
- it "should try to fetch client_key and client_secret from the ~/.testingbot file when no credentials supplied" do
33
- if File.exists?(File.expand_path("~/.testingbot"))
34
- @tunnel = TestingBot::Tunnel.new()
35
- @tunnel.start
36
- @tunnel.is_connected?.should == true
37
- end
38
- end
39
- end
40
-
41
- context "the tunnel needs to accept extra options" do
42
- it "should accept extra options" do
43
- if File.exists?(File.expand_path("~/testingbot_ready.txt"))
44
- File.delete(File.expand_path("~/testingbot_ready.txt"))
45
- end
46
-
47
- File.exists?(File.expand_path("~/testingbot_ready.txt")).should == false
48
-
49
- @tunnel = TestingBot::Tunnel.new({ :options => ['-f ~/testingbot_ready.txt'] })
50
- @tunnel.start
51
- @tunnel.is_connected?.should == true
52
-
53
- File.exists?(File.expand_path("~/testingbot_ready.txt")).should == true
54
- end
55
- end
56
-
57
- context "there should only be one instance of a tunnel running" do
58
- it "should check before starting that another tunnel is not yet running" do
59
- @tunnel = TestingBot::Tunnel.new
60
- @tunnel.start
61
- @tunnel.is_connected?.should == true
62
-
63
- clone = TestingBot::Tunnel.new
64
- clone.start
65
- clone.is_connected?.should == false
66
- end
67
-
68
- it "should not be possible to stop a tunnel that is not running" do
69
- @tunnel = TestingBot::Tunnel.new
70
- lambda { @tunnel.stop }.should raise_error(RuntimeError, /^Can't stop tunnel/)
71
- end
72
- end
73
-
74
- context "When running a tunnel config values should be changed" do
75
- it "should change the host and port in the config so that we connect to our tunnel instead of to the grid directly" do
76
- @tunnel = TestingBot::Tunnel.new
77
- @tunnel.start
78
- @tunnel.is_connected?.should == true
79
- @tunnel.instance_variable_get("@config")[:require_tunnel].should == true
80
- @tunnel.instance_variable_get("@config")[:host].should eql("127.0.0.1")
81
- @tunnel.instance_variable_get("@config")[:port].should eql(4445)
82
- end
83
- end
84
- end
@@ -1,17 +0,0 @@
1
- require "rspec"
2
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/testingbot/config.rb')
3
- require File.expand_path(File.dirname(__FILE__) + '/../../lib/testingbot/api.rb')
4
-
5
- describe TestingBot::Api do
6
- describe "load config" do
7
- it "should load the configuration in the constructor" do
8
- api = TestingBot::Api.new
9
- api.instance_variable_get("@config").should_not be_nil
10
- end
11
-
12
- it "should use the credentials passed in from the constructor, overwriting possible credentials from the config" do
13
- api = TestingBot::Api.new({ :client_key => "fake" })
14
- api.instance_variable_get("@config")[:client_key].should eql("fake")
15
- end
16
- end
17
- end