appraisal 2.5.0 → 3.0.0.rc1

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/dynamic-security.yml +19 -0
  3. data/.github/workflows/main.yml +55 -0
  4. data/.gitignore +1 -0
  5. data/Gemfile +5 -0
  6. data/README.md +14 -5
  7. data/Rakefile +8 -6
  8. data/SECURITY.md +20 -0
  9. data/appraisal.gemspec +14 -17
  10. data/bin/bundle +109 -0
  11. data/bin/rspec +27 -0
  12. data/{bin → exe}/appraisal +6 -4
  13. data/lib/appraisal/appraisal.rb +20 -17
  14. data/lib/appraisal/appraisal_file.rb +8 -6
  15. data/lib/appraisal/bundler_dsl.rb +17 -13
  16. data/lib/appraisal/cli.rb +49 -43
  17. data/lib/appraisal/command.rb +3 -1
  18. data/lib/appraisal/conditional.rb +4 -0
  19. data/lib/appraisal/customize.rb +22 -2
  20. data/lib/appraisal/dependency.rb +4 -2
  21. data/lib/appraisal/dependency_list.rb +4 -2
  22. data/lib/appraisal/errors.rb +2 -0
  23. data/lib/appraisal/gemfile.rb +2 -0
  24. data/lib/appraisal/gemspec.rb +5 -3
  25. data/lib/appraisal/git.rb +3 -1
  26. data/lib/appraisal/group.rb +7 -5
  27. data/lib/appraisal/path.rb +3 -1
  28. data/lib/appraisal/platform.rb +7 -5
  29. data/lib/appraisal/source.rb +7 -5
  30. data/lib/appraisal/task.rb +8 -6
  31. data/lib/appraisal/utils.rb +6 -7
  32. data/lib/appraisal/version.rb +3 -1
  33. data/lib/appraisal.rb +4 -2
  34. data/spec/acceptance/appraisals_file_bundler_dsl_compatibility_spec.rb +55 -24
  35. data/spec/acceptance/bundle_with_custom_path_spec.rb +26 -20
  36. data/spec/acceptance/bundle_without_spec.rb +10 -10
  37. data/spec/acceptance/cli/clean_spec.rb +13 -11
  38. data/spec/acceptance/cli/generate_spec.rb +14 -12
  39. data/spec/acceptance/cli/help_spec.rb +15 -13
  40. data/spec/acceptance/cli/install_spec.rb +33 -47
  41. data/spec/acceptance/cli/list_spec.rb +11 -9
  42. data/spec/acceptance/cli/run_spec.rb +26 -24
  43. data/spec/acceptance/cli/update_spec.rb +20 -18
  44. data/spec/acceptance/cli/version_spec.rb +3 -1
  45. data/spec/acceptance/cli/with_no_arguments_spec.rb +10 -8
  46. data/spec/acceptance/gemfile_dsl_compatibility_spec.rb +38 -36
  47. data/spec/acceptance/gemspec_spec.rb +26 -24
  48. data/spec/appraisal/appraisal_file_spec.rb +66 -4
  49. data/spec/appraisal/appraisal_spec.rb +20 -23
  50. data/spec/appraisal/customize_spec.rb +133 -11
  51. data/spec/appraisal/dependency_list_spec.rb +3 -1
  52. data/spec/appraisal/gemfile_spec.rb +39 -38
  53. data/spec/appraisal/utils_spec.rb +21 -28
  54. data/spec/spec_helper.rb +14 -6
  55. data/spec/support/acceptance_test_helpers.rb +31 -24
  56. data/spec/support/dependency_helpers.rb +29 -15
  57. data/spec/support/stream_helpers.rb +2 -0
  58. metadata +10 -34
  59. data/.rspec +0 -1
@@ -1,20 +1,22 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
2
 
3
- describe 'Gemfile DSL compatibility' do
4
- it 'supports all Bundler DSL in Gemfile' do
5
- build_gems %w(bacon orange_juice waffle)
6
- build_git_gem 'egg'
3
+ require "spec_helper"
4
+
5
+ RSpec.describe "Gemfile DSL compatibility" do
6
+ it "supports all Bundler DSL in Gemfile" do
7
+ build_gems %w[bacon orange_juice waffle]
8
+ build_git_gem "egg"
7
9
  build_gemspec
