transpec 0.1.2 → 0.1.3

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.
@@ -14,15 +14,12 @@ module Transpec
14
14
  return BeClose.new(
15
15
  node,
16
16
  ancestor_nodes,
17
- in_example_group_context?,
18
17
  source_rewriter
19
18
  )
20
19
  end
21
20
  fail 'No be_close node is found!'
22
21
  end
23
22
 
24
- let(:in_example_group_context?) { true }
25
-
26
23
  describe '#convert_to_be_within!' do
27
24
  context 'when it is `be_close(expected, delta)` form' do
28
25
  let(:source) do
@@ -14,15 +14,12 @@ module Transpec
14
14
  return Double.new(
15
15
  node,
16
16
  ancestor_nodes,
17
- in_example_group_context?,
18
17
  source_rewriter
19
18
  )
20
19
  end
21
20
  fail 'No double node is found!'
22
21
  end
23
22
 
24
- let(:in_example_group_context?) { true }
25
-
26
23
  describe '#method_name' do
27
24
  let(:source) do
28
25
  <<-END
@@ -10,11 +10,9 @@ module Transpec
10
10
  include_context 'should object'
11
11
 
12
12
  subject(:matcher) do
13
- Matcher.new(should_object.matcher_node, in_example_group_context?, source_rewriter)
13
+ Matcher.new(should_object.matcher_node, source_rewriter)
14
14
  end
15
15
 
16
- let(:in_example_group_context?) { true }
17
-
18
16
  describe '#method_name' do
19
17
  context 'when it is operator matcher' do
20
18
  let(:source) do
@@ -133,6 +131,88 @@ module Transpec
133
131
  end
134
132
  end
135
133
 
134
+ context 'when it is `==1` form' do
135
+ let(:source) do
136
+ <<-END
137
+ it 'is 1' do
138
+ subject.should==1
139
+ end
140
+ END
141
+ end
142
+
143
+ let(:expected_source) do
144
+ <<-END
145
+ it 'is 1' do
146
+ subject.should eq(1)
147
+ end
148
+ END
149
+ end
150
+
151
+ it 'converts into `eq(1)` form' do
152
+ rewritten_source.should == expected_source
153
+ end
154
+
155
+ context 'and false is passed as `parenthesize_arg` argument' do
156
+ let(:parenthesize_arg) { false }
157
+
158
+ let(:expected_source) do
159
+ <<-END
160
+ it 'is 1' do
161
+ subject.should eq 1
162
+ end
163
+ END
164
+ end
165
+
166
+ it 'converts into `eq 1` form' do
167
+ rewritten_source.should == expected_source
168
+ end
169
+ end
170
+ end
171
+
172
+ context 'when it is `be == 1` form' do
173
+ let(:source) do
174
+ <<-END
175
+ it 'is 1' do
176
+ subject.should be == 1
177
+ end
178
+ END
179
+ end
180
+
181
+ let(:expected_source) do
182
+ <<-END
183
+ it 'is 1' do
184
+ subject.should eq(1)
185
+ end
186
+ END
187
+ end
188
+
189
+ it 'converts into `eq(1)` form' do
190
+ rewritten_source.should == expected_source
191
+ end
192
+ end
193
+
194
+ context 'when it is `be.==(1)` form' do
195
+ let(:source) do
196
+ <<-END
197
+ it 'is 1' do
198
+ subject.should be.==(1)
199
+ end
200
+ END
201
+ end
202
+
203
+ let(:expected_source) do
204
+ <<-END
205
+ it 'is 1' do
206
+ subject.should eq(1)
207
+ end
208
+ END
209
+ end
210
+
211
+ it 'converts into `eq(1)` form' do
212
+ rewritten_source.should == expected_source
213
+ end
214
+ end
215
+
136
216
  context 'when it is `== (2 - 1)` form' do
137
217
  let(:source) do
138
218
  <<-END
@@ -273,6 +353,50 @@ module Transpec
273
353
  end
274
354
  end
275
355
 
