rhc 1.6.8 → 1.7.8

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 (85) hide show
  1. data/autocomplete/rhc_bash +1167 -0
  2. data/features/README.md +1 -1
  3. data/features/domain.feature +1 -1
  4. data/features/lib/rhc_helper/persistable.rb +4 -1
  5. data/features/multiple_cartridge.feature +4 -3
  6. data/features/sshkey.feature +3 -3
  7. data/features/support/assumptions.rb +3 -3
  8. data/features/support/env.rb +10 -0
  9. data/features/support/platform_support.rb +2 -2
  10. data/lib/rhc.rb +6 -0
  11. data/lib/rhc/auth/token.rb +4 -0
  12. data/lib/rhc/autocomplete.rb +50 -52
  13. data/lib/rhc/autocomplete_templates/{rhc.erb → bash.erb} +8 -2
  14. data/lib/rhc/cartridge_helpers.rb +1 -1
  15. data/lib/rhc/cli.rb +1 -7
  16. data/lib/rhc/command_runner.rb +45 -16
  17. data/lib/rhc/commands.rb +75 -55
  18. data/lib/rhc/commands/account.rb +7 -51
  19. data/lib/rhc/commands/alias.rb +26 -17
  20. data/lib/rhc/commands/app.rb +75 -39
  21. data/lib/rhc/commands/authorization.rb +4 -2
  22. data/lib/rhc/commands/base.rb +31 -29
  23. data/lib/rhc/commands/cartridge.rb +66 -44
  24. data/lib/rhc/commands/domain.rb +20 -8
  25. data/lib/rhc/commands/git_clone.rb +3 -3
  26. data/lib/rhc/commands/logout.rb +51 -0
  27. data/lib/rhc/commands/port_forward.rb +15 -11
  28. data/lib/rhc/commands/setup.rb +25 -0
  29. data/lib/rhc/commands/snapshot.rb +20 -10
  30. data/lib/rhc/commands/sshkey.rb +21 -7
  31. data/lib/rhc/commands/tail.rb +2 -2
  32. data/lib/rhc/commands/threaddump.rb +2 -2
  33. data/lib/rhc/context_helper.rb +0 -4
  34. data/lib/rhc/core_ext.rb +96 -76
  35. data/lib/rhc/exceptions.rb +6 -0
  36. data/lib/rhc/help_formatter.rb +19 -2
  37. data/lib/rhc/helpers.rb +32 -194
  38. data/lib/rhc/highline_extensions.rb +412 -0
  39. data/lib/rhc/output_helpers.rb +31 -67
  40. data/lib/rhc/rest.rb +4 -2
  41. data/lib/rhc/rest/alias.rb +0 -2
  42. data/lib/rhc/rest/application.rb +9 -4
  43. data/lib/rhc/rest/authorization.rb +0 -2
  44. data/lib/rhc/rest/base.rb +1 -1
  45. data/lib/rhc/rest/client.rb +11 -9
  46. data/lib/rhc/rest/domain.rb +5 -1
  47. data/lib/rhc/rest/gear_group.rb +0 -2
  48. data/lib/rhc/rest/key.rb +0 -2
  49. data/lib/rhc/rest/mock.rb +32 -10
  50. data/lib/rhc/ssh_helpers.rb +2 -2
  51. data/lib/rhc/usage_templates/command_help.erb +20 -13
  52. data/lib/rhc/usage_templates/command_syntax_help.erb +1 -3
  53. data/lib/rhc/usage_templates/help.erb +15 -16
  54. data/lib/rhc/usage_templates/options_help.erb +7 -9
  55. data/lib/rhc/wizard.rb +193 -159
  56. data/spec/rest_spec_helper.rb +2 -2
  57. data/spec/rhc/cli_spec.rb +36 -5
  58. data/spec/rhc/command_spec.rb +94 -42
  59. data/spec/rhc/commands/account_spec.rb +1 -75
  60. data/spec/rhc/commands/alias_spec.rb +28 -28
  61. data/spec/rhc/commands/app_spec.rb +141 -33
  62. data/spec/rhc/commands/apps_spec.rb +4 -4
  63. data/spec/rhc/commands/authorization_spec.rb +8 -8
  64. data/spec/rhc/commands/cartridge_spec.rb +18 -9
  65. data/spec/rhc/commands/domain_spec.rb +16 -16
  66. data/spec/rhc/commands/git_clone_spec.rb +3 -3
  67. data/spec/rhc/commands/logout_spec.rb +86 -0
  68. data/spec/rhc/commands/port_forward_spec.rb +9 -9
  69. data/spec/rhc/commands/server_spec.rb +5 -5
  70. data/spec/rhc/commands/setup_spec.rb +19 -5
  71. data/spec/rhc/commands/snapshot_spec.rb +12 -12
  72. data/spec/rhc/commands/sshkey_spec.rb +11 -11
  73. data/spec/rhc/commands/tail_spec.rb +5 -5
  74. data/spec/rhc/commands/threaddump_spec.rb +3 -3
  75. data/spec/rhc/config_spec.rb +6 -6
  76. data/spec/rhc/helpers_spec.rb +72 -219
  77. data/spec/rhc/highline_extensions_spec.rb +269 -0
  78. data/spec/rhc/rest_application_spec.rb +28 -1
  79. data/spec/rhc/rest_client_spec.rb +20 -21
  80. data/spec/rhc/rest_spec.rb +10 -0
  81. data/spec/rhc/wizard_spec.rb +72 -32
  82. data/spec/spec_helper.rb +86 -56
  83. data/spec/wizard_spec_helper.rb +7 -4
  84. metadata +165 -160
  85. data/spec/spec.opts +0 -1