8
10
 
9
- build_gemfile <<-Gemfile
11
+ build_gemfile <<-GEMFILE
10
12
  source "https://rubygems.org"
11
13
  ruby RUBY_VERSION
12
14
 
13
- git "../gems/egg" do
15
+ git "../build/egg" do
14
16
  gem "egg"
15
17
  end
16
18
 
17
- path "../gems/orange_juice" do
19
+ path "../build/orange_juice" do
18
20
  gem "orange_juice"
19
21
  end
20
22
 
@@ -29,9 +31,9 @@ describe 'Gemfile DSL compatibility' do
29
31
  gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
30
32
 
31
33
  gemspec
32
- Gemfile
34
+ GEMFILE
33
35
 
34
- build_appraisal_file <<-Appraisals
36
+ build_appraisal_file <<-APPRAISALS
35
37
  appraise "japanese" do
36
38
  gem "rice"
37
39
  gem "miso_soup"
@@ -40,23 +42,23 @@ describe 'Gemfile DSL compatibility' do
40
42
  appraise "english" do
41
43
  gem "bread"
42
44
  end
43
- Appraisals
45
+ APPRAISALS
44
46
 
45
- run 'bundle install --local'
46
- run 'appraisal generate'
47
+ run "bundle install --local"
48
+ run "appraisal generate"
47
49
 
48
- expect(content_of 'gemfiles/japanese.gemfile').to eq <<-Gemfile.strip_heredoc
50
+ expect(content_of("gemfiles/japanese.gemfile")).to eq <<-GEMFILE.strip_heredoc
49
51
  # This file was generated by Appraisal
50
52
 
51
53
  source "https://rubygems.org"
52
54
 
53
55
  ruby "#{RUBY_VERSION}"
54
56
 
55
- git "../../gems/egg" do
57
+ git "../../build/egg" do
56
58
  gem "egg"
57
59
  end
58
60
 
59
- path "../../gems/orange_juice" do
61
+ path "../../build/orange_juice" do
60
62
  gem "orange_juice"
61
63
  end
62
64
 
@@ -73,20 +75,20 @@ describe 'Gemfile DSL compatibility' do
73
75
  end
74
76
 
75
77
  gemspec :path => "../"
76
- Gemfile
78
+ GEMFILE
77
79
 
78
- expect(content_of 'gemfiles/english.gemfile').to eq <<-Gemfile.strip_heredoc
80
+ expect(content_of("gemfiles/english.gemfile")).to eq <<-GEMFILE.strip_heredoc
79
81
  # This file was generated by Appraisal
80
82
 
81
83
  source "https://rubygems.org"
82
84
 
83
85
  ruby "#{RUBY_VERSION}"
84
86
 
85
- git "../../gems/egg" do
87
+ git "../../build/egg" do
86
88
  gem "egg"
87
89
  end
88
90
 
89
- path "../../gems/orange_juice" do
91
+ path "../../build/orange_juice" do
90
92
  gem "orange_juice"
91
93
  end
92
94
 
@@ -102,7 +104,7 @@ describe 'Gemfile DSL compatibility' do
102
104
  end
103
105
 
104
106
  gemspec :path => "../"
105
- Gemfile
107
+ GEMFILE
106
108
  end
107
109
 
108
110
  it "merges gem requirements" do
@@ -110,14 +112,14 @@ describe 'Gemfile DSL compatibility' do
110
112
  build_gem "bacon", "1.1.0"
111
113
  build_gem "bacon", "1.2.0"
112
114
 
113
- build_gemfile <<-Gemfile
115
+ build_gemfile <<-GEMFILE
114
116
  source "https://rubygems.org"
115
117
 
116
118
  gem "appraisal", :path => #{PROJECT_ROOT.inspect}
117
119
  gem "bacon", "1.2.0"