356
+ context 'when it is `=~/pattern/` form' do
357
+ let(:source) do
358
+ <<-END
359
+ it 'matches the pattern' do
360
+ subject.should=~/pattern/
361
+ end
362
+ END
363
+ end
364
+
365
+ let(:expected_source) do
366
+ <<-END
367
+ it 'matches the pattern' do
368
+ subject.should match(/pattern/)
369
+ end
370
+ END
371
+ end
372
+
373
+ it 'converts into `match(/pattern/)` form' do
374
+ rewritten_source.should == expected_source
375
+ end
376
+ end
377
+
378
+ context 'when it is `be =~ /pattern/` form' do
379
+ let(:source) do
380
+ <<-END
381
+ it 'matches the pattern' do
382
+ subject.should be =~ /pattern/
383
+ end
384
+ END
385
+ end
386
+
387
+ let(:expected_source) do
388
+ <<-END
389
+ it 'matches the pattern' do
390
+ subject.should match(/pattern/)
391
+ end
392
+ END
393
+ end
394
+
395
+ it 'converts into `match(/pattern/)` form' do
396
+ rewritten_source.should == expected_source
397
+ end
398
+ end
399
+
276
400
  context 'when it is `=~ [1, 2]` form' do
277
401
  let(:source) do
278
402
  <<-END
@@ -294,6 +418,50 @@ module Transpec
294
418
  rewritten_source.should == expected_source
295
419
  end
296
420
  end
421
+
422
+ context 'when it is `=~[1, 2]` form' do
423
+ let(:source) do
424
+ <<-END
425
+ it 'contains 1 and 2' do
426
+ subject.should=~[1, 2]
427
+ end
428
+ END
429
+ end
430
+
431
+ let(:expected_source) do
432
+ <<-END
433
+ it 'contains 1 and 2' do
434
+ subject.should match_array([1, 2])
435
+ end
436
+ END
437
+ end
438
+
439
+ it 'converts into `match_array([1, 2])` form' do
440
+ rewritten_source.should == expected_source
441
+ end
442
+ end
443
+
444
+ context 'when it is `be =~ [1, 2]` form' do
445
+ let(:source) do
446
+ <<-END
447
+ it 'contains 1 and 2' do
448
+ subject.should be =~ [1, 2]
449
+ end
450
+ END
451
+ end
452
+
453
+ let(:expected_source) do
454
+ <<-END
455
+ it 'contains 1 and 2' do
456
+ subject.should match_array([1, 2])
457
+ end
458
+ END
459
+ end
460
+
461
+ it 'converts into `match_array([1, 2])` form' do
462
+ rewritten_source.should == expected_source
463
+ end
464
+ end
297
465
  end
298
466
 
299
467
  describe '#parenthesize!' do
@@ -14,15 +14,12 @@ module Transpec
14
14
  return MethodStub.new(
15
15
  node,
16
16
  ancestor_nodes,
17
- in_example_group_context?,
18
17
  source_rewriter
19
18
  )
20
19
  end
21
20
  fail 'No method stub node is found!'
22
21
  end
23
22
 
24
- let(:in_example_group_context?) { true }
25
-
26
23
  describe '.target_node?' do
27
24
  let(:send_node) do
28
25
  ast.each_descendent_node do |node|
@@ -61,6 +58,20 @@ module Transpec
61
58
  MethodStub.target_node?(send_node).should be_false
62
59
  end
63
60
  end
61
+
62
+ context 'when #stub node with Excon receiver is passed' do
63
+ let(:source) do
64
+ <<-END
65
+ it "is not RSpec's #stub" do
66
+ ::Excon.stub({}, {:body => 'body', :status => 200})
67
+ end
68
+ END
69
+ end
70
+
71
+ it 'returns false' do
72
+ MethodStub.target_node?(send_node).should be_false
73
+ end
74
+ end
64
75
  end
65
76
 
66
77
  describe '#method_name' do
@@ -78,6 +89,10 @@ module Transpec
78
89
  end
79
90
 
80
91
  describe '#allowize!' do
92
+ before do
93
+ method_stub_object.context.stub(:in_example_group?).and_return(true)
94
+ end
95
+
81
96
  [:stub, :stub!].each do |method|
82
97
  context "when it is `subject.#{method}(:method)` form" do
83
98
  let(:source) do
@@ -359,6 +374,10 @@ module Transpec
359
374
  end
360
375
 
361
376
  describe '#replace_deprecated_method!' do