@@ -13,7 +13,7 @@ describe RHC::Commands::Sshkey do
13
13
  context "when run with list command" do
14
14
  let(:arguments) { %w[sshkey list --noprompt --config test.conf -l test@test.foo -p password --trace] }
15
15
 
16
- it { expect { run }.should exit_with_code(0) }
16
+ it { expect { run }.to exit_with_code(0) }
17
17
  it { run_output.should match(/mockkey1 \(type: ssh-rsa\)/) }
18
18
  end
19
19
  end
@@ -22,7 +22,7 @@ describe RHC::Commands::Sshkey do
22
22
  context "when run with show command" do
23
23
  let(:arguments) { %w[sshkey show mockkey1 --noprompt --config test.conf -l test@test.foo -p password --trace] }
24
24
 
25
- it { expect { run }.should exit_with_code(0) }
25
+ it { expect { run }.to exit_with_code(0) }
26
26
  it { run_output.should match(/mockkey1 \(type: ssh-rsa\)/) }
27
27
  end
28
28
  end
@@ -38,7 +38,7 @@ describe RHC::Commands::Sshkey do
38
38
  File.open('id_rsa.pub', 'w') do |f|
39
39
  f << 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnCOqK7/mmvZ9AtCAerxjAasJ1rSpfuWT4vNm1+O/Fh0Di3chTWjY9a0M2hEnqkqnVG589L9CqCUeT0kdc3Vgw3JEcacSUr1z7tLr9kO+p/D5lSdQYzDGGRFOZ0H6lc/y8iNxWV1VO/sJvKx6cr5zvKIn8Q6GvhVNOxlai0IOb9FJxLGK95GLpZ+elzh8Tc9giy7KfwheAwhV2JoF9uRltE5JP/CNs7w/E29i1Z+jlueuu8RVotLmhSVNJm91Ey7OCtoI1iBE0Wv/SucFe32Qi08RWTM/MaGGz93KQNOVRGjNkosJjPmP1qU6WGBfliDkJAZXB0b6sEcnx1fbVikwZ'
40
40
  end
41
- expect { run }.should exit_with_code(0)
41
+ expect { run }.to exit_with_code(0)
42
42
  rest_client.sshkeys.length.should == num_keys + 1
43
43
  end
44
44
  end
@@ -54,7 +54,7 @@ describe RHC::Commands::Sshkey do
54
54
  File.open('id_rsa.pub', 'w') do |f|
55
55
  f << 'ssh-rsa AADAQABAAABAQCnCOqK7/mmvZ9AtCAerxjAasJ1rSpfuWT4vNm1+O/Fh0Di3chTWjY9a0M2hEnqkqnVG589L9CqCUeT0kdc3Vgw3JEcacSUr1z7tLr9kO+p/D5lSdQYzDGGRFOZ0H6lc/y8iNxWV1VO/sJvKx6cr5zvKIn8Q6GvhVNOxlai0IOb9FJxLGK95GLpZ+elzh8Tc9giy7KfwheAwhV2JoF9uRltE5JP/CNs7w/E29i1Z+jlueuu8RVotLmhSVNJm91Ey7OCtoI1iBE0Wv/SucFe32Qi08RWTM/MaGGz93KQNOVRGjNkosJjPmP1qU6WGBfliDkJAZXB0b6sEcnx1fbVikwZ'