118
- Gemfile
120
+ GEMFILE
119
121
 
120
- build_appraisal_file <<-Appraisals
122
+ build_appraisal_file <<-APPRAISALS
121
123
  appraise "1.0.0" do
122
124
  gem "bacon", "1.0.0"
123
125
  end
@@ -129,21 +131,21 @@ describe 'Gemfile DSL compatibility' do
129
131
  appraise "1.2.0" do
130
132
  gem "bacon", "1.2.0"
131
133
  end
132
- Appraisals
134
+ APPRAISALS
133
135
 
134
- run 'bundle install --local'
135
- run 'appraisal generate'
136
+ run "bundle install --local"
137
+ run "appraisal generate"
136
138
 
137
- expect(content_of "gemfiles/1.0.0.gemfile").to include('gem "bacon", "1.0.0"')
138
- expect(content_of "gemfiles/1.1.0.gemfile").to include('gem "bacon", "1.1.0"')
139
- expect(content_of "gemfiles/1.2.0.gemfile").to include('gem "bacon", "1.2.0"')
139
+ expect(content_of("gemfiles/1.0.0.gemfile")).to include('gem "bacon", "1.0.0"')
140
+ expect(content_of("gemfiles/1.1.0.gemfile")).to include('gem "bacon", "1.1.0"')
141
+ expect(content_of("gemfiles/1.2.0.gemfile")).to include('gem "bacon", "1.2.0"')
140
142
  end
141
143
 
142
144
  it "supports gemspec in the group block" do
143
145
  build_gem "bacon", "1.0.0"
144
146
  build_gemspec
145
147
 
146
- build_gemfile <<-Gemfile
148
+ build_gemfile <<-GEMFILE
147
149
  source "https://rubygems.org"
148
150
 
149
151
  gem "appraisal", :path => #{PROJECT_ROOT.inspect}
@@ -151,18 +153,18 @@ describe 'Gemfile DSL compatibility' do
151
153
  group :plugin do
152
154
  gemspec
153
155
  end
154
- Gemfile
156
+ GEMFILE
155
157
 
156
- build_appraisal_file <<-Appraisals
158
+ build_appraisal_file <<-APPRAISALS
157
159
  appraise "1.0.0" do
158
160
  gem "bacon", "1.0.0"
159
161
  end
160
- Appraisals
162
+ APPRAISALS
161
163
 
162
164
  run "bundle install --local"
163
165
  run "appraisal generate"
164
166
 
165
- expect(content_of "gemfiles/1.0.0.gemfile").to eq <<-gemfile.strip_heredoc
167
+ expect(content_of("gemfiles/1.0.0.gemfile")).to eq <<-GEMFILE.strip_heredoc
166
168
  # This file was generated by Appraisal
167
169
 
168
170
  source "https://rubygems.org"
@@ -173,6 +175,6 @@ describe 'Gemfile DSL compatibility' do
173
175
  group :plugin do
174
176
  gemspec :path => "../"
175
177
  end
176
- gemfile
178
+ GEMFILE
177
179
  end
178
180
  end
@@ -1,57 +1,59 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
2
 
3
- describe 'Gemspec' do
3
+ require "spec_helper"
4
+
5
+ RSpec.describe "Gemspec" do
4
6
  before do
5
7
  build_appraisal_file
6
8
  build_rakefile
7
9
  end
8
10
 
9
- it 'supports gemspec syntax with default options' do
11
+ it "supports gemspec syntax with default options" do
10
12
  build_gemspec
11
13
 
12
- write_file 'Gemfile', <<-Gemfile
14
+ write_file "Gemfile", <<-GEMFILE
13
15
  source "https://rubygems.org"
14
16
 
15
17
  gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
16
18
 
17
19
  gemspec
18
- Gemfile
20
+ GEMFILE
19
21
 
20
- run 'bundle install --local'
21
- run 'appraisal install'
22
- output = run 'appraisal rake version'
22
+ run "bundle install --local"
23
+ run "appraisal install"
24
+ output = run "appraisal rake version"
23
25
 