377
+ before do
378
+ method_stub_object.context.stub(:in_example_group?).and_return(true)
379
+ end
380
+
362
381
  [
363
382
  [:stub!, :stub, 'responds to'],
364
383
  [:unstub!, :unstub, 'does not respond to']
@@ -14,15 +14,12 @@ module Transpec
14
14
  return RaiseError.new(
15
15
  node,
16
16
  ancestor_nodes,
17
- in_example_group_context?,
18
17
  source_rewriter
19
18
  )
20
19
  end
21
20
  fail 'No raise_error node is found!'
22
21
  end
23
22
 
24
- let(:in_example_group_context?) { true }
25
-
26
23
  describe '#remove_error_specification_with_negative_expectation!' do
27
24
  before do
28
25
  raise_error_object.remove_error_specification_with_negative_expectation!
@@ -14,15 +14,12 @@ module Transpec
14
14
  return RSpecConfigure.new(
15
15
  node,
16
16
  ancestor_nodes,
17
- in_example_group_context?,
18
17
  source_rewriter
19
18
  )
20
19
  end
21
20
  fail 'No RSpec.configure node is found!'
22
21
  end
23
22
 
24
- let(:in_example_group_context?) { true }
25
-
26
23
  [
27
24
  [:expectation_syntaxes, :expect_with, 'RSpec::Matchers::Configuration'],
28
25
  [:mock_syntaxes, :mock_with, 'RSpec::Mocks::Configuration']
@@ -14,14 +14,15 @@ module Transpec
14
14
  return ShouldReceive.new(
15
15
  node,
16
16
  ancestor_nodes,
17
- in_example_group_context?,
18
17
  source_rewriter
19
18
  )
20
19
  end
21
20
  fail 'No should_receive node is found!'
22
21
  end
23
22
 
24
- let(:in_example_group_context?) { true }
23
+ before do
24
+ should_receive_object.context.stub(:in_example_group?).and_return(true)
25
+ end
25
26
 
26
27
  describe '#expectize!' do
27
28
  context 'when it is `subject.should_receive(:method)` form' do
@@ -9,6 +9,10 @@ module Transpec
9
9
  include_context 'parsed objects'
10
10
  include_context 'should object'
11
11
 
12
+ before do
13
+ should_object.context.stub(:in_example_group?).and_return(true)
14
+ end
15
+
12
16
  describe '#matcher_node' do
13
17
  context 'when it is taking operator matcher' do
14
18
  let(:source) do
@@ -0,0 +1,14 @@
1
+ # coding: utf-8
2
+
3
+ namespace :ci do
4
+ desc "#{Rake::Task['spec'].comment} for CI environment"
5
+ task :spec do
6
+ ENV['CI'] = 'true'
7
+
8
+ ENV['CI_REPORTS'] = 'spec/reports'
9
+ require 'ci/reporter/rake/rspec'
10
+ Rake::Task['ci:setup:rspec'].invoke
11
+
12
+ Rake::Task['spec'].invoke
13
+ end
14
+ end
@@ -0,0 +1,18 @@
1
+ # coding: utf-8
2
+
3
+ desc 'Generate README.md'
4
+ task :readme do
5
+ require 'erb'
6
+ require 'transpec/cli'
7
+
8
+ gem_specification = Gem::Specification.load('transpec.gemspec')
9
+ rspec_dependency = gem_specification.dependencies.find { |d| d.name == 'rspec' }
10
+ rspec_requirement = rspec_dependency.requirement
11
+ # rubocop:disable UselessAssignment
12
+ rspec_version = rspec_requirement.requirements.first.find { |r| r.is_a?(Gem::Version) }
13
+ # rubocop:enable UselessAssignment
14
+
15
+ erb = ERB.new(File.read('README.md.erb'), nil, '-')
16
+ content = erb.result(binding)
17
+ File.write('README.md', content)
18
+ end
@@ -0,0 +1,164 @@
1
+ # coding: utf-8
2
+
3
+ class TranspecTest
4
+ include FileUtils # This is Rake's one.
5
+
6
+ attr_reader :url, :ref, :bundler_args
7
+
8
+ def self.base_dir
9
+ @base_dir ||= begin
10
+ base_dir = File.join('tmp', 'projects')
11
+
12
+ unless Dir.exist?(base_dir)
13
+ require 'fileutils'
14
+ FileUtils.mkdir_p(base_dir)
15
+ end
16
+
17
+ base_dir
18
+ end
19
+ end
20
+
21
+ def initialize(url, ref = nil, bundler_args = [])
22
+ @url = url
23
+ @ref = ref
24
+ @bundler_args = bundler_args
25
+ end
26
+
27
+ def name
28
+ @name ||= File.basename(url, '.git')
29
+ end
30
+
31
+ def project_dir
32
+ @project_dir ||= File.join(self.class.base_dir, name)
33
+ end
34
+
35
+ def run
36
+ require 'transpec'
37
+
38
+ puts " Testing on #{name} Project ".center(80, '=')
39
+
40
+ prepare_project
41
+
42
+ in_project_dir do
43
+ with_clean_bundler_env do
44
+ sh 'bundle', 'install', *bundler_args
45
+ sh File.join(Transpec.root, 'bin', 'transpec'), '--force'
46
+ sh 'bundle exec rspec'
47
+ end
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ def prepare_project
54
+ if url.start_with?('/')
55
+ prepare_with_local_dir
56
+ else
57
+ prepare_with_git_repo
58
+ end
59
+ end
60
+
61
+ def prepare_with_local_dir
62
+ if Dir.exist?(project_dir)
63
+ require 'fileutils'
64
+ FileUtils.rm_rf(project_dir)
65
+ end
66
+
67
+ Dir.mkdir(project_dir)
68
+
69
+ Dir.chdir(url) do
70
+ Dir.new('.').each do |entry|
71
+ next if ['.', '..', '.git', 'tmp'].include?(entry)
72
+ FileUtils.cp_r(entry, project_dir)
73
+ end
74
+ end
75
+ end
76
+
77
+ def prepare_with_git_repo
78
+ if Dir.exist?(project_dir)
79
+ if current_ref == ref
80
+ git_reset_hard
81
+ else
82
+ require 'fileutils'
83
+ FileUtils.rm_rf(project_dir)
84
+ git_clone
85
+ end
86
+ else
87
+ git_clone
88
+ end
89
+ end
90
+
91
+ def in_project_dir(&block)
92
+ Dir.chdir(project_dir, &block)
93
+ end
94
+
95
+ def current_ref
96
+ in_project_dir do
97
+ `git describe --all`.chomp.sub(/\Aheads\//, '')
98
+ end
99
+ end
100
+
101
+ def git_reset_hard
102
+ in_project_dir do
103
+ sh 'git reset --hard'
104
+ end
105
+ end
106
+
107
+ def git_clone
108
+ Dir.chdir(self.class.base_dir) do
109
+ # Disabling checkout here to suppress "detached HEAD" warning.
110
+ sh "git clone --no-checkout --depth 1 --branch #{ref} #{url}"
111
+ end
112
+
113
+ in_project_dir do
114
+ sh "git checkout --quiet #{ref}"
115
+ end
116
+ end
117
+
118
+ def with_clean_bundler_env
119
+ if defined?(Bundler)
120
+ Bundler.with_clean_env do
121
+ # Bundler.with_clean_env cleans environment variables
122
+ # which are set after bundler is loaded.
123
+ prepare_env
124
+ yield
125
+ end
126
+ else
127
+ prepare_env
128
+ yield
129
+ end
130
+ end
131
+
132
+ def prepare_env
133
+ # Disable Coveralls.
134
+ ENV['CI'] = ENV['JENKINS_URL'] = ENV['COVERALLS_RUN_LOCALLY'] = nil
135
+ end
136
+ end
137
+
138
+ namespace :test do
139
+ # On Travis CI, reuse system gems to speed up build.
140
+ bundler_args = if ENV['TRAVIS']
141
+ []
142
+ else
143
+ %w(--path vendor/bundle)
144
+ end
145
+
146
+ # rubocop:disable LineLength
147
+ tests = [
148
+ TranspecTest.new(File.expand_path('.'), nil, []),
149
+ TranspecTest.new('https://github.com/sferik/twitter.git', 'v4.1.0', bundler_args),
150
+ TranspecTest.new('https://github.com/yujinakayama/guard.git', 'transpec', bundler_args + %w(--without development)),
151
+ TranspecTest.new('https://github.com/yujinakayama/mail.git', 'transpec', bundler_args)
152
+ ]
153
+ # rubocop:enable LineLength
154
+
155
+ desc 'Test Transpec on all projects'
156
+ task all: tests.map(&:name)
157
+
158
+ tests.each do |test|
159
+ desc "Test Transpec on #{test.name.capitalize} project"
160
+ task test.name do
161
+ test.run
162
+ end
163
+ end
164
+ end