transpec 1.11.1 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/lib/transpec/cli.rb +1 -1
- data/lib/transpec/configuration.rb +1 -0
- data/lib/transpec/converter.rb +5 -0
- data/lib/transpec/option_parser.rb +4 -2
- data/lib/transpec/rspec_version.rb +1 -0
- data/lib/transpec/static_context_inspector.rb +1 -1
- data/lib/transpec/syntax/hook.rb +45 -0
- data/lib/transpec/version.rb +2 -2
- data/spec/support/cache_helper.rb +2 -2
- data/spec/transpec/configuration_spec.rb +1 -0
- data/spec/transpec/converter_spec.rb +39 -0
- data/spec/transpec/option_parser_spec.rb +21 -11
- data/spec/transpec/rspec_version_spec.rb +2 -1
- data/spec/transpec/syntax/hook_spec.rb +215 -0
- data/tasks/demo.rake +4 -4
- data/tasks/fixtures/guard/{COMMIT_EDITMSG → 2.99.0/COMMIT_EDITMSG} +1 -1
- data/tasks/fixtures/guard/3.0.0/COMMIT_EDITMSG +32 -0
- data/tasks/fixtures/mail/{COMMIT_EDITMSG → 2.99.0/COMMIT_EDITMSG} +1 -1
- data/tasks/fixtures/mail/3.0.0/COMMIT_EDITMSG +28 -0
- data/tasks/fixtures/twitter/{COMMIT_EDITMSG → 2.99.0/COMMIT_EDITMSG} +1 -1
- data/tasks/fixtures/twitter/3.0.0/COMMIT_EDITMSG +16 -0
- data/tasks/lib/demo.rb +46 -0
- data/tasks/lib/project.rb +129 -0
- data/tasks/lib/test.rb +84 -0
- data/tasks/test.rake +5 -5
- metadata +13 -6
- data/tasks/lib/transpec_demo.rb +0 -55
- data/tasks/lib/transpec_test.rb +0 -181
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9028442bbb2a56a7ad1ef1a0205980d1f460ca95
|
4
|
+
data.tar.gz: 136e4e0450ee5747ac17922275b1b1dad1b1991a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 401af30bd4fdfb1144dd5d1d9577b12e2d043c9800b0b0a23edc973c7be6af3da89b426e900b4d31f5ea827e594a4203243c9437b9194715453386b9a49b9688
|
7
|
+
data.tar.gz: 3722e2241be35ef86e5b2df35e777322c63759a994c84fb4066813650521c7d05cf27526005d2320ba341d9447798a183215cbd112c863e42ce952f7349faa3e
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/lib/transpec/cli.rb
CHANGED
@@ -134,7 +134,7 @@ module Transpec
|
|
134
134
|
puts 'A commit message that describes the conversion summary was generated to'.color(:cyan)
|
135
135
|
puts '.git/COMMIT_EDITMSG. To use the message, type the following command for'.color(:cyan)
|
136
136
|
puts 'the next commit:'.color(:cyan)
|
137
|
-
puts ' git commit -
|
137
|
+
puts ' git commit -aeF .git/COMMIT_EDITMSG'
|
138
138
|
end
|
139
139
|
|
140
140
|
def display_final_guide
|
@@ -19,6 +19,7 @@ module Transpec
|
|
19
19
|
[:add_receiver_arg_to_any_instance_implementation_block, true],
|
20
20
|
[:convert_stub_with_hash_to_allow_to_receive_and_return, false],
|
21
21
|
[:convert_example_group, false],
|
22
|
+
[:convert_hook_scope, false],
|
22
23
|
[:forced, false],
|
23
24
|
[:skip_dynamic_analysis, false]
|
24
25
|
].freeze
|
data/lib/transpec/converter.rb
CHANGED
@@ -214,6 +214,11 @@ module Transpec
|
|
214
214
|
have.convert_to_standard_expectation!(configuration.parenthesize_matcher_arg)
|
215
215
|
end
|
216
216
|
|
217
|
+
def process_hook(hook)
|
218
|
+
return if !configuration.convert_hook_scope? || !rspec_version.hook_scope_alias_available?
|
219
|
+
hook.convert_scope_name!
|
220
|
+
end
|
221
|
+
|
217
222
|
def process_messaging_host(messaging_host)
|
218
223
|
process_useless_and_return(messaging_host)
|
219
224
|
process_any_instance_block(messaging_host)
|
@@ -21,8 +21,9 @@ module Transpec
|
|
21
21
|
}
|
22
22
|
|
23
23
|
CONFIG_ATTRS_FOR_CONVERT_TYPES = {
|
24
|
-
|
25
|
-
|
24
|
+
example_group: :convert_example_group=,
|
25
|
+
hook_scope: :convert_hook_scope=,
|
26
|
+
stub_with_hash: :convert_stub_with_hash_to_allow_to_receive_and_return=
|
26
27
|
}
|
27
28
|
|
28
29
|
VALID_BOOLEAN_MATCHER_TYPES = %w(truthy,falsey truthy,falsy true,false)
|
@@ -149,6 +150,7 @@ module Transpec
|
|
149
150
|
'Enable specific conversions that are disabled by default.',
|
150
151
|
'Conversion Types:',
|
151
152
|
' *example_group* (`describe` to `RSpec.describe`)',
|
153
|
+
' *hook_scope* (`before(:all)` to `before(:context)`)',
|
152
154
|
' *stub_with_hash* (`obj.stub(:msg => val)` to',
|
153
155
|
' `allow(obj).to receive(:msg).and_return(val)`)',
|
154
156
|
'These conversions are disabled by default.'
|
@@ -50,6 +50,7 @@ module Transpec
|
|
50
50
|
define_feature :receive_message_chain, '3.0.0.beta2'
|
51
51
|
define_feature :non_should_matcher_protocol, '3.0.0.beta2'
|
52
52
|
define_feature :non_monkey_patch_example_group, '3.0.0.beta2'
|
53
|
+
define_feature :hook_scope_alias, '3.0.0.beta2'
|
53
54
|
|
54
55
|
RSPEC_2_99 = new('2.99.0.beta1')
|
55
56
|
RSPEC_3_0 = new('3.0.0.beta1')
|
@@ -129,7 +129,7 @@ module Transpec
|
|
129
129
|
|
130
130
|
if arg_node && [:sym, :str].include?(arg_node.type)
|
131
131
|
hook_arg = arg_node.children.first.to_sym
|
132
|
-
return :all_before_after if
|
132
|
+
return :all_before_after if [:all, :context].include?(hook_arg)
|
133
133
|
end
|
134
134
|
|
135
135
|
:each_before_after
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'transpec/syntax'
|
4
|
+
require 'transpec/syntax/mixin/send'
|
5
|
+
require 'transpec/rspec_dsl'
|
6
|
+
|
7
|
+
module Transpec
|
8
|
+
class Syntax
|
9
|
+
class Hook < Syntax
|
10
|
+
include Mixin::Send, RSpecDSL
|
11
|
+
|
12
|
+
SCOPE_ALIASES = {
|
13
|
+
each: :example,
|
14
|
+
all: :context
|
15
|
+
}
|
16
|
+
|
17
|
+
def dynamic_analysis_target?
|
18
|
+
super && HOOK_METHODS.include?(method_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def convert_scope_name!
|
22
|
+
return if !scope_name || !replacement_scope_name
|
23
|
+
replace(arg_range, replacement_scope_name.inspect)
|
24
|
+
register_record
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def scope_name
|
30
|
+
return nil unless arg_node
|
31
|
+
arg_node.children.first
|
32
|
+
end
|
33
|
+
|
34
|
+
def replacement_scope_name
|
35
|
+
SCOPE_ALIASES[scope_name]
|
36
|
+
end
|
37
|
+
|
38
|
+
def register_record
|
39
|
+
original_syntax = "#{method_name}(#{scope_name.inspect}) { }"
|
40
|
+
converted_syntax = "#{method_name}(#{replacement_scope_name.inspect}) { }"
|
41
|
+
report.records << Record.new(original_syntax, converted_syntax)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/transpec/version.rb
CHANGED
@@ -48,8 +48,8 @@ module CacheHelper
|
|
48
48
|
def cache_dir
|
49
49
|
@cache_dir ||= begin
|
50
50
|
project_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
51
|
-
ruby_version =
|
52
|
-
cache_dir = File.join(project_root, '
|
51
|
+
ruby_version = [RUBY_ENGINE, RUBY_VERSION].join('-')
|
52
|
+
cache_dir = File.join(project_root, '.cache', 'spec', ruby_version)
|
53
53
|
|
54
54
|
unless Dir.exist?(cache_dir)
|
55
55
|
require 'fileutils'
|
@@ -21,6 +21,7 @@ module Transpec
|
|
21
21
|
[:add_receiver_arg_to_any_instance_implementation_block?, true],
|
22
22
|
[:convert_stub_with_hash_to_allow_to_receive_and_return?, false],
|
23
23
|
[:convert_example_group?, false],
|
24
|
+
[:convert_hook_scope?, false],
|
24
25
|
[:forced?, false],
|
25
26
|
[:skip_dynamic_analysis?, false],
|
26
27
|
[:negative_form_of_to, 'not_to'],
|
@@ -830,6 +830,45 @@ module Transpec
|
|
830
830
|
end
|
831
831
|
end
|
832
832
|
|
833
|
+
describe '#process_hook' do
|
834
|
+
let(:hook_object) { double('hook_object').as_null_object }
|
835
|
+
|
836
|
+
context 'when Configuration#convert_hook_scope? is true' do
|
837
|
+
before { configuration.convert_hook_scope = true }
|
838
|
+
|
839
|
+
context 'when RSpecVersion#hook_scope_alias_available? returns true' do
|
840
|
+
before { rspec_version.stub(:hook_scope_alias_available?).and_return(true) }
|
841
|
+
|
842
|
+
it 'invokes Hook#convert_scope_name!' do
|
843
|
+
hook_object.should_receive(:convert_scope_name!)
|
844
|
+
converter.process_hook(hook_object)
|
845
|
+
end
|
846
|
+
end
|
847
|
+
|
848
|
+
context 'when RSpecVersion#hook_scope_alias_available? returns false' do
|
849
|
+
before { rspec_version.stub(:hook_scope_alias_available?).and_return(false) }
|
850
|
+
|
851
|
+
it 'does nothing' do
|
852
|
+
hook_object.should_not_receive(:convert_scope_name!)
|
853
|
+
converter.process_hook(hook_object)
|
854
|
+
end
|
855
|
+
end
|
856
|
+
end
|
857
|
+
|
858
|
+
context 'when Configuration#convert_hook_scope? is false' do
|
859
|
+
before { configuration.convert_hook_scope = false }
|
860
|
+
|
861
|
+
context 'when RSpecVersion#hook_scope_alias_available? returns true' do
|
862
|
+
before { rspec_version.stub(:hook_scope_alias_available?).and_return(true) }
|
863
|
+
|
864
|
+
it 'does nothing' do
|
865
|
+
hook_object.should_not_receive(:convert_scope_name!)
|
866
|
+
converter.process_hook(hook_object)
|
867
|
+
end
|
868
|
+
end
|
869
|
+
end
|
870
|
+
end
|
871
|
+
|
833
872
|
describe '#process_raise_error' do
|
834
873
|
let(:raise_error_object) { double('raise_error_object').as_null_object }
|
835
874
|
|
@@ -103,8 +103,9 @@ module Transpec
|
|
103
103
|
|
104
104
|
describe '-v/--convert option' do
|
105
105
|
[
|
106
|
-
['
|
107
|
-
['
|
106
|
+
['example_group', :convert_example_group?],
|
107
|
+
['hook_scope', :convert_hook_scope?],
|
108
|
+
['stub_with_hash', :convert_stub_with_hash_to_allow_to_receive_and_return?]
|
108
109
|
].each do |cli_type, config_attr|
|
109
110
|
context "when #{cli_type.inspect} is specified" do
|
110
111
|
let(:args) { ['--convert', cli_type] }
|
@@ -256,20 +257,29 @@ module Transpec
|
|
256
257
|
end
|
257
258
|
end
|
258
259
|
|
259
|
-
|
260
|
-
|
260
|
+
def description_for_option(option)
|
261
|
+
description_lines = parser.send(:descriptions)[option]
|
262
|
+
description_lines.map { |line| parser.send(:highlight_text, line) }
|
263
|
+
end
|
261
264
|
|
262
|
-
|
263
|
-
|
264
|
-
end
|
265
|
+
def conversion_types_for_option(option)
|
266
|
+
section = description_for_option(option)
|
265
267
|
|
266
|
-
|
267
|
-
match = line.match(/^[ ]{
|
268
|
-
next
|
268
|
+
section.each_with_object([]) do |line, types|
|
269
|
+
match = line.match(/^[ ]{2}([a-z_]+)/)
|
270
|
+
next unless match
|
269
271
|
types << match.captures.first
|
270
272
|
end
|
273
|
+
end
|
274
|
+
|
275
|
+
it 'describes all conversion types for -k/--keep option' do
|
276
|
+
conversion_types = conversion_types_for_option('-k')
|
277
|
+
conversion_types.should =~ OptionParser::CONFIG_ATTRS_FOR_KEEP_TYPES.keys.map(&:to_s)
|
278
|
+
end
|
271
279
|
|
272
|
-
|
280
|
+
it 'describes all conversion types for -v/--convert option' do
|
281
|
+
conversion_types = conversion_types_for_option('-v')
|
282
|
+
conversion_types.should =~ OptionParser::CONFIG_ATTRS_FOR_CONVERT_TYPES.keys.map(&:to_s)
|
273
283
|
end
|
274
284
|
end
|
275
285
|
end
|
@@ -71,7 +71,8 @@ module Transpec
|
|
71
71
|
[
|
72
72
|
:receive_message_chain_available?,
|
73
73
|
:non_should_matcher_protocol_available?,
|
74
|
-
:non_monkey_patch_example_group_available
|
74
|
+
:non_monkey_patch_example_group_available?,
|
75
|
+
:hook_scope_alias_available?
|
75
76
|
].each do |method|
|
76
77
|
include_examples 'version comparisons', method, [
|
77
78
|
['2.14.0', false],
|
@@ -0,0 +1,215 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'transpec/syntax/hook'
|
5
|
+
|
6
|
+
module Transpec
|
7
|
+
class Syntax
|
8
|
+
describe Hook do
|
9
|
+
include_context 'parsed objects'
|
10
|
+
include_context 'syntax object', Hook, :hook_object
|
11
|
+
|
12
|
+
let(:record) { hook_object.report.records.last }
|
13
|
+
|
14
|
+
describe '#convert_scope_name!' do
|
15
|
+
before do
|
16
|
+
hook_object.convert_scope_name!
|
17
|
+
end
|
18
|
+
|
19
|
+
RSpecDSL::HOOK_METHODS.each do |hook_method|
|
20
|
+
context "with expression `#{hook_method}(:each) { }`" do
|
21
|
+
let(:source) do
|
22
|
+
<<-END
|
23
|
+
describe 'example' do
|
24
|
+
#{hook_method}(:each) do
|
25
|
+
do_something
|
26
|
+
end
|
27
|
+
end
|
28
|
+
END
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:expected_source) do
|
32
|
+
<<-END
|
33
|
+
describe 'example' do
|
34
|
+
#{hook_method}(:example) do
|
35
|
+
do_something
|
36
|
+
end
|
37
|
+
end
|
38
|
+
END
|
39
|
+
end
|
40
|
+
|
41
|
+
it "converts to `#{hook_method}(:example) { }` form" do
|
42
|
+
rewritten_source.should == expected_source
|
43
|
+
end
|
44
|
+
|
45
|
+
it "adds record `#{hook_method}(:each) { }` -> `#{hook_method}(:example) { }`" do
|
46
|
+
record.original_syntax.should == "#{hook_method}(:each) { }"
|
47
|
+
record.converted_syntax.should == "#{hook_method}(:example) { }"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
[:before, :after].each do |hook_method|
|
53
|
+
context "with expression `#{hook_method}(:all) { }`" do
|
54
|
+
let(:source) do
|
55
|
+
<<-END
|
56
|
+
describe 'example' do
|
57
|
+
#{hook_method}(:all) do
|
58
|
+
do_something
|
59
|
+
end
|
60
|
+
end
|
61
|
+
END
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:expected_source) do
|
65
|
+
<<-END
|
66
|
+
describe 'example' do
|
67
|
+
#{hook_method}(:context) do
|
68
|
+
do_something
|
69
|
+
end
|
70
|
+
end
|
71
|
+
END
|
72
|
+
end
|
73
|
+
|
74
|
+
it "converts to `#{hook_method}(:context) { }` form" do
|
75
|
+
rewritten_source.should == expected_source
|
76
|
+
end
|
77
|
+
|
78
|
+
it "adds record `#{hook_method}(:all) { }` -> `#{hook_method}(:context) { }`" do
|
79
|
+
record.original_syntax.should == "#{hook_method}(:all) { }"
|
80
|
+
record.converted_syntax.should == "#{hook_method}(:context) { }"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with expression `RSpec.configure { |c| c.#{hook_method}(:each) { } }`" do
|
85
|
+
let(:source) do
|
86
|
+
<<-END
|
87
|
+
RSpec.configure do |config|
|
88
|
+
config.#{hook_method}(:each) do
|
89
|
+
do_something
|
90
|
+
end
|
91
|
+
end
|
92
|
+
END
|
93
|
+
end
|
94
|
+
|
95
|
+
let(:expected_source) do
|
96
|
+
<<-END
|
97
|
+
RSpec.configure do |config|
|
98
|
+
config.#{hook_method}(:example) do
|
99
|
+
do_something
|
100
|
+
end
|
101
|
+
end
|
102
|
+
END
|
103
|
+
end
|
104
|
+
|
105
|
+
it "converts to `RSpec.configure { |c| c.#{hook_method}(:example) { } }` form" do
|
106
|
+
rewritten_source.should == expected_source
|
107
|
+
end
|
108
|
+
|
109
|
+
it "adds record `#{hook_method}(:each) { }` -> `#{hook_method}(:example) { }`" do
|
110
|
+
record.original_syntax.should == "#{hook_method}(:each) { }"
|
111
|
+
record.converted_syntax.should == "#{hook_method}(:example) { }"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context "with expression `RSpec.configure { |c| c.#{hook_method}(:suite) { } }`" do
|
116
|
+
let(:source) do
|
117
|
+
<<-END
|
118
|
+
RSpec.configure do |config|
|
119
|
+
config.#{hook_method}(:suite) do
|
120
|
+
do_something
|
121
|
+
end
|
122
|
+
end
|
123
|
+
END
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'does nothing' do
|
127
|
+
rewritten_source.should == source
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'does not add record' do
|
131
|
+
record.should be_nil
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context 'with expression `before { }`' do
|
137
|
+
let(:source) do
|
138
|
+
<<-END
|
139
|
+
describe 'example' do
|
140
|
+
before do
|
141
|
+
do_something
|
142
|
+
end
|
143
|
+
end
|
144
|
+
END
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'does nothing' do
|
148
|
+
rewritten_source.should == source
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'does not add record' do
|
152
|
+
record.should be_nil
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
context 'with expression `before(variable) { }`' do
|
157
|
+
let(:source) do
|
158
|
+
<<-END
|
159
|
+
scope = :each
|
160
|
+
|
161
|
+
describe 'example' do
|
162
|
+
before(scope) do
|
163
|
+
do_something
|
164
|
+
end
|
165
|
+
end
|
166
|
+
END
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'does nothing' do
|
170
|
+
rewritten_source.should == source
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'does not add record' do
|
174
|
+
record.should be_nil
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context 'with expression `before(:each, :type => :model) { }`' do
|
179
|
+
let(:source) do
|
180
|
+
<<-END
|
181
|
+
scope = :each
|
182
|
+
|
183
|
+
describe 'example' do
|
184
|
+
before(:each, :type => :model) do
|
185
|
+
do_something
|
186
|
+
end
|
187
|
+
end
|
188
|
+
END
|
189
|
+
end
|
190
|
+
|
191
|
+
let(:expected_source) do
|
192
|
+
<<-END
|
193
|
+
scope = :each
|
194
|
+
|
195
|
+
describe 'example' do
|
196
|
+
before(:example, :type => :model) do
|
197
|
+
do_something
|
198
|
+
end
|
199
|
+
end
|
200
|
+
END
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'converts to `before(:example, :type => :model) { }` form' do
|
204
|
+
rewritten_source.should == expected_source
|
205
|
+
end
|
206
|
+
|
207
|
+
it 'adds record `before(:each) { }` -> `before(:example) { }`' do
|
208
|
+
record.original_syntax.should == 'before(:each) { }'
|
209
|
+
record.converted_syntax.should == 'before(:example) { }'
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
data/tasks/demo.rake
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require_relative 'lib/
|
3
|
+
require_relative 'lib/demo'
|
4
4
|
|
5
5
|
namespace :demo do
|
6
6
|
# rubocop:disable LineLength
|
7
7
|
demos = [
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
Demo.new('git@github.com:yujinakayama/twitter.git', 'transpec-test-rspec-2-99'),
|
9
|
+
Demo.new('git@github.com:yujinakayama/guard.git', 'transpec-test-rspec-2-99', %w(--without development)),
|
10
|
+
Demo.new('git@github.com:yujinakayama/mail.git', 'transpec-test-rspec-2-99')
|
11
11
|
]
|
12
12
|
# rubocop:enable LineLength
|
13
13
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Convert specs to RSpec 3.0.0.beta2 syntax with Transpec
|
2
|
+
|
3
|
+
This conversion is done by Transpec 1.11.1 with the following command:
|
4
|
+
transpec --force --convert example_group,hook_scope
|
5
|
+
|
6
|
+
* 31 conversions
|
7
|
+
from: describe 'something' { }
|
8
|
+
to: RSpec.describe 'something' { }
|
9
|
+
|
10
|
+
* 16 conversions
|
11
|
+
from: obj.stub(:message => value)
|
12
|
+
to: allow(obj).to receive_messages(:message => value)
|
13
|
+
|
14
|
+
* 13 conversions
|
15
|
+
from: before(:all) { }
|
16
|
+
to: before(:context) { }
|
17
|
+
|
18
|
+
* 10 conversions
|
19
|
+
from: before(:each) { }
|
20
|
+
to: before(:example) { }
|
21
|
+
|
22
|
+
* 8 conversions
|
23
|
+
from: after(:all) { }
|
24
|
+
to: after(:context) { }
|
25
|
+
|
26
|
+
* 4 conversions
|
27
|
+
from: shared_examples_for 'something' { }
|
28
|
+
to: RSpec.shared_examples_for 'something' { }
|
29
|
+
|
30
|
+
* 1 conversion
|
31
|
+
from: after(:each) { }
|
32
|
+
to: after(:example) { }
|
@@ -0,0 +1,28 @@
|
|
1
|
+
Convert specs to RSpec 3.0.0.beta2 syntax with Transpec
|
2
|
+
|
3
|
+
This conversion is done by Transpec 1.11.1 with the following command:
|
4
|
+
transpec --force --convert example_group,hook_scope
|
5
|
+
|
6
|
+
* 82 conversions
|
7
|
+
from: describe 'something' { }
|
8
|
+
to: RSpec.describe 'something' { }
|
9
|
+
|
10
|
+
* 39 conversions
|
11
|
+
from: before(:each) { }
|
12
|
+
to: before(:example) { }
|
13
|
+
|
14
|
+
* 4 conversions
|
15
|
+
from: after(:each) { }
|
16
|
+
to: after(:example) { }
|
17
|
+
|
18
|
+
* 1 conversion
|
19
|
+
from: after(:all) { }
|
20
|
+
to: after(:context) { }
|
21
|
+
|
22
|
+
* 1 conversion
|
23
|
+
from: before(:all) { }
|
24
|
+
to: before(:context) { }
|
25
|
+
|
26
|
+
* 1 conversion
|
27
|
+
from: obj.stub(:message => value)
|
28
|
+
to: allow(obj).to receive_messages(:message => value)
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Convert specs to RSpec 3.0.0.beta2 syntax with Transpec
|
2
|
+
|
3
|
+
This conversion is done by Transpec 1.11.1 with the following command:
|
4
|
+
transpec --force --convert example_group,hook_scope
|
5
|
+
|
6
|
+
* 54 conversions
|
7
|
+
from: describe 'something' { }
|
8
|
+
to: RSpec.describe 'something' { }
|
9
|
+
|
10
|
+
* 1 conversion
|
11
|
+
from: after(:all) { }
|
12
|
+
to: after(:context) { }
|
13
|
+
|
14
|
+
* 1 conversion
|
15
|
+
from: before(:all) { }
|
16
|
+
to: before(:context) { }
|
data/tasks/lib/demo.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require_relative 'project'
|
4
|
+
|
5
|
+
class Demo < Project
|
6
|
+
DEMO_BRANCH = 'transpec-demo'
|
7
|
+
|
8
|
+
def self.base_dir_path
|
9
|
+
File.join('tmp', 'demo')
|
10
|
+
end
|
11
|
+
|
12
|
+
def run
|
13
|
+
puts " Publishing conversion example of #{name} project ".center(80, '=')
|
14
|
+
|
15
|
+
setup
|
16
|
+
|
17
|
+
in_project_dir do
|
18
|
+
transpec '--force', '--convert', 'stub_with_hash'
|
19
|
+
sh 'bundle exec rspec'
|
20
|
+
sh "git checkout --quiet -b #{DEMO_BRANCH}"
|
21
|
+
sh 'git commit -aF .git/COMMIT_EDITMSG'
|
22
|
+
sh "git push --force origin #{DEMO_BRANCH}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def transpec(*args)
|
29
|
+
sh File.join(Transpec.root, 'bin', 'transpec'), *args
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup_from_remote
|
33
|
+
FileUtils.rm_rf(project_dir) if Dir.exist?(project_dir)
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
def shallow_clone?
|
38
|
+
false
|
39
|
+
end
|
40
|
+
|
41
|
+
def git_local_branch_exist?(branch)
|
42
|
+
in_project_dir do
|
43
|
+
system('git', 'show-ref', '--verify', '--quiet', "refs/heads/#{branch}")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'transpec'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
class Project
|
7
|
+
include FileUtils # This is Rake's one.
|
8
|
+
|
9
|
+
BUNDLER_RETRY_COUNT = 3
|
10
|
+
|
11
|
+
attr_reader :url, :ref, :bundler_args
|
12
|
+
|
13
|
+
def self.base_dir
|
14
|
+
@base_dir ||= begin
|
15
|
+
path = base_dir_path
|
16
|
+
FileUtils.mkdir_p(path) unless Dir.exist?(path)
|
17
|
+
path
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.base_dir_path
|
22
|
+
File.join(Transpec.root, 'tmp', 'test')
|
23
|
+
end
|
24
|
+
|
25
|
+
def initialize(url, ref = nil, bundler_args = [])
|
26
|
+
@url = url
|
27
|
+
@ref = ref
|
28
|
+
@bundler_args = bundler_args
|
29
|
+
end
|
30
|
+
|
31
|
+
def name
|
32
|
+
@name ||= File.basename(url, '.git')
|
33
|
+
end
|
34
|
+
|
35
|
+
def project_dir
|
36
|
+
@project_dir ||= File.join(self.class.base_dir, name)
|
37
|
+
end
|
38
|
+
|
39
|
+
def in_project_dir
|
40
|
+
Dir.chdir(project_dir) do
|
41
|
+
with_clean_bundler_env do
|
42
|
+
yield
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def git(*args)
|
48
|
+
in_project_dir do
|
49
|
+
sh 'git', *args
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def setup
|
56
|
+
if url.start_with?('/')
|
57
|
+
setup_from_local
|
58
|
+
else
|
59
|
+
setup_from_remote
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def setup_from_local
|
64
|
+
FileUtils.rm_rf(project_dir) if Dir.exist?(project_dir)
|
65
|
+
Dir.mkdir(project_dir)
|
66
|
+
|
67
|
+
Dir.chdir(url) do
|
68
|
+
Dir.new('.').each do |entry|
|
69
|
+
next if ['.', '..', 'tmp'].include?(entry)
|
70
|
+
FileUtils.cp_r(entry, project_dir)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
bundle_install
|
75
|
+
end
|
76
|
+
|
77
|
+
def setup_from_remote
|
78
|
+
if Dir.exist?(project_dir)
|
79
|
+
git 'checkout', '.'
|
80
|
+
git 'checkout', ref
|
81
|
+
else
|
82
|
+
git_clone
|
83
|
+
bundle_install
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def git_clone
|
88
|
+
Dir.chdir(self.class.base_dir) do
|
89
|
+
# Disabling checkout here to suppress "detached HEAD" warning.
|
90
|
+
command = %w(git clone --no-checkout)
|
91
|
+
command.concat(%w(--depth 1)) if shallow_clone?
|
92
|
+
command.concat(['--branch', ref, url])
|
93
|
+
sh command.join(' ')
|
94
|
+
end
|
95
|
+
|
96
|
+
git 'checkout', '--quiet', ref
|
97
|
+
end
|
98
|
+
|
99
|
+
def shallow_clone?
|
100
|
+
true
|
101
|
+
end
|
102
|
+
|
103
|
+
def bundle_install
|
104
|
+
in_project_dir do
|
105
|
+
sh 'bundle', 'install', '--retry', BUNDLER_RETRY_COUNT.to_s, *bundler_args
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def with_clean_bundler_env
|
110
|
+
if defined?(Bundler)
|
111
|
+
Bundler.with_clean_env do
|
112
|
+
# Bundler.with_clean_env cleans environment variables
|
113
|
+
# which are set after bundler is loaded.
|
114
|
+
prepare_env
|
115
|
+
yield
|
116
|
+
end
|
117
|
+
else
|
118
|
+
prepare_env
|
119
|
+
yield
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def prepare_env
|
124
|
+
# Disable Coveralls.
|
125
|
+
ENV['CI'] = ENV['JENKINS_URL'] = ENV['COVERALLS_RUN_LOCALLY'] = nil
|
126
|
+
|
127
|
+
ENV['TRANSPEC_TEST'] = 'true'
|
128
|
+
end
|
129
|
+
end
|
data/tasks/lib/test.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
require 'rspec/expectations'
|
4
|
+
require_relative 'project'
|
5
|
+
|
6
|
+
class Test < Project
|
7
|
+
include RSpec::Matchers
|
8
|
+
|
9
|
+
attr_reader :simple
|
10
|
+
alias_method :simple?, :simple
|
11
|
+
|
12
|
+
def initialize(url, ref = nil, bundler_args = [], simple = false)
|
13
|
+
super(url, ref, bundler_args)
|
14
|
+
@simple = simple
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
puts " Testing transpec on #{name} project ".center(80, '=')
|
19
|
+
|
20
|
+
setup
|
21
|
+
|
22
|
+
in_project_dir do
|
23
|
+
transpec '--force'
|
24
|
+
sh 'bundle exec rspec'
|
25
|
+
return if simple?
|
26
|
+
compare_summary!('2.99.0')
|
27
|
+
|
28
|
+
add_rspec_3_to_gemfile
|
29
|
+
sh 'bundle update'
|
30
|
+
|
31
|
+
transpec '--force', '--convert', 'example_group,hook_scope'
|
32
|
+
sh 'bundle exec rspec'
|
33
|
+
compare_summary!('3.0.0')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def transpec(*args)
|
40
|
+
sh File.join(Transpec.root, 'bin', 'transpec'), *args
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_rspec_3_to_gemfile
|
44
|
+
gemfile = File.read('Gemfile')
|
45
|
+
|
46
|
+
pattern = /\bgem\s+['"]rspec.+/
|
47
|
+
rspec_3_specification = "gem 'rspec', '~> 3.0.0.beta1'"
|
48
|
+
|
49
|
+
if gemfile.match(pattern)
|
50
|
+
gemfile.sub!(pattern, rspec_3_specification)
|
51
|
+
else
|
52
|
+
gemfile << rspec_3_specification
|
53
|
+
end
|
54
|
+
|
55
|
+
File.write('Gemfile', gemfile)
|
56
|
+
end
|
57
|
+
|
58
|
+
def compare_summary!(key)
|
59
|
+
fixture_path = commit_message_fixture_path(key)
|
60
|
+
|
61
|
+
if File.exist?(fixture_path)
|
62
|
+
summary = summary_in_commit_message(File.read(commit_message_path))
|
63
|
+
expected_summary = summary_in_commit_message(File.read(fixture_path))
|
64
|
+
expect(summary).to eq(expected_summary)
|
65
|
+
else
|
66
|
+
warn "#{fixture_path} does not exist. Copying from #{commit_message_path}."
|
67
|
+
FileUtils.mkdir_p(File.dirname(fixture_path))
|
68
|
+
FileUtils.cp(commit_message_path, fixture_path)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def summary_in_commit_message(message)
|
73
|
+
message.lines.to_a[5..-1].join("\n")
|
74
|
+
end
|
75
|
+
|
76
|
+
def commit_message_path
|
77
|
+
File.join(project_dir, '.git', 'COMMIT_EDITMSG')
|
78
|
+
end
|
79
|
+
|
80
|
+
def commit_message_fixture_path(key)
|
81
|
+
path = File.join(Transpec.root, 'tasks', 'fixtures', name, key, 'COMMIT_EDITMSG')
|
82
|
+
File.expand_path(path)
|
83
|
+
end
|
84
|
+
end
|
data/tasks/test.rake
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
|
-
require_relative 'lib/
|
3
|
+
require_relative 'lib/test'
|
4
4
|
|
5
5
|
namespace :test do
|
6
6
|
# On Travis CI, reuse system gems to speed up build.
|
@@ -12,14 +12,14 @@ namespace :test do
|
|
12
12
|
|
13
13
|
# rubocop:disable LineLength
|
14
14
|
tests = [
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
Test.new(Transpec.root, nil, ['--quiet'], true),
|
16
|
+
Test.new('https://github.com/yujinakayama/twitter.git', 'transpec-test-rspec-2-99', bundler_args),
|
17
|
+
Test.new('https://github.com/yujinakayama/mail.git', 'transpec-test-rspec-2-99', bundler_args)
|
18
18
|
]
|
19
19
|
|
20
20
|
# Sometimes Guard fails with JRuby randomly.
|
21
21
|
unless RUBY_ENGINE == 'jruby'
|
22
|
-
tests <<
|
22
|
+
tests << Test.new('https://github.com/yujinakayama/guard.git', 'transpec-test-rspec-2-99', bundler_args + %w(--without development))
|
23
23
|
end
|
24
24
|
# rubocop:enable LineLength
|
25
25
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transpec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuji Nakayama
|
@@ -284,6 +284,7 @@ files:
|
|
284
284
|
- lib/transpec/syntax/have/dynamic_analysis.rb
|
285
285
|
- lib/transpec/syntax/have/have_record.rb
|
286
286
|
- lib/transpec/syntax/have/source_builder.rb
|
287
|
+
- lib/transpec/syntax/hook.rb
|
287
288
|
- lib/transpec/syntax/its.rb
|
288
289
|
- lib/transpec/syntax/matcher_definition.rb
|
289
290
|
- lib/transpec/syntax/method_stub.rb
|
@@ -347,6 +348,7 @@ files:
|
|
347
348
|
- spec/transpec/syntax/example_spec.rb
|
348
349
|
- spec/transpec/syntax/expect_spec.rb
|
349
350
|
- spec/transpec/syntax/have_spec.rb
|
351
|
+
- spec/transpec/syntax/hook_spec.rb
|
350
352
|
- spec/transpec/syntax/its_spec.rb
|
351
353
|
- spec/transpec/syntax/matcher_definition_spec.rb
|
352
354
|
- spec/transpec/syntax/method_stub_spec.rb
|
@@ -362,11 +364,15 @@ files:
|
|
362
364
|
- spec/transpec_spec.rb
|
363
365
|
- tasks/ci/spec.rake
|
364
366
|
- tasks/demo.rake
|
365
|
-
- tasks/fixtures/guard/COMMIT_EDITMSG
|
366
|
-
- tasks/fixtures/
|
367
|
-
- tasks/fixtures/
|
368
|
-
- tasks/
|
369
|
-
- tasks/
|
367
|
+
- tasks/fixtures/guard/2.99.0/COMMIT_EDITMSG
|
368
|
+
- tasks/fixtures/guard/3.0.0/COMMIT_EDITMSG
|
369
|
+
- tasks/fixtures/mail/2.99.0/COMMIT_EDITMSG
|
370
|
+
- tasks/fixtures/mail/3.0.0/COMMIT_EDITMSG
|
371
|
+
- tasks/fixtures/twitter/2.99.0/COMMIT_EDITMSG
|
372
|
+
- tasks/fixtures/twitter/3.0.0/COMMIT_EDITMSG
|
373
|
+
- tasks/lib/demo.rb
|
374
|
+
- tasks/lib/project.rb
|
375
|
+
- tasks/lib/test.rb
|
370
376
|
- tasks/readme.rake
|
371
377
|
- tasks/test.rake
|
372
378
|
- transpec.gemspec
|
@@ -428,6 +434,7 @@ test_files:
|
|
428
434
|
- spec/transpec/syntax/example_spec.rb
|
429
435
|
- spec/transpec/syntax/expect_spec.rb
|
430
436
|
- spec/transpec/syntax/have_spec.rb
|
437
|
+
- spec/transpec/syntax/hook_spec.rb
|
431
438
|
- spec/transpec/syntax/its_spec.rb
|
432
439
|
- spec/transpec/syntax/matcher_definition_spec.rb
|
433
440
|
- spec/transpec/syntax/method_stub_spec.rb
|
data/tasks/lib/transpec_demo.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
require_relative 'transpec_test'
|
4
|
-
|
5
|
-
class TranspecDemo < TranspecTest
|
6
|
-
DEMO_BRANCH = 'transpec-demo'
|
7
|
-
|
8
|
-
def self.base_dir_path
|
9
|
-
@base_dir_path = File.join('tmp', 'demos')
|
10
|
-
end
|
11
|
-
|
12
|
-
def run
|
13
|
-
require 'transpec'
|
14
|
-
|
15
|
-
puts " Publishing conversion example of #{name} project ".center(80, '=')
|
16
|
-
|
17
|
-
prepare_project
|
18
|
-
run_demo
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def prepare_with_git_repo
|
24
|
-
super
|
25
|
-
git_branch_delete(DEMO_BRANCH) if git_local_branch_exist?(DEMO_BRANCH)
|
26
|
-
end
|
27
|
-
|
28
|
-
def shallow_clone?
|
29
|
-
false
|
30
|
-
end
|
31
|
-
|
32
|
-
def run_demo(transpec_args = [])
|
33
|
-
in_project_dir do
|
34
|
-
with_clean_bundler_env do
|
35
|
-
sh File.join(Transpec.root, 'bin', 'transpec'), '--force', '--convert', 'stub_with_hash'
|
36
|
-
sh 'bundle exec rspec'
|
37
|
-
sh "git checkout --quiet -b #{DEMO_BRANCH}"
|
38
|
-
sh 'git commit --all --file .git/COMMIT_EDITMSG'
|
39
|
-
sh "git push --force origin #{DEMO_BRANCH}"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def git_local_branch_exist?(branch_name)
|
45
|
-
in_project_dir do
|
46
|
-
system('git', 'show-ref', '--verify', '--quiet', "refs/heads/#{branch_name}")
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def git_branch_delete(branch_name)
|
51
|
-
in_project_dir do
|
52
|
-
sh "git branch -D #{branch_name}"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
data/tasks/lib/transpec_test.rb
DELETED
@@ -1,181 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
class TranspecTest # rubocop:disable ClassLength
|
4
|
-
include FileUtils # This is Rake's one.
|
5
|
-
|
6
|
-
BUNDLER_RETRY_COUNT = 3
|
7
|
-
|
8
|
-
attr_reader :url, :ref, :bundler_args
|
9
|
-
|
10
|
-
def self.base_dir
|
11
|
-
@base_dir ||= begin
|
12
|
-
unless Dir.exist?(base_dir_path)
|
13
|
-
require 'fileutils'
|
14
|
-
FileUtils.mkdir_p(base_dir_path)
|
15
|
-
end
|
16
|
-
|
17
|
-
base_dir_path
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.base_dir_path
|
22
|
-
@base_dir_path = File.join('tmp', 'tests')
|
23
|
-
end
|
24
|
-
|
25
|
-
def initialize(url, ref = nil, bundler_args = [])
|
26
|
-
@url = url
|
27
|
-
@ref = ref
|
28
|
-
@bundler_args = bundler_args
|
29
|
-
end
|
30
|
-
|
31
|
-
def name
|
32
|
-
@name ||= File.basename(url, '.git')
|
33
|
-
end
|
34
|
-
|
35
|
-
def project_dir
|
36
|
-
@project_dir ||= File.join(self.class.base_dir, name)
|
37
|
-
end
|
38
|
-
|
39
|
-
def run
|
40
|
-
require 'transpec'
|
41
|
-
puts " Testing transpec on #{name} project ".center(80, '=')
|
42
|
-
prepare_project
|
43
|
-
run_test(%w(--force))
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def prepare_project
|
49
|
-
if url.start_with?('/')
|
50
|
-
prepare_with_local_dir
|
51
|
-
else
|
52
|
-
prepare_with_git_repo
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def prepare_with_local_dir
|
57
|
-
if Dir.exist?(project_dir)
|
58
|
-
require 'fileutils'
|
59
|
-
FileUtils.rm_rf(project_dir)
|
60
|
-
end
|
61
|
-
|
62
|
-
Dir.mkdir(project_dir)
|
63
|
-
|
64
|
-
Dir.chdir(url) do
|
65
|
-
Dir.new('.').each do |entry|
|
66
|
-
next if ['.', '..', 'tmp'].include?(entry)
|
67
|
-
FileUtils.cp_r(entry, project_dir)
|
68
|
-
end
|
69
|
-
|
70
|
-
spec_cache_dir = File.join('tmp', 'spec_cache')
|
71
|
-
|
72
|
-
if Dir.exist?(spec_cache_dir)
|
73
|
-
Dir.mkdir(File.join(project_dir, 'tmp'))
|
74
|
-
FileUtils.cp_r(spec_cache_dir, File.join(project_dir, spec_cache_dir))
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
bundle_install
|
79
|
-
end
|
80
|
-
|
81
|
-
def prepare_with_git_repo
|
82
|
-
if Dir.exist?(project_dir)
|
83
|
-
git_checkout(ref) unless current_ref == ref
|
84
|
-
git_checkout('.')
|
85
|
-
else
|
86
|
-
git_clone
|
87
|
-
bundle_install
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
def run_test(transpec_args = [])
|
92
|
-
in_project_dir do
|
93
|
-
with_clean_bundler_env do
|
94
|
-
sh File.join(Transpec.root, 'bin', 'transpec'), *transpec_args
|
95
|
-
sh 'bundle exec rspec'
|
96
|
-
compare_summary!
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def compare_summary!
|
102
|
-
unless File.exist?(commit_message_fixture_path)
|
103
|
-
warn "#{commit_message_fixture_path} does not exist. Skipping summary comparison."
|
104
|
-
return
|
105
|
-
end
|
106
|
-
|
107
|
-
require 'rspec/expectations'
|
108
|
-
extend RSpec::Matchers
|
109
|
-
summary = File.read(File.join('.git', 'COMMIT_EDITMSG')).lines.to_a[5..-1]
|
110
|
-
expected_summary = File.read(commit_message_fixture_path).lines.to_a[5..-1]
|
111
|
-
expect(summary).to eq(expected_summary)
|
112
|
-
end
|
113
|
-
|
114
|
-
def commit_message_fixture_path
|
115
|
-
path = File.join(File.dirname(__FILE__), '..', 'fixtures', name, 'COMMIT_EDITMSG')
|
116
|
-
File.expand_path(path)
|
117
|
-
end
|
118
|
-
|
119
|
-
def in_project_dir(&block)
|
120
|
-
Dir.chdir(project_dir, &block)
|
121
|
-
end
|
122
|
-
|
123
|
-
def current_ref
|
124
|
-
in_project_dir do
|
125
|
-
`git describe --all`.chomp.sub(/\Aheads\//, '')
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
def git_checkout(*args)
|
130
|
-
in_project_dir do
|
131
|
-
sh 'git', 'checkout', *args
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def git_clone
|
136
|
-
Dir.chdir(self.class.base_dir) do
|
137
|
-
# Disabling checkout here to suppress "detached HEAD" warning.
|
138
|
-
command = %w(git clone --no-checkout)
|
139
|
-
command.concat(%w(--depth 1)) if shallow_clone?
|
140
|
-
command.concat(['--branch', ref, url])
|
141
|
-
sh command.join(' ')
|
142
|
-
end
|
143
|
-
|
144
|
-
in_project_dir do
|
145
|
-
sh "git checkout --quiet #{ref}"
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
def shallow_clone?
|
150
|
-
true
|
151
|
-
end
|
152
|
-
|
153
|
-
def bundle_install
|
154
|
-
in_project_dir do
|
155
|
-
with_clean_bundler_env do
|
156
|
-
sh 'bundle', 'install', '--retry', BUNDLER_RETRY_COUNT.to_s, *bundler_args
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
def with_clean_bundler_env
|
162
|
-
if defined?(Bundler)
|
163
|
-
Bundler.with_clean_env do
|
164
|
-
# Bundler.with_clean_env cleans environment variables
|
165
|
-
# which are set after bundler is loaded.
|
166
|
-
prepare_env
|
167
|
-
yield
|
168
|
-
end
|
169
|
-
else
|
170
|
-
prepare_env
|
171
|
-
yield
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
def prepare_env
|
176
|
-
# Disable Coveralls.
|
177
|
-
ENV['CI'] = ENV['JENKINS_URL'] = ENV['COVERALLS_RUN_LOCALLY'] = nil
|
178
|
-
|
179
|
-
ENV['TRANSPEC_TEST'] = 'true'
|
180
|
-
end
|
181
|
-
end
|