24
- expect(output).to include 'Loaded 1.1.0'
26
+ expect(output).to include "Loaded 1.1.0"
25
27
  end
26
28
 
27
- it 'supports gemspec syntax with path option' do
28
- build_gemspec 'specdir'
29
+ it "supports gemspec syntax with path option" do
30
+ build_gemspec "specdir"
29
31
 
30
- write_file 'Gemfile', <<-Gemfile
32
+ write_file "Gemfile", <<-GEMFILE
31
33
  source "https://rubygems.org"
32
34
 
33
35
  gem 'appraisal', :path => #{PROJECT_ROOT.inspect}
34
36
 
35
37
  gemspec :path => './specdir'
36
- Gemfile
38
+ GEMFILE
37
39
 
38
- run 'bundle install --local'
39
- run 'appraisal install'
40
- output = run 'appraisal rake version'
40
+ run "bundle install --local"
41
+ run "appraisal install"
42
+ output = run "appraisal rake version"
41
43
 
42
- expect(output).to include 'Loaded 1.1.0'
44
+ expect(output).to include "Loaded 1.1.0"
43
45
  end
44
46
 
45
47
  def build_appraisal_file
46
- super <<-Appraisals
48
+ super <<-APPRAISALS
47
49
  appraise 'stock' do
48
50
  gem 'rake'
49
51
  end
50
- Appraisals
52
+ APPRAISALS
51
53
  end
52
54
 
53
55
  def build_rakefile
54
- write_file 'Rakefile', <<-rakefile
56
+ write_file "Rakefile", <<-RAKEFILE
55
57
  require 'rubygems'
56
58
  require 'bundler/setup'
57
59
  require 'appraisal'
@@ -60,13 +62,13 @@ describe 'Gemspec' do
60
62
  require 'dummy'
61
63
  puts "Loaded \#{$dummy_version}"
62
64
  end
63
- rakefile
65
+ RAKEFILE
64
66
  end
65
67
 
66
- def build_gemspec(path = '.')
68
+ def build_gemspec(path = ".")
67
69
  Dir.mkdir("tmp/stage/#{path}") rescue nil
68
70
 
69
- write_file File.join(path, 'gemspec_project.gemspec'), <<-gemspec
71
+ write_file File.join(path, "gemspec_project.gemspec"), <<-GEMSPEC
70
72
  Gem::Specification.new do |s|
71
73
  s.name = 'gemspec_project'
72
74
  s.version = '0.1'
@@ -75,6 +77,6 @@ describe 'Gemspec' do
75
77
 
76
78
  s.add_development_dependency('dummy', '1.1.0')
77
79
  end
78
- gemspec
80
+ GEMSPEC
79
81
  end
80
82
  end
@@ -1,14 +1,76 @@
1
- require 'spec_helper'
2
- require 'appraisal/appraisal_file'
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+ require "appraisal/appraisal_file"
3
5
 
4
6
  # Requiring this to make the test pass on Rubinius 2.2.5
5
7
  # https://github.com/rubinius/rubinius/issues/2934
6
- require 'rspec/matchers/built_in/raise_error'
8
+ require "rspec/matchers/composable"
9
+ require "rspec/matchers/built_in/raise_error"
7
10
 
8
- describe Appraisal::AppraisalFile do
11
+ RSpec.describe Appraisal::AppraisalFile do
9
12
  it "complains when no Appraisals file is found" do
10
13
  allow(File).to receive(:exist?).with(/Gemfile/).and_return(true)
11
14
  allow(File).to receive(:exist?).with("Appraisals").and_return(false)
12
15
  expect { described_class.new }.to raise_error(Appraisal::AppraisalsNotFound)
13
16
  end
