dcadenas-rspec2rr 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ History.txt
2
+ README.rdoc
3
+ Manifest.txt
4
+ Rakefile
5
+ bin/rspec2rr
6
+ lib/rspec2rr.rb
7
+ rspec2rr.gemspec
8
+ spec/integration/rspec2rr_spec.rb
9
+ spec/unit/rspec2rr_spec.rb
@@ -0,0 +1,15 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require 'spec/rake/spectask'
6
+ require './lib/rspec2rr.rb'
7
+
8
+ Hoe.new('rspec2rr', RSpec2RR::VERSION) do |p|
9
+ p.developer('Daniel Cadenas', 'dcadenas@gmail.com')
10
+ end
11
+
12
+ Spec::Rake::SpecTask.new do |t|
13
+ end
14
+
15
+ # vim: syntax=Ruby
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/ruby
2
+ $: << File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+ require 'lib/rspec2rr'
4
+
5
+ Dir['spec/**/*_spec.rb'].each do |filename|
6
+ puts "Converting #{filename}"
7
+ content = File.read(filename)
8
+ result = RSpec2RR.to_rr(content)
9
+ if result != content
10
+ File.open(filename, 'w') do |f|
11
+ f << result
12
+ end
13
+ end
14
+ end
15
+ puts
16
+ puts "Done"
@@ -0,0 +1,33 @@
1
+ class RSpec2RR
2
+ VERSION = '0.1.0'
3
+
4
+ def self.to_rr spec
5
+ return unless spec
6
+ spec = convert_stub(spec)
7
+ spec = convert_should_receive(spec)
8
+ spec = convert_should_not_receive(spec)
9
+ spec = convert_with(spec)
10
+ spec = convert_and_return(spec)
11
+ spec
12
+ end
13
+
14
+ def self.convert_stub(spec)
15
+ spec.gsub(/([\S]+)\.stub!\(:?([^\)]+)\)(.*)/, 'stub(\1).\2\3')
16
+ end
17
+
18
+ def self.convert_should_receive(spec)
19
+ spec.gsub(/([\S]+)\.should_receive\(:?([^\)]+)\)(.*)/, 'mock(\1).\2\3')
20
+ end
21
+
22
+ def self.convert_should_not_receive(spec)
23
+ spec.gsub(/([\S]+)\.should_not_receive\(:?([^\)]+)\)(.*)/, 'dont_allow(\1).\2\3')
24
+ end
25
+
26
+ def self.convert_with(spec)
27
+ spec.gsub(/((stub|mock|dont_allow).+)\.with\((.+)\)(.*)/, '\1(\3)\4')
28
+ end
29
+
30
+ def self.convert_and_return(spec)
31
+ spec.gsub(/\.and_return(.+)(.*)/, ' {\1}\2').gsub(/\{\((.+)\)\}/, '{\1}')
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "rspec2rr"
3
+ s.version = "0.1.0"
4
+ s.date = "2008-11-10"
5
+ s.summary = "Helps converting from rspec doubles to rr doubles"
6
+ s.email = "dcadenas@gmail.com"
7
+ s.homepage = "http://github.com/dcadenas/rspec2rr"
8
+ s.description = "rspec2rr is a Ruby script that helps you in the migration process from rspec dobules ro rr trying to reduce your manual work"
9
+ s.has_rdoc = false
10
+ s.authors = ["Daniel Cadenas"]
11
+ s.files = [ "Manifest.txt",
12
+ "README.txt",
13
+ "Rakefile",
14
+ "rspec2rr.gemspec",
15
+ "lib/rspec2rr.rb",
16
+ "bin/rspec2rr"]
17
+ s.test_files = ["spec/unit/rspec2rr_spec.rb",
18
+ "spec/integration/rspec2rr_spec.rb"]
19
+ end
@@ -0,0 +1,72 @@
1
+ $: << File.expand_path(File.join(File.dirname(__FILE__), '../..'))
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'lib/rspec2rr'
6
+ require 'filetesthelper'
7
+
8
+ include FileTestHelper
9
+
10
+ def spec_file_content
11
+ <<-SPECFILECONTENT
12
+ a_string = 'this line is here just to represent a line that should not be changed by rspec2rr'
13
+
14
+ a.stub!(:asdf).with(1234)
15
+ b.stub!(:asdf)
16
+ b.should_not_receive(:asdf).with(1234)
17
+ b.should_not_receive(:asdf)
18
+ AModule::AClass.should_receive(:asdf).with(1234)
19
+ AModule::AClass.should_receive(:asdf)
20
+
21
+ a_string = 'this line is here just to represent a line that should not be changed by rspec2rr'
22
+ a_string = 'this line is here just to represent a line that should not be changed by rspec2rr'
23
+ SPECFILECONTENT
24
+ end
25
+
26
+ def expected_spec_file_content
27
+ <<-EXPECTEDSPECFILECONTENT
28
+ a_string = 'this line is here just to represent a line that should not be changed by rspec2rr'
29
+
30
+ stub(a).asdf(1234)
31
+ stub(b).asdf
32
+ dont_allow(b).asdf(1234)
33
+ dont_allow(b).asdf
34
+ mock(AModule::AClass).asdf(1234)
35
+ mock(AModule::AClass).asdf
36
+
37
+ a_string = 'this line is here just to represent a line that should not be changed by rspec2rr'
38
+ a_string = 'this line is here just to represent a line that should not be changed by rspec2rr'
39
+ EXPECTEDSPECFILECONTENT
40
+ end
41
+
42
+ TOOLPATH = File.expand_path(File.join(File.dirname(__FILE__), '..' , '..', 'bin' , 'rspec2rr'))
43
+
44
+ def run_rspec2rr
45
+ `#{TOOLPATH}`
46
+ end
47
+
48
+ describe "rspec2rr" do
49
+ it "should convert a spec file rrspec doubles to rr syntax" do
50
+ with_files 'spec/test_spec.rb' => spec_file_content do
51
+ run_rspec2rr
52
+ changed_spec_file_content = File.read 'spec/test_spec.rb'
53
+ changed_spec_file_content.should == expected_spec_file_content
54
+ end
55
+ end
56
+
57
+ it "should not convert a spec file if it is not located in the spec dir" do
58
+ with_files 'a_dir/test_spec.rb' => spec_file_content do
59
+ run_rspec2rr
60
+ changed_spec_file_content = File.read 'a_dir/test_spec.rb'
61
+ changed_spec_file_content.should_not == expected_spec_file_content
62
+ end
63
+ end
64
+
65
+ it "should not convert rb files that are not specs" do
66
+ with_files 'spec/only_specs_should_change_so_this_file_shouldnt_change.rb' => 'AModule.stub!(:method_name)' do
67
+ run_rspec2rr
68
+ unaltered_file_content = File.read 'spec/only_specs_should_change_so_this_file_shouldnt_change.rb'
69
+ unaltered_file_content.should == 'AModule.stub!(:method_name)'
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,71 @@
1
+ $: << File.expand_path(File.join(File.dirname(__FILE__), '../..'))
2
+
3
+ require 'rubygems'
4
+ require 'spec'
5
+ require 'lib/rspec2rr'
6
+
7
+ def more_lines string = ''
8
+ <<-FAKEFILE
9
+ asd.asdf.asdfadsf
10
+ #{string}
11
+ asfd.asdf.asdf
12
+
13
+ FAKEFILE
14
+ end
15
+
16
+ def assert_converts actual, expected
17
+ RSpec2RR.to_rr(more_lines(actual)).should == more_lines(expected)
18
+ end
19
+
20
+ describe 'rspec2rr' do
21
+ it 'should not change a nil string' do
22
+ RSpec2RR.to_rr(nil).should == nil
23
+ end
24
+
25
+ it 'should not change an empty string' do
26
+ RSpec2RR.to_rr('').should == ''
27
+ end
28
+
29
+ it 'should not change a string with no rspec mocks' do
30
+ RSpec2RR.to_rr(more_lines).should == more_lines
31
+ end
32
+
33
+ it 'should convert stub!(:method_name) to rr syntax' do
34
+ rspec_mock_string = 'A::Class.stub!(:stubbed_method)'
35
+
36
+ assert_converts rspec_mock_string, 'stub(A::Class).stubbed_method'
37
+ end
38
+
39
+ it 'should convert should_receive(:method_name) to rr syntax' do
40
+ rspec_mock_string = 'A::Class.should_receive(:stubbed_method)'
41
+
42
+ assert_converts rspec_mock_string, 'mock(A::Class).stubbed_method'
43
+ end
44
+
45
+ it 'should convert stub!(:method_name).with(something) to rr syntax' do
46
+ rspec_mock_string = 'A::Class.stub!(:stubbed_method).with(something)'
47
+
48
+ assert_converts rspec_mock_string, 'stub(A::Class).stubbed_method(something)'
49
+ end
50
+
51
+ it 'should convert should_receive(:method_name).with(something) to rr syntax' do
52
+ rspec_mock_string = 'A::Class.should_receive(:stubbed_method).with(something)'
53
+
54
+ assert_converts rspec_mock_string, 'mock(A::Class).stubbed_method(something)'
55
+ end
56
+
57
+ it 'should convert should_not_receive(:method_name).with(something) to rr syntax' do
58
+ rspec_mock_string = 'A::Class.should_not_receive(:stubbed_method).with(something)'
59
+
60
+ assert_converts rspec_mock_string, 'dont_allow(A::Class).stubbed_method(something)'
61
+ end
62
+
63
+ it 'should convert and_return to block' do
64
+ rspec_mock_string = 'User.stub!(:find_by_email).and_return(@user)'
65
+
66
+ assert_converts rspec_mock_string, 'stub(User).find_by_email {@user}'
67
+ end
68
+ end
69
+
70
+
71
+
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dcadenas-rspec2rr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Cadenas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-10 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: rspec2rr is a Ruby script that helps you in the migration process from rspec dobules ro rr trying to reduce your manual work
17
+ email: dcadenas@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - Manifest.txt
26
+ - README.txt
27
+ - Rakefile
28
+ - rspec2rr.gemspec
29
+ - lib/rspec2rr.rb
30
+ - bin/rspec2rr
31
+ has_rdoc: false
32
+ homepage: http://github.com/dcadenas/rspec2rr
33
+ post_install_message:
34
+ rdoc_options: []
35
+
36
+ require_paths:
37
+ - lib
38
+ required_ruby_version: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: "0"
43
+ version:
44
+ required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: "0"
49
+ version:
50
+ requirements: []
51
+
52
+ rubyforge_project:
53
+ rubygems_version: 1.2.0
54
+ signing_key:
55
+ specification_version: 2
56
+ summary: Helps converting from rspec doubles to rr doubles
57
+ test_files:
58
+ - spec/unit/rspec2rr_spec.rb
59
+ - spec/integration/rspec2rr_spec.rb