56
56
  end
57
- expect { run }.should exit_with_code(128)
57
+ expect { run }.to exit_with_code(128)
58
58
  expect { run_output.should match(/Name:.* mockkey/) }
59
59
  rest_client.sshkeys.length.should == num_keys
60
60
  end
@@ -67,7 +67,7 @@ describe RHC::Commands::Sshkey do
67
67
  File.open('id_rsa.pub', 'w') do |f|
68
68
  f << ''
69
69
  end
70
- expect { run }.should exit_with_code(128)
70
+ expect { run }.to exit_with_code(128)
71
71
  expect { run_output.should match(/Name:.* mockkey/) }
72
72
  rest_client.sshkeys.length.should == num_keys
73
73
  end
@@ -75,7 +75,7 @@ describe RHC::Commands::Sshkey do
75
75
 
76
76
  it "exits with status code Errno::EACCES::Errno" do
77
77
  IO.should_receive(:read).and_return("ssh_foo bar")
78
- expect { run }.should exit_with_code(128)
78
+ expect { run }.to exit_with_code(128)
79
79
  end
80
80
  end
81
81
 
@@ -89,7 +89,7 @@ describe RHC::Commands::Sshkey do
89
89
  File.open('id_rsa.pub', 'w') do |f|
90
90
  f << 'ssh-rsa AADAQABAAABAQCnCOqK7/mmvZ9AtCAerxjAasJ1rSpfuWT4vNm1+O/Fh0Di3chTWjY9a0M2hEnqkqnVG589L9CqCUeT0kdc3Vgw3JEcacSUr1z7tLr9kO+p/D5lSdQYzDGGRFOZ0H6lc/y8iNxWV1VO/sJvKx6cr5zvKIn8Q6GvhVNOxlai0IOb9FJxLGK95GLpZ+elzh8Tc9giy7KfwheAwhV2JoF9uRltE5JP/CNs7w/E29i1Z+jlueuu8RVotLmhSVNJm91Ey7OCtoI1iBE0Wv/SucFe32Qi08RWTM/MaGGz93KQNOVRGjNkosJjPmP1qU6WGBfliDkJAZXB0b6sEcnx1fbVikwZ'
91
91
  end
92
- expect { run }.should exit_with_code(0)
92
+ expect { run }.to exit_with_code(0)
93
93
  expect { run_output.should match("key you are uploading is not recognized") }
94
94
  rest_client.sshkeys.length.should == num_keys + 1
95
95
  end
@@ -100,7 +100,7 @@ describe RHC::Commands::Sshkey do
100
100
  let(:arguments) { %w[sshkey add --noprompt --config test.conf -l test@test.foo -p password foobar id_rsa.pub] }
101
101
 
102
102
  it "exits with status code Errno::ENOENT::Errno" do
103
- expect { run }.should exit_with_code(128)
103
+ expect { run }.to exit_with_code(128)
104
104
  end
105
105
  end
106
106
 
@@ -119,7 +119,7 @@ describe RHC::Commands::Sshkey do
119
119
 
120
120
  it "exits with status code Errno::EACCES::Errno" do
121
121
  IO.should_receive(:read).and_raise(Errno::EACCES)
122
- expect { run }.should exit_with_code(128)
122
+ expect { run }.to exit_with_code(128)
123
123
  end
124
124
 
125
125
  end
@@ -132,7 +132,7 @@ describe RHC::Commands::Sshkey do
132
132
  it 'deletes the key' do
133
133
  keys = rest_client.sshkeys
134
134
  num_keys = keys.length
135
- expect {run}.should exit_with_code(0)
135
+ expect{ run }.to exit_with_code(0)
136
136
  rest_client.sshkeys.length.should == num_keys - 1
137
137
  end
138
138
  end
@@ -143,7 +143,7 @@ describe RHC::Commands::Sshkey do
143
143
 
144
144
  it 'leaves keys untouched' do
145
145
  num_keys = @keys.length
146
- expect {run}.should exit_with_code(0)
146
+ expect{ run }.to exit_with_code(0)
147
147
  rest_client.sshkeys.length.should == num_keys
148
148
  end