17
+
18
+ describe "#customize_gemfiles" do
19
+ before(:each) do
20
+ allow(File).to receive(:exist?).with(anything).and_return(true)
21
+ allow(IO).to receive(:read).with(anything).and_return("")
22
+ end
23
+
24
+ context "when no arguments are given" do
25
+ subject { described_class.new.customize_gemfiles }
26
+
27
+ it "raises an error" do
28
+ expect { subject }.to raise_error(LocalJumpError)
29
+ end
30
+ end
31
+
32
+ context "when a block is given" do
33
+ context "when the block returns a hash with :heading key" do
34
+ subject do
35
+ described_class.new.customize_gemfiles do
36
+ { heading: "foo" }
37
+ end
38
+ end
39
+
40
+ it "sets the heading" do
41
+ pending("test is broken: wrong number of arguments (given 0, expected 1)")
42
+
43
+ expect { subject }.to change { Appraisal::Customize.heading }.to("foo")
44
+ end
45
+ end
46
+
47
+ context "when the block returns a hash with :single_quotes key" do
48
+ subject do
49
+ described_class.new.customize_gemfiles do
50
+ { single_quotes: true }
51
+ end
52
+ end
53
+
54
+ it "sets the single_quotes" do
55
+ expect { subject }.to change { Appraisal::Customize.single_quotes }.to(true)
56
+ end
57
+ end
58
+
59
+ context "when the block returns a hash with :heading and :single_quotes keys" do
60
+ subject do
61
+ described_class.new.customize_gemfiles do
62
+ { heading: "foo", single_quotes: true }
63
+ end
64
+ end
65
+
66
+ it "sets the heading and single_quotes" do
67
+ pending("test is broken: wrong number of arguments (given 0, expected 1)")
68
+
69
+ subject
70
+ expect(Appraisal::Customize.heading).to eq("foo")
71
+ expect(Appraisal::Customize.single_quotes).to eq(true)
72
+ end
73
+ end
74
+ end
75
+ end
14
76
  end
@@ -1,8 +1,10 @@
1
- require 'spec_helper'
2
- require 'appraisal/appraisal'
3
- require 'tempfile'
1
+ # frozen_string_literal: true
4
2
 
5
- describe Appraisal::Appraisal do
3
+ require "spec_helper"
4
+ require "appraisal/appraisal"
5
+ require "tempfile"
6
+
7
+ RSpec.describe Appraisal::Appraisal do
6
8
  it "converts spaces to underscores in the gemfile path" do
7
9
  appraisal = Appraisal::Appraisal.new("one two", "Gemfile")
8
10
  expect(appraisal.gemfile_path).to match(/one_two\.gemfile$/)
@@ -85,50 +87,45 @@ describe Appraisal::Appraisal do
85
87
  end
86
88
  end
87
89
 
88
- context 'parallel installation' do
90
+ context "parallel installation" do
89
91
  include StreamHelpers
90
92
 
91
93
  before do
92
- @appraisal = Appraisal::Appraisal.new('fake', 'fake')
94
+ @appraisal = Appraisal::Appraisal.new("fake", "fake")
93
95
  allow(@appraisal).to receive(:gemfile_path).and_return("/home/test/test directory")
94
- allow(@appraisal).to receive(:project_root).
95
- and_return(Pathname.new("/home/test"))
96
- allow(Appraisal::Command).to receive(:new).and_return(double(:run => true))
96
+ allow(@appraisal).to receive(:project_root).and_return(Pathname.new("/home/test"))
97
+ allow(Appraisal::Command).to receive(:new).and_return(double(run: true))
97
98
  end
98
99
 
99
- it 'runs single install command on Bundler < 1.4.0' do
100
- stub_const('Bundler::VERSION', '1.3.0')
100
+ it "runs single install command on Bundler < 1.4.0" do
101
+ stub_const("Bundler::VERSION", "1.3.0")
101
102
 
102
103
  warning = capture(:stderr) do
103
104
  @appraisal.install("jobs" => 42)
104
105
  end
105
106
 
106
- expect(Appraisal::Command).to have_received(:new).
107
- with("#{bundle_check_command} || #{bundle_single_install_command}")
108
- expect(warning).to include 'Please upgrade Bundler'
107
+ expect(Appraisal::Command).to have_received(:new).with("#{bundle_check_command} || #{bundle_single_install_command}")
108
+ expect(warning).to include "Please upgrade Bundler"
109
109
  end
110
110
 
