tddium-preview 0.0.8 → 0.1.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.
- data/CHANGELOG +2 -1
- data/Gemfile.lock +2 -1
- data/README.rdoc +10 -45
- data/lib/tddium.rb +38 -8
- data/lib/tddium/constant.rb +4 -1
- data/lib/tddium/version.rb +1 -1
- data/spec/tddium_spec.rb +66 -15
- data/tddium.gemspec +2 -1
- metadata +19 -8
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -3,58 +3,23 @@
|
|
3
3
|
tddium takes the pain out of running Selenium testing in cloud.
|
4
4
|
|
5
5
|
It automatically starts private Amazon EC2 Instances, runs your test,
|
6
|
-
collect results, and cleans up the EC2 resources it used so you only
|
7
|
-
what you use.
|
6
|
+
collect results, and cleans up the EC2 resources it used so you only
|
7
|
+
pay for what you use.
|
8
8
|
|
9
9
|
== Getting Started
|
10
10
|
|
11
|
-
1.
|
12
|
-
|
13
|
-
https://aws-portal.amazon.com/gp/aws/developer/registration/index.html
|
11
|
+
1. Install rvm (https://rvm.beginrescueend.com). As of this writing,
|
12
|
+
version 1.2.x is supported but version 1.5.x is not.
|
14
13
|
|
15
|
-
|
16
|
-
for Amazon Web Services.
|
14
|
+
2. Install ruby into your rvm and create a gemset
|
17
15
|
|
18
|
-
|
19
|
-
keep track of them.
|
16
|
+
3. Install the tddium-preview gem into your new gemset
|
20
17
|
|
21
|
-
|
22
|
-
steps:
|
18
|
+
4. In your GIT repo run tddium suite to create a new suite
|
23
19
|
|
24
|
-
|
25
|
-
- click on the "Account" link in the upper navigation menu
|
26
|
-
- click on "Security Credentials"
|
27
|
-
- scroll down to the first section "Access Credentials"
|
28
|
-
- the Access Key is a 20-character alphabetic string. The Secret is hidden. Click the 'show' link to reveal it.
|
29
|
-
|
30
|
-
3. In the AWS Management Console, create a selenium-grid security group, and
|
31
|
-
create rules for:
|
32
|
-
|
33
|
-
* allow dest port 4444 (Selenium-Grid)
|
34
|
-
* allow dest port 5900 (Windows Remote Desktop)
|
35
|
-
* allow http
|
36
|
-
* allow https
|
37
|
-
* allow vnc
|
38
|
-
* allow ssh
|
39
|
-
|
40
|
-
4. In the AWS Management Console, create a keypair called sg-keypair.
|
41
|
-
|
42
|
-
3. Subscribe to tddium:
|
43
|
-
|
44
|
-
Subscribe your Amazon EC2 account to tddium here:
|
45
|
-
|
46
|
-
https://aws-portal.amazon.com/gp/aws/user/subscription/index.html?ie=UTF8&offeringCode=FA429DE5
|
47
|
-
|
48
|
-
4. Start using tddium:
|
49
|
-
|
50
|
-
<tt>$ tddium config:init</tt>
|
51
|
-
|
52
|
-
# Asks you for the AWS Access Key and AWS Secret
|
53
|
-
|
54
|
-
<tt>$ tddium test:sequential</tt>
|
55
|
-
|
56
|
-
# Starts an EC2 Instance, sets SELENIUM_RC_HOST to it, and runs **/*_spec.rb in sequence
|
20
|
+
4. Run tddium spec to run your hosted tests
|
57
21
|
|
58
22
|
== Copyright
|
59
23
|
|
60
|
-
Copyright (c) 2011 Solano Labs All Rights Reserved. See LICENSE.txt for
|
24
|
+
Copyright (c) 2011 Solano Labs All Rights Reserved. See LICENSE.txt for
|
25
|
+
further details.
|
data/lib/tddium.rb
CHANGED
@@ -107,7 +107,11 @@ class Tddium < Thor
|
|
107
107
|
return unless git_repo? && tddium_settings && suite_for_current_branch?
|
108
108
|
|
109
109
|
test_execution_params = {}
|
110
|
-
|
110
|
+
|
111
|
+
# Set the user data for spec
|
112
|
+
if user_data_file_path = options[:user_data_file] || current_suite_options["user_data_file"]
|
113
|
+
say Text::Process::USING_PREVIOUS_USER_DATA_FILE % user_data_file_path if user_data_file_path == current_suite_options["user_data_file"]
|
114
|
+
|
111
115
|
if File.exists?(user_data_file_path)
|
112
116
|
user_data = File.open(user_data_file_path) { |file| file.read }
|
113
117
|
test_execution_params[:user_data_text] = Base64.encode64(user_data)
|
@@ -119,7 +123,10 @@ class Tddium < Thor
|
|
119
123
|
end
|
120
124
|
|
121
125
|
# Set max parallelism param
|
122
|
-
|
126
|
+
if max_parallelism = options[:max_parallelism] || current_suite_options["max_parallelism"]
|
127
|
+
say Text::Process::USING_PREVIOUS_MAX_PARALLELISM % max_parallelism if max_parallelism == current_suite_options["max_parallelism"]
|
128
|
+
test_execution_params[:max_parallelism] = max_parallelism
|
129
|
+
end
|
123
130
|
|
124
131
|
start_time = Time.now
|
125
132
|
|
@@ -164,7 +171,7 @@ class Tddium < Thor
|
|
164
171
|
# Print out the progress of running tests
|
165
172
|
current_test_executions["tests"].each do |test_name, result_params|
|
166
173
|
test_status = result_params["status"]
|
167
|
-
if result_params["
|
174
|
+
if result_params["finished"] && !finished_tests[test_name]
|
168
175
|
message = case test_status
|
169
176
|
when "passed" then [".", :green, false]
|
170
177
|
when "failed" then ["F", :red, false]
|
@@ -185,6 +192,9 @@ class Tddium < Thor
|
|
185
192
|
say ""
|
186
193
|
say Text::Process::FINISHED_TEST % (Time.now - start_time)
|
187
194
|
say "#{finished_tests.size} examples, #{test_statuses["failed"]} failures, #{test_statuses["error"]} errors, #{test_statuses["pending"]} pending"
|
195
|
+
|
196
|
+
# Save the spec options
|
197
|
+
write_suite(current_suite_id, {"user_data_file" => user_data_file_path, "max_parallelism" => max_parallelism})
|
188
198
|
rescue TddiumClient::Error::Base
|
189
199
|
end
|
190
200
|
end
|
@@ -214,6 +224,9 @@ class Tddium < Thor
|
|
214
224
|
say Text::Status::CURRENT_SUITE_UNAVAILABLE
|
215
225
|
end
|
216
226
|
end
|
227
|
+
|
228
|
+
account_usage = call_api(:get, Api::Path::ACCOUNT_USAGE)
|
229
|
+
say account_usage["usage"]
|
217
230
|
rescue TddiumClient::Error::Base
|
218
231
|
end
|
219
232
|
end
|
@@ -313,7 +326,13 @@ class Tddium < Thor
|
|
313
326
|
end
|
314
327
|
|
315
328
|
def current_suite_id
|
316
|
-
tddium_settings["branches"][current_git_branch] if tddium_settings["branches"]
|
329
|
+
tddium_settings["branches"][current_git_branch]["id"] if tddium_settings["branches"] && tddium_settings["branches"][current_git_branch]
|
330
|
+
end
|
331
|
+
|
332
|
+
def current_suite_options
|
333
|
+
if tddium_settings["branches"] && tddium_settings["branches"][current_git_branch]
|
334
|
+
tddium_settings["branches"][current_git_branch]["options"]
|
335
|
+
end || {}
|
317
336
|
end
|
318
337
|
|
319
338
|
def current_suite_path
|
@@ -351,7 +370,7 @@ class Tddium < Thor
|
|
351
370
|
end
|
352
371
|
|
353
372
|
def git_push
|
354
|
-
system("git push #{Git::REMOTE_NAME} #{current_git_branch}")
|
373
|
+
system("git push -f #{Git::REMOTE_NAME} #{current_git_branch}")
|
355
374
|
end
|
356
375
|
|
357
376
|
def git_repo?
|
@@ -450,7 +469,7 @@ class Tddium < Thor
|
|
450
469
|
def update_git_remote_and_push(suite_details)
|
451
470
|
git_repo_uri = suite_details["suite"]["git_repo_uri"]
|
452
471
|
unless `git remote show -n #{Git::REMOTE_NAME}` =~ /#{git_repo_uri}/
|
453
|
-
`git remote rm #{Git::REMOTE_NAME}`
|
472
|
+
`git remote rm #{Git::REMOTE_NAME} > /dev/null 2>&1`
|
454
473
|
`git remote add #{Git::REMOTE_NAME} #{git_repo_uri}`
|
455
474
|
end
|
456
475
|
git_push
|
@@ -466,13 +485,24 @@ class Tddium < Thor
|
|
466
485
|
File.open(tddium_file_name, "w") do |file|
|
467
486
|
file.write(settings.merge({"api_key" => api_key}).to_json)
|
468
487
|
end
|
488
|
+
write_tddium_to_gitignore
|
469
489
|
end
|
470
490
|
|
471
|
-
def write_suite(suite_id)
|
491
|
+
def write_suite(suite_id, options = {})
|
472
492
|
branches = tddium_settings["branches"] || {}
|
473
|
-
branches.merge!({current_git_branch => suite_id})
|
493
|
+
branches.merge!({current_git_branch => {"id" => suite_id, "options" => options}})
|
474
494
|
File.open(tddium_file_name, "w") do |file|
|
475
495
|
file.write(tddium_settings.merge({"branches" => branches}).to_json)
|
476
496
|
end
|
497
|
+
write_tddium_to_gitignore
|
498
|
+
end
|
499
|
+
|
500
|
+
def write_tddium_to_gitignore
|
501
|
+
content = File.read(Git::GITIGNORE)
|
502
|
+
unless content.include?("#{tddium_file_name}\n")
|
503
|
+
File.open(Git::GITIGNORE, "a") do |file|
|
504
|
+
file.write("#{tddium_file_name}\n")
|
505
|
+
end
|
506
|
+
end
|
477
507
|
end
|
478
508
|
end
|
data/lib/tddium/constant.rb
CHANGED
@@ -8,7 +8,6 @@ module TddiumConstant
|
|
8
8
|
VERSION_REGEXP = /([\d\.]+)/
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
11
|
module Default
|
13
12
|
SLEEP_TIME_BETWEEN_POLLS = 2
|
14
13
|
ENVIRONMENT = "production"
|
@@ -18,6 +17,7 @@ module TddiumConstant
|
|
18
17
|
|
19
18
|
module Git
|
20
19
|
REMOTE_NAME = "tddium"
|
20
|
+
GITIGNORE = ".gitignore"
|
21
21
|
end
|
22
22
|
|
23
23
|
module Api
|
@@ -30,6 +30,7 @@ module TddiumConstant
|
|
30
30
|
REGISTER_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/register"
|
31
31
|
START_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/start"
|
32
32
|
REPORT_TEST_EXECUTIONS = "#{TEST_EXECUTIONS}/report"
|
33
|
+
ACCOUNT_USAGE = "accounts/usage"
|
33
34
|
end
|
34
35
|
module ErrorCode
|
35
36
|
INVALID_INVITATION = 2
|
@@ -84,6 +85,8 @@ tddium spec
|
|
84
85
|
ALREADY_LOGGED_IN = "You're already logged in"
|
85
86
|
LOGGED_IN_SUCCESSFULLY = "Logged in successfully"
|
86
87
|
LOGGED_OUT_SUCCESSFULLY = "Logged out successfully"
|
88
|
+
USING_PREVIOUS_USER_DATA_FILE = "Using the previous user data file '%s'"
|
89
|
+
USING_PREVIOUS_MAX_PARALLELISM = "Using the previous value of max_parallelism = %s"
|
87
90
|
end
|
88
91
|
|
89
92
|
module Status
|
data/lib/tddium/version.rb
CHANGED
data/spec/tddium_spec.rb
CHANGED
@@ -16,6 +16,7 @@ describe Tddium do
|
|
16
16
|
SAMPLE_DATE_TIME = "2011-03-11T08:43:02Z"
|
17
17
|
SAMPLE_EMAIL = "someone@example.com"
|
18
18
|
SAMPLE_FILE_PATH = "./my_user_file.png"
|
19
|
+
SAMPLE_FILE_PATH2 = "./my_user_file2.png"
|
19
20
|
SAMPLE_INVITATION_TOKEN = "TZce3NueiXp2lMTmaeRr"
|
20
21
|
SAMPLE_GIT_REPO_URI = "ssh://git@api.tddium.com/home/git/repo/#{SAMPLE_APP_NAME}"
|
21
22
|
SAMPLE_LICENSE_TEXT = "LICENSE"
|
@@ -91,7 +92,7 @@ describe Tddium do
|
|
91
92
|
|
92
93
|
def stub_config_file(options = {})
|
93
94
|
params = {}
|
94
|
-
params.merge!(:branches => (options[:branches].is_a?(Hash)) ? options[:branches] : {SAMPLE_BRANCH_NAME => SAMPLE_SUITE_ID}) if options[:branches]
|
95
|
+
params.merge!(:branches => (options[:branches].is_a?(Hash)) ? options[:branches] : {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID}}) if options[:branches]
|
95
96
|
params.merge!(:api_key => (options[:api_key].is_a?(String)) ? options[:api_key] : SAMPLE_API_KEY) if options[:api_key]
|
96
97
|
json = params.to_json unless params.empty?
|
97
98
|
create_file(SAMPLE_TDDIUM_CONFIG_FILE, json)
|
@@ -106,6 +107,7 @@ describe Tddium do
|
|
106
107
|
stub_git_branch(tddium)
|
107
108
|
stub_tddium_client
|
108
109
|
create_file(File.join(".git", "something"), "something")
|
110
|
+
create_file(Tddium::Git::GITIGNORE, "something")
|
109
111
|
end
|
110
112
|
|
111
113
|
def stub_git_branch(tddium, default_branch_name = SAMPLE_BRANCH_NAME)
|
@@ -269,7 +271,7 @@ describe Tddium do
|
|
269
271
|
end
|
270
272
|
|
271
273
|
it "should remove all existing remotes called '#{Tddium::Git::REMOTE_NAME}'" do
|
272
|
-
tddium.should_receive(:`).with("git remote rm #{Tddium::Git::REMOTE_NAME}")
|
274
|
+
tddium.should_receive(:`).with("git remote rm #{Tddium::Git::REMOTE_NAME} > /dev/null 2>&1")
|
273
275
|
run(tddium)
|
274
276
|
end
|
275
277
|
|
@@ -297,7 +299,7 @@ describe Tddium do
|
|
297
299
|
end
|
298
300
|
|
299
301
|
it "should push the latest code to '#{Tddium::Git::REMOTE_NAME}'" do
|
300
|
-
tddium.should_receive(:system).with("git push #{Tddium::Git::REMOTE_NAME} #{SAMPLE_BRANCH_NAME}")
|
302
|
+
tddium.should_receive(:system).with("git push -f #{Tddium::Git::REMOTE_NAME} #{SAMPLE_BRANCH_NAME}")
|
301
303
|
run(tddium)
|
302
304
|
end
|
303
305
|
end
|
@@ -561,11 +563,22 @@ describe Tddium do
|
|
561
563
|
it_should_behave_like ".tddium file is missing or corrupt"
|
562
564
|
it_should_behave_like "suite has not been initialized"
|
563
565
|
|
564
|
-
context "
|
566
|
+
context "user-data-file" do
|
565
567
|
context "does not exist" do
|
566
|
-
|
567
|
-
|
568
|
-
|
568
|
+
context "from command line option" do
|
569
|
+
it "should be picked first" do
|
570
|
+
tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH)
|
571
|
+
run_spec(tddium, :user_data_file => SAMPLE_FILE_PATH)
|
572
|
+
end
|
573
|
+
end
|
574
|
+
|
575
|
+
context "from the previous option" do
|
576
|
+
before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID, "options" => {"user_data_file" => SAMPLE_FILE_PATH2}}}) }
|
577
|
+
|
578
|
+
it "should be picked if no command line option" do
|
579
|
+
tddium.should_receive(:say).with(Tddium::Text::Error::NO_USER_DATA_FILE % SAMPLE_FILE_PATH2)
|
580
|
+
run_spec(tddium)
|
581
|
+
end
|
569
582
|
end
|
570
583
|
|
571
584
|
it "should not try to git push" do
|
@@ -656,17 +669,28 @@ describe Tddium do
|
|
656
669
|
end
|
657
670
|
end
|
658
671
|
|
659
|
-
context "
|
660
|
-
|
661
|
-
|
662
|
-
|
672
|
+
context "max_parallelism" do
|
673
|
+
context "from command line option" do
|
674
|
+
it "should be picked first" do
|
675
|
+
call_api_should_receive(:method => :post, :path => /#{Tddium::Api::Path::START_TEST_EXECUTIONS}$/, :params => hash_including(:max_parallelism => 5))
|
676
|
+
run_spec(tddium, :max_parallelism => 5)
|
677
|
+
end
|
678
|
+
end
|
679
|
+
|
680
|
+
context "from the previous option" do
|
681
|
+
before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => SAMPLE_SUITE_ID, "options" => {"max_parallelism" => 10}}}) }
|
682
|
+
|
683
|
+
it "should be picked if no command line option" do
|
684
|
+
call_api_should_receive(:method => :post, :path => /#{Tddium::Api::Path::START_TEST_EXECUTIONS}$/, :params => hash_including(:max_parallelism => 10))
|
685
|
+
run_spec(tddium)
|
686
|
+
end
|
663
687
|
end
|
664
688
|
end
|
665
689
|
|
666
690
|
it_should_behave_like "sending the api key"
|
667
691
|
|
668
692
|
context "'POST #{Tddium::Api::Path::START_TEST_EXECUTIONS}' is successful" do
|
669
|
-
let(:get_test_executions_response) { {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"
|
693
|
+
let(:get_test_executions_response) { {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"pending"}, "spec/pig_spec.rb"=>{"finished" => false, "status"=>"started"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"failed"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}} }
|
670
694
|
before {stub_call_api_response(:post, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::START_TEST_EXECUTIONS}", {"started"=>1, "status"=>0, "report" => SAMPLE_REPORT_URL})}
|
671
695
|
|
672
696
|
it "should show the user: '#{Tddium::Text::Process::CHECK_TEST_REPORT % SAMPLE_REPORT_URL}'" do
|
@@ -730,7 +754,7 @@ describe Tddium do
|
|
730
754
|
|
731
755
|
context "'GET #{Tddium::Api::Path::TEST_EXECUTIONS}' is successful" do
|
732
756
|
before do
|
733
|
-
|
757
|
+
get_test_executions_response_all_finished = {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"pending"}, "spec/pig_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"failed"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"passed"}}}
|
734
758
|
stub_call_api_response(:get, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::TEST_EXECUTIONS}", get_test_executions_response, get_test_executions_response_all_finished)
|
735
759
|
stub_sleep(tddium)
|
736
760
|
end
|
@@ -765,6 +789,11 @@ describe Tddium do
|
|
765
789
|
run_spec(tddium)
|
766
790
|
end
|
767
791
|
|
792
|
+
it "should save the spec options" do
|
793
|
+
tddium.should_receive(:write_suite).with(SAMPLE_SUITE_ID, {"user_data_file" => nil, "max_parallelism" => 3})
|
794
|
+
run_spec(tddium, {:max_parallelism => 3})
|
795
|
+
end
|
796
|
+
|
768
797
|
it_should_behave_like("test output summary")
|
769
798
|
end
|
770
799
|
|
@@ -821,7 +850,7 @@ describe Tddium do
|
|
821
850
|
end
|
822
851
|
|
823
852
|
context "without current suite" do
|
824
|
-
before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => 0}) }
|
853
|
+
before { stub_config_file(:branches => {SAMPLE_BRANCH_NAME => {"id" => 0}}) }
|
825
854
|
it "should show the user '#{Tddium::Text::Status::CURRENT_SUITE_UNAVAILABLE}'" do
|
826
855
|
tddium.should_receive(:say).with(Tddium::Text::Status::CURRENT_SUITE_UNAVAILABLE)
|
827
856
|
run_status(tddium)
|
@@ -901,8 +930,23 @@ describe Tddium do
|
|
901
930
|
end
|
902
931
|
end
|
903
932
|
end
|
933
|
+
|
934
|
+
it "should send a 'GET' request to '#{Tddium::Api::Path::ACCOUNT_USAGE}'" do
|
935
|
+
call_api_should_receive(:method => :get, :path => Tddium::Api::Path::ACCOUNT_USAGE)
|
936
|
+
run_status(tddium)
|
937
|
+
end
|
938
|
+
|
939
|
+
context "'GET #{Tddium::Api::Path::SUITES}' is successful" do
|
940
|
+
before { stub_call_api_response(:get, Tddium::Api::Path::ACCOUNT_USAGE, {"usage" => "something"}) }
|
941
|
+
|
942
|
+
it "should display the account usage" do
|
943
|
+
tddium.should_receive(:say).with("something")
|
944
|
+
run_status(tddium)
|
945
|
+
end
|
946
|
+
end
|
904
947
|
end
|
905
948
|
end
|
949
|
+
|
906
950
|
it_should_behave_like "an unsuccessful api call"
|
907
951
|
end
|
908
952
|
|
@@ -979,7 +1023,14 @@ describe Tddium do
|
|
979
1023
|
it "should write the suite id and branch name to the .tddium file" do
|
980
1024
|
run_suite(tddium)
|
981
1025
|
tddium_file = File.open(SAMPLE_TDDIUM_CONFIG_FILE) { |file| file.read }
|
982
|
-
JSON.parse(tddium_file)["branches"][SAMPLE_BRANCH_NAME].should == SAMPLE_SUITE_ID
|
1026
|
+
JSON.parse(tddium_file)["branches"][SAMPLE_BRANCH_NAME]["id"].should == SAMPLE_SUITE_ID
|
1027
|
+
end
|
1028
|
+
|
1029
|
+
it "should update the gitignore file with tddium" do
|
1030
|
+
run_suite(tddium)
|
1031
|
+
gitignore_file = File.open(Tddium::Git::GITIGNORE) { |file| file.read }
|
1032
|
+
gitignore_file.should include(".tddium.test")
|
1033
|
+
gitignore_file.should include("something")
|
983
1034
|
end
|
984
1035
|
end
|
985
1036
|
|
data/tddium.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.name = "tddium-preview"
|
11
11
|
s.version = TddiumVersion::VERSION
|
12
12
|
s.platform = Gem::Platform::RUBY
|
13
|
-
s.authors = ["
|
13
|
+
s.authors = ["Solano Labs"]
|
14
14
|
s.email = ["info@tddium.com"]
|
15
15
|
s.homepage = "http://www.tddium.com/"
|
16
16
|
s.summary = %q{tddium Hosted Testing}
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_runtime_dependency("highline")
|
28
28
|
s.add_runtime_dependency("json")
|
29
29
|
s.add_runtime_dependency("tddium_client", ">=0.0.6")
|
30
|
+
s.add_runtime_dependency("bundler")
|
30
31
|
|
31
32
|
s.add_development_dependency("rspec")
|
32
33
|
s.add_development_dependency("fakefs")
|
metadata
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
name: tddium-preview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0
|
5
|
+
version: 0.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
-
|
8
|
+
- Solano Labs
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-15 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
type: :runtime
|
59
59
|
version_requirements: *id004
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
61
|
+
name: bundler
|
62
62
|
prerelease: false
|
63
63
|
requirement: &id005 !ruby/object:Gem::Requirement
|
64
64
|
none: false
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: "0"
|
69
|
-
type: :
|
69
|
+
type: :runtime
|
70
70
|
version_requirements: *id005
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: rspec
|
73
73
|
prerelease: false
|
74
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
75
|
none: false
|
@@ -80,7 +80,7 @@ dependencies:
|
|
80
80
|
type: :development
|
81
81
|
version_requirements: *id006
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
|
-
name:
|
83
|
+
name: fakefs
|
84
84
|
prerelease: false
|
85
85
|
requirement: &id007 !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
@@ -91,7 +91,7 @@ dependencies:
|
|
91
91
|
type: :development
|
92
92
|
version_requirements: *id007
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
94
|
+
name: simplecov
|
95
95
|
prerelease: false
|
96
96
|
requirement: &id008 !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
@@ -101,6 +101,17 @@ dependencies:
|
|
101
101
|
version: "0"
|
102
102
|
type: :development
|
103
103
|
version_requirements: *id008
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: rake
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: "0"
|
113
|
+
type: :development
|
114
|
+
version_requirements: *id009
|
104
115
|
description: tddium runs your rspec (and Selenium) tests in the cloud, in parallel!
|
105
116
|
email:
|
106
117
|
- info@tddium.com
|