149
149
  end
@@ -17,7 +17,7 @@ describe RHC::Commands::Tail do
17
17
 
18
18
  context 'help is run' do
19
19
  it "should display help" do
20
- expect { run }.should exit_with_code(0)
20
+ expect { run }.to exit_with_code(0)
21
21
  end
22
22
  it('should output usage') { run_output.should match("Usage: rhc tail") }
23
23
  end
@@ -28,24 +28,24 @@ describe RHC::Commands::Tail do
28
28
 
29
29
  context 'when ssh connects' do
30
30
  before (:each) {Net::SSH.should_receive(:start).with('test.domain.com', 'user') }
31
- it { expect { run }.should exit_with_code(0) }
31
+ it { expect { run }.to exit_with_code(0) }
32
32
  end
33
33
 
34
34
  context 'is run on an unreachable domain' do
35
35
  before (:each) {Net::SSH.should_receive(:start).and_raise(SocketError) }
36
- it { expect { run }.should exit_with_code(1) }
36
+ it { expect { run }.to exit_with_code(1) }
37
37
  it { run_output.should =~ /The connection to test.domain.com failed: / }
38
38
  end
39
39
 
40
40
  context 'is refused' do
41
41
  before (:each) {Net::SSH.should_receive(:start).and_raise(Errno::ECONNREFUSED) }
42
- it { expect { run }.should exit_with_code(1) }
42
+ it { expect { run }.to exit_with_code(1) }
43
43
  it { run_output.should =~ /The server test.domain.com refused a connection with user user/ }
44
44
  end
45
45
 
46
46
  context 'succeeds and exits on Interrupt' do
47
47
  before (:each) { rest_client.stub(:find_domain) { raise Interrupt } }
48
- it { expect { run }.should raise_error(Interrupt) }
48
+ it { expect { run }.to raise_error(Interrupt) }
49
49
  end
50
50
  end
51
51
  end
@@ -63,7 +63,7 @@ describe RHC::Commands::Threaddump do
63
63
 
64
64
  context 'help is run' do
65
65
  it "should display help" do
66
- expect { run }.should exit_with_code(0)
66
+ expect { run }.to exit_with_code(0)
67
67
  end
68
68
  it('should output usage') { run_output.should match("Usage: rhc threaddump") }
69
69
  end
@@ -71,14 +71,14 @@ describe RHC::Commands::Threaddump do
71
71
 
72
72
  describe 'threaddump' do
73
73
  let(:arguments) { ['threaddump', 'mock_app_0'] }
74
- it { expect { run }.should exit_with_code(0) }
74
+ it { expect { run }.to exit_with_code(0) }
75
75
  it { run_output.should =~ /Application test thread dump complete/ }
76
76
  end
77
77
 
78
78
  describe 'threaddump no args' do
79
79
  let(:arguments) { ['threaddump'] }
80
80
  context 'args not supplied' do
81
- it { expect { run }.should exit_with_code(1) }
81
+ it { expect { run }.to exit_with_code(1) }
82
82
  end
83
83
  end
84
84
  end
@@ -4,7 +4,7 @@ require 'net/http'
4
4
 
5
5
  describe RHC::Config do
6
6
  subject{ RHC::Config }
7
- before(:all) do
7
+ before do
8
8
  ENV['LIBRA_SERVER'] = nil
9
9
  ENV['HTTP_PROXY'] = nil
10
10
  ENV['http_proxy'] = nil
@@ -14,10 +14,12 @@ describe RHC::Config do
14
14
  FakeFS::FileSystem.clear
15
15
  end
16
16
 
17
- after(:all) do
17
+ after do
18
18
  FakeFS.deactivate!
19
19
  ENV['HTTP_PROXY'] = nil
20
20
  ENV['http_proxy'] = nil
21
+ ENV['LIBRA_SERVER'] = nil
22
+ RHC::Config.send(:instance_variable_set, :@default, nil)
21
23
  end
22
24
 
23
25
  describe "class" do
@@ -86,6 +88,7 @@ describe RHC::Config do
86
88
  end
87
89
 
88
90
  context "Config values with /etc/openshift/express.conf" do
91
+
89
92
  it "should have only a global config" do
90
93
  ConfigHelper.write_out_config(ConfigHelper.global_config_path, "global.openshift.redhat.com", "global@redhat.com")
91
94
  subject.initialize
