rake-builder 0.7.0 → 0.8.0
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.
- data/Rakefile +8 -5
- data/examples/05_tests/Rakefile +3 -3
- data/examples/05_tests/include/units.h +2 -2
- data/lib/compiler.rb +25 -30
- data/lib/rake/builder.rb +135 -136
- data/lib/rake/builder/installer.rb +37 -0
- data/lib/rake/{local_config.rb → builder/local_config.rb} +13 -14
- data/lib/rake/builder/logger/formatter.rb +7 -1
- data/lib/rake/builder/presenters/makefile/builder_presenter.rb +66 -33
- data/lib/rake/builder/presenters/makefile_am/builder_presenter.rb +4 -4
- data/lib/rake/builder/qt_builder.rb +3 -8
- data/lib/rake/builder/task_definers/builder_task_definer.rb +1 -4
- data/lib/rake/builder/version.rb +1 -1
- data/lib/rake/{microsecond.rb → microsecond_task.rb} +22 -27
- data/lib/rake/once_task.rb +2 -7
- data/lib/rake/path.rb +1 -6
- data/spec/gather_rspec_coverage.rb +2 -0
- data/spec/spec_helper.rb +13 -98
- data/spec/unit/compiler_spec.rb +129 -0
- data/spec/unit/rake/builder/autoconf/version_spec.rb +62 -5
- data/spec/unit/rake/builder/configure_ac_spec.rb +53 -0
- data/spec/unit/rake/builder/install_spec.rb +101 -0
- data/spec/unit/rake/builder/local_config_spec.rb +53 -0
- data/spec/unit/rake/builder/logger/formatter_spec.rb +20 -0
- data/spec/unit/rake/builder/presenters/makefile/builder_presenter_spec.rb +163 -0
- data/spec/unit/rake/builder/presenters/makefile_am/builder_presenter_spec.rb +4 -2
- data/spec/unit/rake/builder/task_definers/builder_task_definer_spec.rb +6 -0
- data/spec/unit/rake/builder_spec.rb +391 -16
- data/spec/unit/rake/microsecond_task_spec.rb +63 -0
- metadata +39 -55
- data/examples/01_hello_world_cpp/vendor/bundle/gems/coderay-1.0.8/Rakefile +0 -35
- data/examples/01_hello_world_cpp/vendor/bundle/gems/json-1.7.6/Rakefile +0 -412
- data/examples/01_hello_world_cpp/vendor/bundle/gems/json-1.7.6/ext/json/ext/fbuffer/fbuffer.h +0 -185
- data/examples/01_hello_world_cpp/vendor/bundle/gems/json-1.7.6/ext/json/ext/generator/generator.c +0 -1427
- data/examples/01_hello_world_cpp/vendor/bundle/gems/json-1.7.6/ext/json/ext/generator/generator.h +0 -149
- data/examples/01_hello_world_cpp/vendor/bundle/gems/json-1.7.6/ext/json/ext/parser/parser.c +0 -2204
- data/examples/01_hello_world_cpp/vendor/bundle/gems/json-1.7.6/ext/json/ext/parser/parser.h +0 -77
- data/examples/01_hello_world_cpp/vendor/bundle/gems/method_source-0.8.1/Rakefile +0 -79
- data/examples/01_hello_world_cpp/vendor/bundle/gems/pry-0.9.11.3/Rakefile +0 -136
- data/examples/01_hello_world_cpp/vendor/bundle/gems/rake-10.0.3/Rakefile +0 -374
- data/examples/01_hello_world_cpp/vendor/bundle/gems/rake-10.0.3/doc/example/a.c +0 -6
- data/examples/01_hello_world_cpp/vendor/bundle/gems/rake-10.0.3/doc/example/b.c +0 -6
- data/examples/01_hello_world_cpp/vendor/bundle/gems/rake-10.0.3/doc/example/main.c +0 -11
- data/examples/01_hello_world_cpp/vendor/bundle/gems/slop-3.4.3/Rakefile +0 -29
- data/lib/rake/file_task_alias.rb +0 -24
- data/spec/c_project/main.c +0 -12
- data/spec/c_project/main.h +0 -6
- data/spec/c_project_spec.rb +0 -41
- data/spec/cpp_project/main.cpp +0 -12
- data/spec/cpp_project/main.h +0 -8
- data/spec/cpp_project_spec.rb +0 -203
- data/spec/generated_files_spec.rb +0 -65
- data/spec/libraries_spec.rb +0 -35
- data/spec/local_config_spec.rb +0 -95
- data/spec/logger_spec.rb +0 -25
- data/spec/microsecond_task_spec.rb +0 -32
- data/spec/objective_c_project/main.h +0 -1
- data/spec/objective_c_project/main.m +0 -18
- data/spec/objective_c_project_spec.rb +0 -72
- data/spec/paths_spec.rb +0 -19
- data/spec/project_spec.rb +0 -20
- data/spec/target_spec.rb +0 -48
data/lib/rake/path.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
|
-
require 'rubygems' if RUBY_VERSION < '1.9'
|
2
|
-
|
3
1
|
module Rake
|
4
|
-
|
5
2
|
module Path
|
6
|
-
|
7
3
|
def self.find_files( paths, extension )
|
8
4
|
files = paths.reduce( [] ) do | memo, path |
|
9
5
|
case
|
@@ -45,7 +41,6 @@ module Rake
|
|
45
41
|
path
|
46
42
|
end
|
47
43
|
end
|
48
|
-
|
49
44
|
end
|
50
|
-
|
51
45
|
end
|
46
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,113 +1,28 @@
|
|
1
1
|
require 'rspec'
|
2
|
-
require
|
2
|
+
require 'simplecov' if RUBY_VERSION > '1.9'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
:static_library => 'libthe_static_library.a',
|
10
|
-
:shared_library => 'libthe_dynamic_library.so',
|
11
|
-
}
|
12
|
-
|
13
|
-
def cpp_task( type, namespace = nil )
|
14
|
-
Rake::Builder.new do |builder|
|
15
|
-
builder.programming_language = 'c++'
|
16
|
-
builder.target = TARGET[ type ]
|
17
|
-
builder.task_namespace = namespace
|
18
|
-
builder.source_search_paths = [ 'cpp_project' ]
|
19
|
-
builder.include_paths = [ 'cpp_project' ]
|
20
|
-
builder.generated_files << 'rake-builder-testfile.txt'
|
21
|
-
yield builder if block_given?
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def c_task( type, namespace = nil )
|
26
|
-
Rake::Builder.new do |builder|
|
27
|
-
builder.programming_language = 'c'
|
28
|
-
builder.target = TARGET[ type ]
|
29
|
-
builder.task_namespace = namespace
|
30
|
-
builder.source_search_paths = [ 'c_project' ]
|
31
|
-
builder.include_paths = [ 'c_project' ]
|
32
|
-
builder.generated_files << 'rake-c-testfile.txt'
|
33
|
-
yield builder if block_given?
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def objective_c_task( type, namespace = nil )
|
38
|
-
Rake::Builder.new do |builder|
|
39
|
-
builder.programming_language = 'objective-c'
|
40
|
-
builder.target = TARGET[ type ]
|
41
|
-
builder.task_namespace = namespace
|
42
|
-
builder.source_search_paths = [ 'objective_c_project' ]
|
43
|
-
builder.include_paths = [ 'objective_c_project' ]
|
44
|
-
builder.generated_files << 'rake-builder-testfile.txt'
|
45
|
-
builder.library_dependencies = [ 'objc' ]
|
46
|
-
builder.linker_options = '-framework CoreFoundation -framework Foundation'
|
47
|
-
yield builder if block_given?
|
4
|
+
if RUBY_VERSION > '1.9'
|
5
|
+
if defined?(GATHER_RSPEC_COVERAGE)
|
6
|
+
SimpleCov.start do
|
7
|
+
add_filter "/spec/"
|
8
|
+
add_filter "/vendor/"
|
48
9
|
end
|
49
10
|
end
|
11
|
+
end
|
50
12
|
|
51
|
-
|
52
|
-
`touch #{file}`
|
53
|
-
end
|
54
|
-
|
55
|
-
def exist?( file )
|
56
|
-
File.exist? file
|
57
|
-
end
|
58
|
-
|
59
|
-
def task_names
|
60
|
-
Rake::Task.tasks.map( &:to_s )
|
61
|
-
end
|
62
|
-
|
63
|
-
def default_tasks
|
64
|
-
[ 'build', 'clean', 'compile', 'load_makedepend' ]
|
65
|
-
end
|
66
|
-
|
67
|
-
def expected_tasks( extras, scope = nil )
|
68
|
-
t = scoped_tasks( default_tasks, scope )
|
69
|
-
t += extras
|
70
|
-
t << if scope.nil?
|
71
|
-
'default'
|
72
|
-
else
|
73
|
-
scope
|
74
|
-
end
|
75
|
-
t
|
76
|
-
end
|
77
|
-
|
78
|
-
def scoped_tasks( tasks, scope )
|
79
|
-
return tasks if scope.nil?
|
80
|
-
tasks.map{ |t| "#{scope}:#{t}" }
|
81
|
-
end
|
13
|
+
require File.expand_path(File.join('..', 'lib', 'rake', 'builder'), File.dirname(__FILE__))
|
82
14
|
|
15
|
+
module InputOutputTestHelper
|
83
16
|
def capturing_output
|
84
|
-
originals =
|
17
|
+
originals = $stdout, $stderr
|
85
18
|
stdout, stderr = StringIO.new, StringIO.new
|
86
19
|
$stdout, $stderr = stdout, stderr
|
87
|
-
yield
|
88
|
-
[stdout.string, stderr.string]
|
89
|
-
ensure
|
90
|
-
$stdout, $stderr = *originals
|
91
|
-
end
|
92
|
-
|
93
|
-
# Most file systems have a 1s resolution
|
94
|
-
# Force a wait into the next second around a task
|
95
|
-
# So FileTask's out_of_date? will behave correctly
|
96
|
-
def isolating_seconds
|
97
|
-
sec = Time.now.sec
|
98
|
-
yield
|
99
|
-
while( Time.now.sec == sec ) do end
|
100
|
-
end
|
101
|
-
|
102
|
-
def touching_temporarily( file, touch_time )
|
103
20
|
begin
|
104
|
-
atime = File.atime( file )
|
105
|
-
mtime = File.mtime( file )
|
106
|
-
File.utime( atime, touch_time, file )
|
107
21
|
yield
|
108
22
|
ensure
|
109
|
-
|
23
|
+
$stdout, $stderr = originals
|
110
24
|
end
|
25
|
+
[stdout.string, stderr.string]
|
111
26
|
end
|
112
|
-
|
113
27
|
end
|
28
|
+
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Compiler::Base do
|
4
|
+
context '.for' do
|
5
|
+
it 'returns a compiler' do
|
6
|
+
expect(Compiler::Base.for(:gcc)).to be_a(Compiler::GCC)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
subject { Compiler::Base.new }
|
11
|
+
|
12
|
+
context '#include_paths' do
|
13
|
+
before do
|
14
|
+
File.stub(:exist?).
|
15
|
+
with('/opt/local/include/foo/bar.h').
|
16
|
+
and_return(false)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'checks extra paths' do
|
20
|
+
File.should_receive(:exist?).
|
21
|
+
with('/opt/local/include/foo/bar.h').
|
22
|
+
and_return(true)
|
23
|
+
|
24
|
+
subject.include_paths(['foo/bar.h'])
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'throws an error is the headers are not found' do
|
28
|
+
expect {
|
29
|
+
subject.include_paths(['foo/bar.h'])
|
30
|
+
}.to raise_error(RuntimeError, /Can't find header/)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe Compiler::GCC do
|
36
|
+
|
37
|
+
subject { Compiler::GCC.new }
|
38
|
+
|
39
|
+
context '.framework_path' do
|
40
|
+
it 'returns a path with the framework and QT version' do
|
41
|
+
path = Compiler::GCC.framework_path('foo', '1.2.3')
|
42
|
+
|
43
|
+
expect(path).to match(%r(Library/Frameworks/foo.*?/1.2.3/))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'default_include_paths' do
|
48
|
+
let(:include_paths) do
|
49
|
+
%w(
|
50
|
+
/usr/include/c++/4.6
|
51
|
+
/usr/include/c++/4.6/x86_64-linux-gnu/.
|
52
|
+
/usr/include/c++/4.6/backward
|
53
|
+
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
|
54
|
+
/usr/local/include
|
55
|
+
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
|
56
|
+
/usr/include/x86_64-linux-gnu
|
57
|
+
/usr/include
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
let(:gcc_output) do
|
62
|
+
<<-EOT
|
63
|
+
Using built-in specs.
|
64
|
+
COLLECT_GCC=gcc
|
65
|
+
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper
|
66
|
+
Target: x86_64-linux-gnu
|
67
|
+
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
|
68
|
+
Thread model: posix
|
69
|
+
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
|
70
|
+
COLLECT_GCC_OPTIONS='-v' '-E' '-mtune=generic' '-march=x86-64'
|
71
|
+
/usr/lib/gcc/x86_64-linux-gnu/4.6/cc1plus -E -quiet -v -imultilib . -imultiarch x86_64-linux-gnu -D_GNU_SOURCE - -mtune=generic -march=x86-64 -fstack-protector
|
72
|
+
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
|
73
|
+
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../x86_64-linux-gnu/include"
|
74
|
+
#include "..." search starts here:
|
75
|
+
#include <...> search starts here:
|
76
|
+
/usr/include/c++/4.6
|
77
|
+
/usr/include/c++/4.6/x86_64-linux-gnu/.
|
78
|
+
/usr/include/c++/4.6/backward
|
79
|
+
/usr/lib/gcc/x86_64-linux-gnu/4.6/include
|
80
|
+
/usr/local/include
|
81
|
+
/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed
|
82
|
+
/usr/include/x86_64-linux-gnu
|
83
|
+
/usr/include
|
84
|
+
End of search list.
|
85
|
+
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/
|
86
|
+
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.6/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../:/lib/:/usr/lib/
|
87
|
+
COLLECT_GCC_OPTIONS='-v' '-E' '-mtune=generic' '-march=x86-64'
|
88
|
+
EOT
|
89
|
+
end
|
90
|
+
|
91
|
+
before { subject.stub(:`).with(/gcc/).and_return(gcc_output) }
|
92
|
+
|
93
|
+
it 'calls gcc' do
|
94
|
+
subject.should_receive(:`).with(/gcc/).and_return(gcc_output)
|
95
|
+
|
96
|
+
subject.default_include_paths('c++')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'parses gcc output' do
|
100
|
+
actual = subject.default_include_paths('c++')
|
101
|
+
|
102
|
+
expect(actual).to eq(include_paths)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
context 'missing_headers' do
|
107
|
+
let(:makedepend_output) do
|
108
|
+
<<-EOT
|
109
|
+
makedepend: warning: main.cpp (reading main.h, line 4): cannot find include file "baz.h"
|
110
|
+
not in /usr/include/iostream
|
111
|
+
EOT
|
112
|
+
end
|
113
|
+
|
114
|
+
before { subject.stub(:`).with(/makedepend/).and_return(makedepend_output) }
|
115
|
+
|
116
|
+
it 'calls makedepend' do
|
117
|
+
subject.should_receive(:`).with(/makedepend/).and_return(makedepend_output)
|
118
|
+
|
119
|
+
subject.missing_headers(['/foo'], ['bar.cpp'])
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'returns missing headers' do
|
123
|
+
missing = subject.missing_headers(['/foo'], ['bar.cpp'])
|
124
|
+
|
125
|
+
expect(missing).to eq(['baz.h'])
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
@@ -1,6 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Rake::Builder::Autoconf::Version do
|
4
|
+
before do
|
5
|
+
File.stub(:exist? => true)
|
6
|
+
File.stub(:read => '1.2.3')
|
7
|
+
end
|
8
|
+
|
4
9
|
context '.new' do
|
5
10
|
context 'with parameter' do
|
6
11
|
it 'fails if the version parameter is not nn.nn.nn' do
|
@@ -17,11 +22,6 @@ describe Rake::Builder::Autoconf::Version do
|
|
17
22
|
end
|
18
23
|
|
19
24
|
context 'VERSION file' do
|
20
|
-
before do
|
21
|
-
File.stub(:exist? => true)
|
22
|
-
File.stub(:read => '1.2.3')
|
23
|
-
end
|
24
|
-
|
25
25
|
it 'checks for a the file' do
|
26
26
|
File.should_receive(:exist?).
|
27
27
|
with('VERSION').
|
@@ -54,6 +54,63 @@ describe Rake::Builder::Autoconf::Version do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
context '#decide' do
|
57
|
+
let(:with_parameter) { Rake::Builder::Autoconf::Version.new('4.5.6') }
|
58
|
+
let(:without_parameter) { Rake::Builder::Autoconf::Version.new }
|
59
|
+
|
60
|
+
before { File.stub(:open).with('VERSION', 'w') }
|
61
|
+
|
62
|
+
context 'file version is nil' do
|
63
|
+
before { File.stub(:exist? => false) }
|
64
|
+
|
65
|
+
context 'parameter is nil' do
|
66
|
+
it 'raises an error' do
|
67
|
+
expect {
|
68
|
+
without_parameter.decide
|
69
|
+
}.to raise_error(RuntimeError, /Please do one of the following/)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'parameter not nil' do
|
74
|
+
it 'saves the version' do
|
75
|
+
File.should_receive(:open).with('VERSION', 'w')
|
76
|
+
|
77
|
+
with_parameter.decide
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'returns the parameter version' do
|
81
|
+
expect(with_parameter.decide).to eq('4.5.6')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'file version not nil' do
|
87
|
+
before do
|
88
|
+
File.stub(:exist? => true)
|
89
|
+
File.stub(:read).with('VERSION').and_return("6.6.6\n")
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'parameter is nil' do
|
93
|
+
it 'returns the file version' do
|
94
|
+
expect(without_parameter.decide).to eq('6.6.6')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'parameter not nil' do
|
99
|
+
it 'fails if the two versions differ'do
|
100
|
+
File.should_receive(:read).with('VERSION').and_return("6.6.6\n")
|
101
|
+
|
102
|
+
expect {
|
103
|
+
with_parameter.decide
|
104
|
+
}.to raise_error(RuntimeError, /parameter.*?is different to.*?VERSION/)
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'returns the version' do
|
108
|
+
File.should_receive(:read).with('VERSION').and_return("4.5.6\n")
|
109
|
+
|
110
|
+
expect(with_parameter.decide).to eq('4.5.6')
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
57
114
|
end
|
58
115
|
end
|
59
116
|
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rake::Builder::ConfigureAc do
|
4
|
+
subject { Rake::Builder::ConfigureAc.new('title', '1.2.3', '/source/file.c') }
|
5
|
+
|
6
|
+
context '.new' do
|
7
|
+
it 'takes three parameters' do
|
8
|
+
expect {
|
9
|
+
Rake::Builder::ConfigureAc.new
|
10
|
+
}.to raise_error(ArgumentError, /wrong number of arguments/)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context '#to_s' do
|
15
|
+
it 'sets up AC_INIT' do
|
16
|
+
expected = 'AC_INIT(title, 1.2.3)'
|
17
|
+
|
18
|
+
expect(subject.to_s).to include(expected)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'indicates a source file in AC_CONFIG_SRCDIR' do
|
22
|
+
expected = 'AC_CONFIG_SRCDIR([/source/file.c])'
|
23
|
+
|
24
|
+
expect(subject.to_s).to include(expected)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'sets up AM_INIT_AUTOMAKE' do
|
28
|
+
expected = 'AM_INIT_AUTOMAKE([title], [1.2.3])'
|
29
|
+
|
30
|
+
expect(subject.to_s).to include(expected)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context '#save' do
|
35
|
+
it 'creates the file' do
|
36
|
+
File.should_receive(:open).with('configure.ac', 'w')
|
37
|
+
|
38
|
+
subject.save
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'saves the content' do
|
42
|
+
file = stub('File')
|
43
|
+
File.stub(:open).with('configure.ac', 'w') do |&block|
|
44
|
+
block.call file
|
45
|
+
end
|
46
|
+
|
47
|
+
file.should_receive(:write).with(/AC_PREREQ\(2\.61\)/)
|
48
|
+
|
49
|
+
subject.save
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rake::Builder::Installer do
|
4
|
+
let(:destination_path) { '/destination/path' }
|
5
|
+
let(:destination_pathname) { '/destination/path/install' }
|
6
|
+
|
7
|
+
context '#install' do
|
8
|
+
let(:file_to_install) { '/file/to/install' }
|
9
|
+
|
10
|
+
before do
|
11
|
+
File.stub(:exist?).with(file_to_install).and_return(true)
|
12
|
+
File.stub(:exist?).with(destination_path).and_return(true)
|
13
|
+
File.stub(:directory?).with(destination_path).and_return(true)
|
14
|
+
File.stub(:writable?).with(destination_path).and_return(true)
|
15
|
+
File.stub(:file?).with(destination_pathname).and_return(false)
|
16
|
+
File.stub(:writable?).with(destination_pathname).and_return(true)
|
17
|
+
FileUtils.stub(:copy_file).with(file_to_install, destination_path)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'checks the source exists' do
|
21
|
+
File.should_receive(:exist?).with(file_to_install).and_return(true)
|
22
|
+
|
23
|
+
subject.install file_to_install, destination_path
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'fails if the source does not exist' do
|
27
|
+
File.stub(:exist?).with(file_to_install).and_return(false)
|
28
|
+
|
29
|
+
expect {
|
30
|
+
subject.install file_to_install, destination_path
|
31
|
+
}.to raise_error(RuntimeError, /does not exist/)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'checks the destination directory exists' do
|
35
|
+
File.should_receive(:exist?).with(destination_path).and_return(false)
|
36
|
+
|
37
|
+
expect {
|
38
|
+
subject.install file_to_install, destination_path
|
39
|
+
}.to raise_error(RuntimeError, /does not exist/)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'checks the destination is a directory' do
|
43
|
+
File.should_receive(:directory?).with(destination_path).and_return(false)
|
44
|
+
|
45
|
+
expect {
|
46
|
+
subject.install file_to_install, destination_path
|
47
|
+
}.to raise_error(RuntimeError, /is not a directory/)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'check it can overwrite an existing destination file' do
|
51
|
+
File.stub(:file?).with(destination_pathname).and_return(true)
|
52
|
+
File.stub(:writable?).with(destination_pathname).and_return(false)
|
53
|
+
|
54
|
+
expect {
|
55
|
+
subject.install file_to_install, destination_path
|
56
|
+
}.to raise_error(RuntimeError, /cannot be overwritten/)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'copies the file to the destination' do
|
60
|
+
FileUtils.should_receive(:copy_file).with(file_to_install, destination_path)
|
61
|
+
|
62
|
+
subject.install file_to_install, destination_path
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context '#uninstall' do
|
67
|
+
before do
|
68
|
+
File.stub(:exist?).with(destination_pathname).and_return(true)
|
69
|
+
File.stub(:writable?).with(destination_path).and_return(true)
|
70
|
+
File.stub(:unlink).with(destination_pathname)
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'checks if the file exists' do
|
74
|
+
File.should_receive(:exist?).with(destination_pathname).and_return(true)
|
75
|
+
|
76
|
+
subject.uninstall destination_pathname
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'does nothing if the file does not exist' do
|
80
|
+
File.should_receive(:exist?).with(destination_pathname).and_return(false)
|
81
|
+
File.should_not_receive(:unlink)
|
82
|
+
|
83
|
+
subject.uninstall destination_pathname
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'fails if the directory is not writable' do
|
87
|
+
File.should_receive(:writable?).with(destination_path).and_return(false)
|
88
|
+
|
89
|
+
expect {
|
90
|
+
subject.uninstall destination_pathname
|
91
|
+
}.to raise_error(RuntimeError, /directory.*?writable/)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'deletes the file' do
|
95
|
+
File.should_receive(:unlink).with(destination_pathname)
|
96
|
+
|
97
|
+
subject.uninstall destination_pathname
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|