rhc 1.6.8 → 1.7.8

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