@@ -260,11 +263,8 @@ describe RHC::Config do
260
263
  end
261
264
 
262
265
  context "Debug options" do
263
- after(:all) do
264
- FakeFS::FileSystem.clear
265
- end
266
-
267
266
  it "should show debug as false because nothing is set" do
267
+ subject.initialize
268
268
  ConfigHelper.check_legacy_debug({}).should be_false
269
269
  end
270
270
 
@@ -1,35 +1,34 @@
1
1
  require 'spec_helper'
2
- require 'rhc/helpers'
2
+ require 'rhc'
3
3
  require 'rhc/ssh_helpers'
4
4
  require 'rhc/cartridge_helpers'
5
5
  require 'rhc/git_helpers'
6
6
  require 'rhc/core_ext'
7
- require 'highline/import'
8
7
  require 'rhc/config'
9
- require 'rhc/helpers'
10
8
  require 'date'
11
9
  require 'resolv'
10
+ require 'ostruct'
11
+
12
+ class MockHelpers
13
+ include RHC::Helpers
14
+ include RHC::SSHHelpers
15
+ include RHC::CartridgeHelpers
16
+
17
+ def config
18
+ @config ||= RHC::Config.new
19
+ end
20
+ def options
21
+ @options ||= OpenStruct.new(:server => nil)
22
+ end
23
+ end
12
24
 
13
25
  describe RHC::Helpers do
14
- before(:each) do
26
+ before do
15
27
  mock_terminal
16
28
  user_config
17
29
  end
18
30
 
19
- subject do
20
- Class.new(Object) do
21
- include RHC::Helpers
22
- include RHC::SSHHelpers
23
-
24
- def config
25
- @config ||= RHC::Config.new
26
- end
27
- def options
28
- @options ||= OpenStruct.new(:server => nil)
29
- end
30
- end.new
31
- end
32
- let(:tests) { OutputTests.new }
31
+ subject{ MockHelpers.new }
33
32
 
34
33
  its(:openshift_server) { should == 'openshift.redhat.com' }
35
34
  its(:openshift_url) { should == 'https://openshift.redhat.com' }
@@ -47,7 +46,7 @@ describe RHC::Helpers do
47
46
 
48
47
  shared_examples_for "colorized output" do
49
48
  it("should be colorized") do
50
- message = "this is #{_color}"
49
+ message = "this is #{_color} -"
51
50
  output = capture{ subject.send(method,message) }
52
51
  output.should be_colorized(message,_color)
53
52
  end
@@ -77,7 +76,7 @@ describe RHC::Helpers do
77
76
  it("should draw a table") do
78
77
  subject.table([[10,2], [3,40]]) do |i|
79
78
  i.map(&:to_s)
80
- end.should == ['10 2','3 40']
79
+ end.to_a.should == ['10 2','3 40']
81
80
  end
82
81
 
83
82
  context "error output" do
@@ -87,7 +86,7 @@ describe RHC::Helpers do
87
86
  end
88
87
 
89
88
  it("should output a table") do
90
- subject.send(:display_no_info, 'test').should == ['This test has no information to show']
89
+ subject.send(:format_no_info, 'test').to_a.should == ['This test has no information to show']
91
90
  end
92
91
 
93
92
  it "should parse an RFC3339 date" do
@@ -163,7 +162,7 @@ describe RHC::Helpers do
163
162
  Class.new(Object){ include RHC::Helpers }.new
164
163
  end
165
164
 
166
- it("should raise on config"){ expect{ subject.config }.should raise_error }
165
+ it("should raise on config"){ expect{ subject.config }.to raise_error }
167
166
  end
168
167
 
169
168
  context "with a bad timeout value" do
@@ -238,71 +237,11 @@ describe RHC::Helpers do
238
237
  it{ run_output.should match("The certificate 'not_a_file' cannot be loaded: No such file or directory ") }
239
238
  end
240
239
 
241
- describe "#get_properties" do
242
- it{ tests.send(:get_properties, stub(:plan_id => 'free'), :plan_id).should == [[:plan_id, 'Free']] }
240
+ context "#get_properties" do
241
+ it{ subject.send(:get_properties, stub(:plan_id => 'free'), :plan_id).should == [[:plan_id, 'Free']] }
243
242
  context "when an error is raised" do