111
- it 'runs parallel install command on Bundler >= 1.4.0' do
112
- stub_const('Bundler::VERSION', '1.4.0')
111
+ it "runs parallel install command on Bundler >= 1.4.0" do
112
+ stub_const("Bundler::VERSION", "1.4.0")
113
113
 
114
114
  @appraisal.install("jobs" => 42)
115
115
 
116
- expect(Appraisal::Command).to have_received(:new).
117
- with("#{bundle_check_command} || #{bundle_parallel_install_command}")
116
+ expect(Appraisal::Command).to have_received(:new).with("#{bundle_check_command} || #{bundle_parallel_install_command}")
118
117
  end
119
118
 
120
- it 'runs install command with retries on Bundler' do
119
+ it "runs install command with retries on Bundler" do
121
120
  @appraisal.install("retry" => 3)
122
121
 
123
- expect(Appraisal::Command).to have_received(:new).
124
- with("#{bundle_check_command} || #{bundle_install_command_with_retries}")
122
+ expect(Appraisal::Command).to have_received(:new).with("#{bundle_check_command} || #{bundle_install_command_with_retries}")
125
123
  end
126
124
 
127
125
  it "runs install command with path on Bundler" do
128
126
  @appraisal.install("path" => "vendor/appraisal")
129
127
 
130
- expect(Appraisal::Command).to have_received(:new).
131
- with("#{bundle_check_command} || #{bundle_install_command_with_path}")
128
+ expect(Appraisal::Command).to have_received(:new).with("#{bundle_check_command} || #{bundle_install_command_with_path}")
132
129
  end
133
130
 
134
131
  def bundle_check_command
@@ -1,18 +1,140 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
4
+ require "appraisal/appraisal"
2
5
  require "appraisal/customize"
3
6
 
4
- describe Appraisal::Customize do
5
- it "has defaults" do
6
- expect(described_class.heading).to eq nil
7
- expect(described_class.single_quotes).to eq false
8
- expect { described_class.new }.to_not(change do
9
- [described_class.heading, described_class.single_quotes]
10
- end)
7
+ RSpec.describe Appraisal::Customize do
8
+ let(:appraisal) { Appraisal::Appraisal.new("test", "Gemfile") }
9
+ let(:single_line_heading) { "This file was generated with a custom heading!" }
10
+ let(:multi_line_heading) do
11
+ <<~HEADING
12
+ frozen_string_literal: true
13
+
14
+ This file was generated with a custom heading!
15
+ HEADING
16
+ end
17
+ let(:subject) { described_class.new }
18
+ let(:single_line_subject) do
19
+ described_class.new(heading: single_line_heading)
20
+ end
21
+ let(:multi_line_single_quotes_subject) do
22
+ described_class.new(heading: multi_line_heading, single_quotes: true)
23
+ end
24
+
25
+ describe ".heading" do
26
+ it "returns nil if no heading is set" do
27
+ subject
28
+ expect(described_class.heading(appraisal)).to eq(nil)
29
+ end
30
+
31
+ it "returns the heading if set" do
32
+ single_line_subject
33
+ expect(described_class.heading(appraisal)).to eq(single_line_heading)
34
+ end
35
+
36
+ it "returns the heading without an trailing newline" do
37
+ multi_line_single_quotes_subject
38
+ expect(described_class.heading(appraisal)).to eq(multi_line_heading.chomp)
39
+ expect(described_class.heading(appraisal)).to_not end_with("\n")
40
+ end
41
+ end
42
+
43
+ describe ".single_quotes" do
44
+ it "returns false if not set" do
45
+ subject
46
+ expect(described_class.single_quotes).to eq(false)
47
+ end
48
+
49
+ it "returns true if set" do
50
+ multi_line_single_quotes_subject
51
+ expect(described_class.single_quotes).to eq(true)
52
+ end
11
53
  end
12
54
 
