tddium-preview 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|