244
- subject{ stub.tap{ |s| s.should_receive(:foo).and_raise(::Exception) } }
245
- it{ tests.send(:get_properties, subject, :foo).should == [[:foo, '<error>']] }
246
- end
247
- end
248
-
249
- context "Formatter" do
250
- before{ tests.reset }
251
-
252
- it "should print out a paragraph with open endline on the same line" do
253
- tests.section_same_line
254
- $terminal.read.should == "section 1 word\n"
255
- end
256
-
257
- it "should print out a section without any line breaks" do
258
- tests.section_no_breaks
259
- $terminal.read.should == "section 1 \n"
260
- end
261
-
262
- it "should print out a section with trailing line break" do
263
- tests.section_one_break
264
- $terminal.read.should == "section 1\n"
265
- end
266
-
267
- it "should print out 2 sections with matching bottom and top margins generating one space between" do
268
- tests.sections_equal_bottom_top
269
- $terminal.read.should == "section 1\n\nsection 2\n"
270
- end
271
-
272
- it "should print out 2 sections with larger bottom margin generating two spaces between" do
273
- tests.sections_larger_bottom
274
- $terminal.read.should == "section 1\n\n\nsection 2\n"
275
- end
276
-
277
- it "should print out 2 sections with larger top margin generating two spaces between" do
278
- tests.sections_larger_top
279
- $terminal.read.should == "section 1\n\n\nsection 2\n"
280
- end
281
-
282
- it "should print out 4 sections and not collapse open sections" do
283
- tests.sections_four_on_three_lines
284
- $terminal.read.should == "section 1\n\nsection 2 \nsection 3\n\nsection 4\n"
285
- end
286
-
287
- it "should show the equivilance of paragaph to section(:top => 1, :bottom => 1)" do
288
- tests.section_1_1
289
- section_1_1 = $terminal.read
290
- tests.reset
291
- tests.section_paragraph
292
- paragraph = $terminal.read
293
-
294
- section_1_1.should == paragraph
295
-
296
- tests.reset
297
- tests.section_1_1
298
- tests.section_paragraph
299
-
300
- $terminal.read.should == "section\n\nsection\n"
301
- end
302
-
303
- it "should not collapse explicit newline sections" do
304
- tests.outside_newline
305
- $terminal.read.should == "section 1\n\n\nsection 2\n"
243
+ let(:bar){ stub.tap{ |s| s.should_receive(:foo).and_raise(::Exception) } }
244
+ it{ subject.send(:get_properties, bar, :foo).should == [[:foo, '<error>']] }
306
245
  end
307
246
  end
308
247
 
@@ -331,7 +270,7 @@ describe RHC::Helpers do
331
270
  let(:stderr){ 'fatal: error' }
332
271
  let(:exit_status){ 1 }
333
272
 
334
- it { capture{ expect{ subject.git_clone_repo("url", "repo") }.should raise_error(RHC::GitException) } }
273
+ it { capture{ expect{ subject.git_clone_repo("url", "repo") }.to raise_error(RHC::GitException) } }
335
274
  it { capture_all{ subject.git_clone_repo("url", "repo") rescue nil }.should match("fake git clone") }
336
275
  it { capture_all{ subject.git_clone_repo("url", "repo") rescue nil }.should match("fatal: error") }
337
276
  end
@@ -340,14 +279,14 @@ describe RHC::Helpers do
340
279
  let(:stderr){ "fatal: destination path 'foo' already exists and is not an empty directory." }
341
280
  let(:exit_status){ 1 }
342
281
 
343
- it { capture{ expect{ subject.git_clone_repo("url", "repo") }.should raise_error(RHC::GitDirectoryExists) } }
282
+ it { capture{ expect{ subject.git_clone_repo("url", "repo") }.to raise_error(RHC::GitDirectoryExists) } }
344
283
  end
345
284
 
346
285
  context "permission denied" do
347
286
  let(:stderr){ "Permission denied (publickey,gssapi-mic)." }
348
287
  let(:exit_status){ 1 }
349
288
 
350
- it { capture{ expect{ subject.git_clone_repo("url", "repo") }.should raise_error(RHC::GitPermissionDenied) } }
289
+ it { capture{ expect{ subject.git_clone_repo("url", "repo") }.to raise_error(RHC::GitPermissionDenied) } }
351
290
  end
352
291
  end
353
292
  end
@@ -373,6 +312,48 @@ describe RHC::Helpers do
373
312
  end
374
313
  end
375
314
 