13
- it "can override defaults" do
14
- described_class.new(single_quotes: true, heading: "foo")
15
- expect(described_class.heading).to eq "foo"
16
- expect(described_class.single_quotes).to eq true
55
+ describe ".customize" do
56
+ let(:appraisal_name) { "test" }
57
+ let(:gemfile) { "test.gemfile" }
58
+ let(:lockfile) { "#{gemfile}.lock" }
59
+ let(:gemfile_relative_path) { "gemfiles/#{gemfile}" }
60
+ let(:lockfile_relative_path) { "gemfiles/#{lockfile}" }
61
+ let(:gemfile_full_path) { "/path/to/project/#{gemfile_relative_path}" }
62
+ let(:lockfile_full_path) { "/path/to/project/#{lockfile_relative_path}" }
63
+ before do
64
+ allow(appraisal).to receive(:gemfile_name).and_return(gemfile)
65
+ allow(appraisal).to receive(:gemfile_path).and_return(gemfile_full_path)
66
+ allow(appraisal).to receive(:lockfile_path).and_return(lockfile_full_path)
67
+ allow(appraisal).to receive(:relative_gemfile_path).and_return(gemfile_relative_path)
68
+ end
69
+
70
+ it "returns nil if no heading is set" do
71
+ subject
72
+ expect(described_class.send(:customize, nil, appraisal)).to eq(nil)
73
+ end
74
+
75
+ it "returns the heading unchanged" do
76
+ single_line_subject
77
+ expect(described_class.send(
78
+ :customize,
79
+ single_line_heading,
80
+ appraisal
81
+ )).to eq(single_line_heading)
82
+ end
83
+
84
+ it "returns the heading with the appraisal name" do
85
+ expect(described_class.send(
86
+ :customize,
87
+ "Appraisal: %{appraisal}", # rubocop:disable Style/FormatStringToken
88
+ appraisal
89
+ )).to eq("Appraisal: #{appraisal_name}")
90
+ end
91
+
92
+ it "returns the heading with the gemfile name" do
93
+ expect(described_class.send(
94
+ :customize,
95
+ "Gemfile: %{gemfile}", # rubocop:disable Style/FormatStringToken
96
+ appraisal
97
+ )).to eq("Gemfile: #{gemfile}")
98
+ end
99
+
100
+ it "returns the heading with the gemfile path" do
101
+ expect(described_class.send(
102
+ :customize,
103
+ "Gemfile: %{gemfile_path}", # rubocop:disable Style/FormatStringToken
104
+ appraisal
105
+ )).to eq("Gemfile: #{gemfile_full_path}")
106
+ end
107
+
108
+ it "returns the heading with the lockfile name" do
109
+ expect(described_class.send(
110
+ :customize,
111
+ "Lockfile: %{lockfile}", # rubocop:disable Style/FormatStringToken
112
+ appraisal
113
+ )).to eq("Lockfile: #{lockfile}")
114
+ end
115
+
116
+ it "returns the heading with the lockfile path" do
117
+ expect(described_class.send(
118
+ :customize,
119
+ "Lockfile: %{lockfile_path}", # rubocop:disable Style/FormatStringToken
120
+ appraisal
121
+ )).to eq("Lockfile: #{lockfile_full_path}")
122
+ end
123
+
124
+ it "returns the heading with the relative gemfile path" do
125
+ expect(described_class.send(
126
+ :customize,
127
+ "Gemfile: %{relative_gemfile_path}", # rubocop:disable Style/FormatStringToken
128
+ appraisal
129
+ )).to eq("Gemfile: #{gemfile_relative_path}")
130
+ end
131
+
132
+ it "returns the heading with the relative lockfile path" do
133
+ expect(described_class.send(
134
+ :customize,
135
+ "Gemfile: %{relative_lockfile_path}", # rubocop:disable Style/FormatStringToken
136
+ appraisal
137
+ )).to eq("Gemfile: #{lockfile_relative_path}")
138
+ end
17
139
  end
18
140
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
  require "appraisal/dependency_list"
3
5
 
4
- describe Appraisal::DependencyList do
6
+ RSpec.describe Appraisal::DependencyList do
5
7
  describe "#add" do
6
8
  let(:dependency_list) { Appraisal::DependencyList.new }
7
9