315
+ describe "#wrap" do
316
+ it{ "abc".wrap(1).should == "a\nb\nc" }
317
+ end
318
+
319
+ describe "#textwrap_ansi" do
320
+ it{ "".textwrap_ansi(80).should == [] }
321
+ it{ "\n".textwrap_ansi(80).should == ["",""] }
322
+ it{ "a".textwrap_ansi(1).should == ['a'] }
323
+ it{ "ab".textwrap_ansi(1).should == ['a','b'] }
324
+ it{ "ab".textwrap_ansi(2).should == ['ab'] }
325
+ it{ "ab cd".textwrap_ansi(4).should == ['ab', 'cd'] }
326
+ it{ " ab".textwrap_ansi(2).should == [' a','b'] }
327
+ it{ "a b".textwrap_ansi(1).should == ['a','b'] }
328
+ it{ "a w b".textwrap_ansi(2).should == ['a','w','b'] }
329
+ it{ "a w b".textwrap_ansi(3).should == ['a w','b'] }
330
+ it{ "a\nb".textwrap_ansi(1).should == ['a','b'] }
331
+ it{ "\e[1m".textwrap_ansi(1).should == ["\e[1m\e[0m"] }
332
+ it{ "\e[31;1m".textwrap_ansi(1).should == ["\e[31;1m\e[0m"] }
333
+ it{ "\e[1ma".textwrap_ansi(1).should == ["\e[1ma\e[0m"] }
334
+ it{ "a\e[12m".textwrap_ansi(1).should == ["a\e[12m\e[0m"] }
335
+ it{ "a\e[12m\e[34mb".textwrap_ansi(1).should == ["a\e[12m\e[34m\e[0m","\e[12m\e[34mb\e[0m"] }
336
+ it{ "\e[12;34ma".textwrap_ansi(1).should == ["\e[12;34ma\e[0m"] }
337
+ it{ "\e[1m\e[1m".textwrap_ansi(1).should == ["\e[1m\e[1m\e[0m"] }
338
+ it{ "\e[1m \e[1m".textwrap_ansi(1).should == ["\e[1m\e[0m", "\e[1m\e[1m\e[0m"] }
339
+ it{ "\e[1ma\nb".textwrap_ansi(80).should == ["\e[1ma","b"] }
340
+
341
+ it{ "ab".textwrap_ansi(1,false).should == ['ab'] }
342
+ it{ " abc".textwrap_ansi(3,false).should == [' abc'] }
343
+ it{ "abcd".textwrap_ansi(3,false).should == ['abcd'] }
344
+ it{ "abcd\e[1m".textwrap_ansi(3,false).should == ["abcd\e[1m\e[0m"] }
345
+ it{ "abcd efg a".textwrap_ansi(3,false).should == ['abcd', 'efg', 'a'] }
346
+ it('next line'){ "abcd e a".textwrap_ansi(5,false).should == ['abcd', 'e a'] }
347
+ it{ "abcd efgh a".textwrap_ansi(3,false).should == ['abcd', 'efgh', 'a'] }
348
+ it{ " abcd efg a".textwrap_ansi(3,false).should == [' abcd', 'efg', 'a'] }
349
+ end
350
+
351
+ describe "#strip_ansi" do
352
+ it{ "\e[1m \e[1m".strip_ansi.should == " " }
353
+ it{ "\eiei0".strip_ansi.should == "\eiei0" }
354
+ it{ "\e[iei0]".strip_ansi.should == "\e[iei0]" }
355
+ end
356
+
376
357
  context "Resolv helper" do
377
358
  let(:resolver) { Object.new }
378
359
  let(:existent_host) { 'real_host' }
@@ -400,86 +381,6 @@ describe RHC::Helpers do
400
381
  end
401
382
  end
402
383
  end
403
-
404
- class OutputTests
405
- include RHC::Helpers
406
- include RHC::SSHHelpers
407
- include RHC::OutputHelpers
408
-
409
- def initialize
410
- @print_num = 0
411
- @options = Commander::Command::Options.new
412
- end
413
-
414
- def config
415
- @config ||= RHC::Config
416
- end
417
-
418
- def next_print_num
419
- @print_num += 1
420
- end
421
-
422
- def output
423
- say "section #{next_print_num}"
424
- end
425
-
426
- def output_no_breaks
427
- say "section #{next_print_num} "
428
- end
429
-
430
- def section_same_line
431
- section { output_no_breaks; say 'word' }
432
- end
433
-
434
- def section_no_breaks
435
- section { output_no_breaks }
436
- end
437
-
438
- def section_one_break
439
- section { output }
440
- end
441
-
442
- def sections_equal_bottom_top
443
- section(:bottom => 1) { output }
444
- section(:top => 1) { output }
445
- end
446
-
447
- def sections_larger_bottom
448
- section(:bottom => 2) { output }
449
- section(:top => 1) { output }
450
- end
451
-
452
- def sections_larger_top
453
- section(:bottom => 1) { output }
454
- section(:top => 2) { output }
455
- end
456
-
457
- def sections_four_on_three_lines
458
- section { output }
459
- section(:top => 1) { output_no_breaks }
460
- section(:bottom => 1) { output }
461
- section(:top => 1) { output }
462
- end
463
-
464
- def outside_newline
465
- section(:bottom => -1) { output }
466
- say "\n"
467
- section(:top => 1) { output }
468
- end
469
-
470
- def section_1_1
471
- section(:top => 1, :bottom => 1) { say "section" }
472
- end
473
-
474
- def section_paragraph
475
- paragraph { say "section" }
476
- end
477
-
478
- # call section without output to reset spacing to 0
479
- def reset
480
- RHC::Helpers.send(:class_variable_set, :@@margin, nil)
481
- end
482
- end
483
384
  end
484
385
 
485
386
  describe RHC::Helpers::StringTee do
@@ -525,66 +426,18 @@ describe OpenURI do
525
426
  end
526
427
  end
527
428
 
528
- describe HighLine do
529
- it "should wrap the terminal" do
530
- $terminal.wrap_at = 10
531
- say "Lorem ipsum dolor sit amet"
532
- output = $terminal.read
533
- output.should match "Lorem\nipsum\ndolor sit\namet"
534
- end
535
- it "should wrap the terminal" do
536
- $terminal.wrap_at = 16
537
- say "Lorem ipsum dolor sit amet"
538
- output = $terminal.read
539
- output.should match "Lorem ipsum\ndolor sit amet"
540
- end
541
- it "should not wrap the terminal" do
542
- $terminal.wrap_at = 50
543
- say "Lorem ipsum dolor sit amet"
544
- output = $terminal.read
545
- output.should match "Lorem ipsum dolor sit amet"
546
- end
547
- it "should wrap the terminal when using color codes" do
548
- $terminal.wrap_at = 10
549
- say $terminal.color("Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet", :red)
550
- output = $terminal.read
551
- output.should match "Lorem\nipsum\ndolor sit\namet Lorem\nipsum\ndolor sit\namet"
552
- end
553
- it "should wrap the terminal with other escape characters" do
554
- $terminal.wrap_at = 10
555
- say "Lorem ipsum dolor sit am\eet"
556
- output = $terminal.read
557
- output.should match "Lorem\nipsum\ndolor sit\nam\eet"
558
- end
559
- it "should wrap the terminal when words are smaller than wrap length" do
560
- $terminal.wrap_at = 3
561
- say "Antidisestablishmentarianism"
562
- output = $terminal.read
563
- output.should match "Ant\nidi\nses\ntab\nlis\nhme\nnta\nria\nnis\nm"
564
- end
565
- end
566
-
567
429
  describe RHC::CartridgeHelpers do
568
430
  before(:each) do
569
431
  mock_terminal
570
432
  end
571
433
 
572
- subject do
573
- Class.new(Object) do
574
- include RHC::Helpers
575
- include RHC::CartridgeHelpers
576
-
577
- def config
578
- @config ||= RHC::Config.new
579
- end
580
- end.new
581
- end
434
+ subject{ MockHelpers.new }
582
435
 
583
436
  describe '#check_cartridges' do
584
437
  let(:cartridges){ [] }
585
438
  let(:find_cartridges){ [] }
586
439
  context "with a generic object" do
587
- it { expect{ subject.send(:check_cartridges, 'foo', :from => cartridges) }.should raise_error(RHC::CartridgeNotFoundException, 'There are no cartridges that match \'foo\'.') }
440
+ it { expect{ subject.send(:check_cartridges, 'foo', :from => cartridges) }.to raise_error(RHC::CartridgeNotFoundException, 'There are no cartridges that match \'foo\'.') }
588
441
  end
589
442
  end
590
443
  describe '#web_carts_only' do