rant 0.5.6 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +12 -0
- data/README +3 -3
- data/Rantfile +7 -1
- data/doc/Untitled-1~ +7 -0
- data/doc/command.rdoc +1 -1
- data/doc/csharp.rdoc +49 -72
- data/doc/csharp.rdoc~ +37 -0
- data/doc/csharp_deprecated.rdoc +73 -0
- data/doc/homepage/index.html +5 -8
- data/doc/homepage/index.html~ +134 -0
- data/doc/sys.rdoc +14 -0
- data/lib/rant/coregen.rb~ +262 -0
- data/lib/rant/csharp/base_compiler_adapter.rb +125 -0
- data/lib/rant/csharp/base_compiler_adapter.rb~ +105 -0
- data/lib/rant/csharp/compiler_adapter_factory.rb +40 -0
- data/lib/rant/csharp/compiler_adapter_factory.rb~ +39 -0
- data/lib/rant/csharp/csc_compiler.rb +15 -0
- data/lib/rant/csharp/csc_compiler.rb~ +39 -0
- data/lib/rant/csharp/gmcs_compiler.rb +9 -0
- data/lib/rant/csharp/gmcs_compiler.rb~ +10 -0
- data/lib/rant/csharp/mcs_compiler.rb +13 -0
- data/lib/rant/csharp/mcs_compiler.rb~ +40 -0
- data/lib/rant/csharp/msc_compiler.rb~ +39 -0
- data/lib/rant/import/csharp.rb +48 -0
- data/lib/rant/import/csharp.rb~ +58 -0
- data/lib/rant/import/nunittest.rb +32 -0
- data/lib/rant/import/resgen.rb +21 -0
- data/lib/rant/import/resgen.rb~ +20 -0
- data/lib/rant/init.rb +1 -1
- data/lib/rant/rantlib.rb +1 -0
- data/lib/rant/rantlib.rb~ +1376 -0
- data/lib/rant/rantsys.rb +6 -0
- data/run_import +1 -1
- data/run_rant +1 -1
- data/test/import/package/test_package.rb~ +628 -0
- data/test/rule.rf +4 -0
- data/test/test_filetask.rb~ +97 -0
- data/test/test_rule.rb +10 -0
- data/test/test_sys_methods.rb +22 -0
- data/test/units/csharp/test_base_compiler_adapter.rb +107 -0
- data/test/units/csharp/test_base_compiler_adapter.rb~ +73 -0
- data/test/units/csharp/test_compiler_adapter_factory.rb +66 -0
- data/test/units/csharp/test_compiler_adapter_factory.rb~ +66 -0
- data/test/units/csharp/test_csc_compiler.rb +23 -0
- data/test/units/csharp/test_csc_compiler.rb~ +23 -0
- data/test/units/csharp/test_gmsc_compiler.rb +19 -0
- data/test/units/csharp/test_gmsc_compiler.rb~ +19 -0
- data/test/units/csharp/test_msc_compiler.rb +23 -0
- data/test/units/csharp/test_msc_compiler.rb~ +23 -0
- data/test/units/csharp_test_helper.rb +6 -0
- data/test/units/import/test_csharp.rb +127 -0
- data/test/units/import/test_csharp.rb~ +126 -0
- data/test/units/import/test_nunittest.rb +122 -0
- data/test/units/import/test_resgen.rb +107 -0
- data/test/units/import/test_resgen.rb~ +88 -0
- metadata +269 -224
data/test/rule.rf
CHANGED
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require 'tutil'
|
4
|
+
|
5
|
+
$test_filetask_file = File.expand_path(__FILE__)
|
6
|
+
$test_dir ||= File.dirname($test_filetask_file)
|
7
|
+
|
8
|
+
class TestFileTask < Test::Unit::TestCase
|
9
|
+
include Rant::TestUtil
|
10
|
+
|
11
|
+
def setup
|
12
|
+
Dir.chdir $test_dir
|
13
|
+
@rant = Rant::RantApp.new
|
14
|
+
end
|
15
|
+
def test_needed_non_existent
|
16
|
+
run = false
|
17
|
+
t = Rant::FileTask.new(@rant, "non_existent") { run = true }
|
18
|
+
assert(t.needed?,
|
19
|
+
"`non_existent' doesn't exist, so filetask is needed")
|
20
|
+
assert(!run,
|
21
|
+
"only FileTask#needed? was called, which shouldn't run task block")
|
22
|
+
end
|
23
|
+
def test_needed_no_dep
|
24
|
+
run = false
|
25
|
+
t = @rant.file $test_filetask_file do
|
26
|
+
run = true
|
27
|
+
end
|
28
|
+
assert(!t.needed?,
|
29
|
+
"file exists and has no prerequisite, so needed? should return false")
|
30
|
+
assert(!run)
|
31
|
+
end
|
32
|
+
=begin
|
33
|
+
commented out due to a semantics change in 0.4.5
|
34
|
+
def test_single_dep
|
35
|
+
tr = false
|
36
|
+
t = @rant.task :t do
|
37
|
+
tr = true
|
38
|
+
end
|
39
|
+
run = false
|
40
|
+
f = @rant.file "testfile" => :t do
|
41
|
+
run = true
|
42
|
+
end
|
43
|
+
f.invoke
|
44
|
+
assert(tr)
|
45
|
+
assert(run)
|
46
|
+
end
|
47
|
+
=end
|
48
|
+
def test_prerequisites
|
49
|
+
@rant.file "a" do
|
50
|
+
true
|
51
|
+
end
|
52
|
+
@rant.file "b" do
|
53
|
+
true
|
54
|
+
end
|
55
|
+
f = @rant.file "c" => %w(a b) do |t|
|
56
|
+
assert_equal(t.prerequisites, %w(a b),
|
57
|
+
"prerequisites should always be an array of _strings_")
|
58
|
+
true
|
59
|
+
end
|
60
|
+
f.invoke
|
61
|
+
end
|
62
|
+
def test_no_invoke_task_dep
|
63
|
+
write_to_file "print_name.t", "b\n"
|
64
|
+
out, err = assert_rant "depends_name.t"
|
65
|
+
assert err.empty?
|
66
|
+
assert test(?f, "depends_name.t")
|
67
|
+
assert_equal "b\na\n", File.read("depends_name.t")
|
68
|
+
assert_match(/writing.*depends_name\.t/, out)
|
69
|
+
assert !out.include?("print_name.t"),
|
70
|
+
"file task mustn't invoke task as prerequisite"
|
71
|
+
out, err = assert_rant "depends_name.t"
|
72
|
+
assert err.empty?
|
73
|
+
assert out.empty?
|
74
|
+
assert test(?f, "depends_name.t")
|
75
|
+
assert_equal "b\na\n", File.read("depends_name.t")
|
76
|
+
ensure
|
77
|
+
Rant::Sys.rm_f %w(print_name.t depends_name.t)
|
78
|
+
end
|
79
|
+
def test_no_invoke_task_dep_md5
|
80
|
+
write_to_file "print_name.t", "b\n"
|
81
|
+
out, err = assert_rant "-imd5", "depends_name.t"
|
82
|
+
assert err.empty?
|
83
|
+
assert test(?f, "depends_name.t")
|
84
|
+
assert_equal "b\na\n", File.read("depends_name.t")
|
85
|
+
assert_match(/writing.*depends_name\.t/, out)
|
86
|
+
assert !out.include?("print_name.t"),
|
87
|
+
"file task mustn't invoke task as prerequisite"
|
88
|
+
out, err = assert_rant "-imd5", "depends_name.t"
|
89
|
+
assert err.empty?
|
90
|
+
assert out.empty?
|
91
|
+
assert test(?f, "depends_name.t")
|
92
|
+
assert_equal "b\na\n", File.read("depends_name.t")
|
93
|
+
ensure
|
94
|
+
Rant::Sys.rm_f %w(auto.rf .rant.meta print_name.t depends_name.t)
|
95
|
+
Rant::Sys.rm_f Dir["*.t"]
|
96
|
+
end
|
97
|
+
end
|
data/test/test_rule.rb
CHANGED
@@ -185,4 +185,14 @@ if Rant::Env.find_bin("cc") && Rant::Env.find_bin("gcc")
|
|
185
185
|
else
|
186
186
|
$stderr.puts "*** cc/gcc not available, less rule tests ***"
|
187
187
|
end
|
188
|
+
def test_abs_path_source
|
189
|
+
FileUtils.touch "abs_rule_test.et"
|
190
|
+
abs_target_path = File.expand_path "abs_rule_test.ett"
|
191
|
+
out, err = assert_rant("-frule.rf", abs_target_path)
|
192
|
+
assert test(?f, abs_target_path)
|
193
|
+
out, err = assert_rant("-frule.rf", abs_target_path)
|
194
|
+
assert out.empty?
|
195
|
+
ensure
|
196
|
+
Rant::Sys.rm_f ["abs_rule_test.et", "abs_rule_test.ett"]
|
197
|
+
end
|
188
198
|
end
|
data/test/test_sys_methods.rb
CHANGED
@@ -594,4 +594,26 @@ class TestSysMethods < Test::Unit::TestCase
|
|
594
594
|
assert !Rant::Sys.root_dir?("C:/foo/bar")
|
595
595
|
end
|
596
596
|
end
|
597
|
+
def test_absolute_path?
|
598
|
+
assert Rant::Sys.absolute_path?("/foo")
|
599
|
+
assert Rant::Sys.absolute_path?("/foo/bar/baz.txt")
|
600
|
+
assert Rant::Sys.absolute_path?("/")
|
601
|
+
assert Rant::Sys.absolute_path?("//foo")
|
602
|
+
assert !Rant::Sys.absolute_path?("foo/")
|
603
|
+
assert !Rant::Sys.absolute_path?("")
|
604
|
+
assert !Rant::Sys.absolute_path?("foo\\bar")
|
605
|
+
if Rant::Env.on_windows?
|
606
|
+
assert Rant::Sys.absolute_path?("\\foo")
|
607
|
+
assert Rant::Sys.absolute_path?("\\")
|
608
|
+
assert Rant::Sys.absolute_path?("C:\\foo")
|
609
|
+
assert Rant::Sys.absolute_path?("C:/foo")
|
610
|
+
assert Rant::Sys.absolute_path?("C:\\")
|
611
|
+
assert Rant::Sys.absolute_path?("C:/")
|
612
|
+
else
|
613
|
+
assert !Rant::Sys.absolute_path?("C:/")
|
614
|
+
assert !Rant::Sys.absolute_path?("C:/foo")
|
615
|
+
assert !Rant::Sys.absolute_path?("\\")
|
616
|
+
assert !Rant::Sys.absolute_path?("C:\\")
|
617
|
+
end
|
618
|
+
end
|
597
619
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../csharp_test_helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) +
|
3
|
+
'/../../../lib/rant/csharp/base_compiler_adapter')
|
4
|
+
|
5
|
+
class TestBaseCompilerAdapter < Test::Unit::TestCase
|
6
|
+
begin
|
7
|
+
require 'mocha'
|
8
|
+
@@mocha_required = true
|
9
|
+
rescue LoadError
|
10
|
+
@@mocha_required = false
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
@c = Rant::CSharp::BaseCompilerAdapter.new("testbin")
|
15
|
+
end
|
16
|
+
|
17
|
+
# Tests
|
18
|
+
def test_initialize_should_fail_with_blank_bin
|
19
|
+
assert_raise(Exception) { Rant::CSharp::BaseCompilerAdapter.new }
|
20
|
+
assert_raise(Exception) { Rant::CSharp::BaseCompilerAdapter.new("") }
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_cmd_should_fail_with_blank_target
|
24
|
+
assert_raise(Exception) { @c.cmd("", nil, nil) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_cmd_should_create_compile_line
|
28
|
+
assert_equal "testbin out:outfile target:library ",
|
29
|
+
@c.cmd("outfile", {}, mock_context)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_cmd_should_create_complex_compile_line
|
33
|
+
args = {:sources => ["a", "b"],
|
34
|
+
:libs => ["c", "d"],
|
35
|
+
:target => "exe",
|
36
|
+
:checked => false}
|
37
|
+
|
38
|
+
cmd = @c.cmd("outfile", args, mock_context)
|
39
|
+
# Order of arguments is undefined, so use regex to test
|
40
|
+
assert_regex "^testbin out:outfile " , cmd
|
41
|
+
assert_regex " target:exe " , cmd
|
42
|
+
assert_regex " checked- " , cmd
|
43
|
+
assert_regex " libs:c libs:d " , cmd
|
44
|
+
assert_regex "a b$" , cmd
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_provide_default_map_target
|
48
|
+
assert_equal "string 1", @c.map_target("string 1")
|
49
|
+
assert_equal "string 2", @c.map_target("string 2")
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_should_guess_module_target
|
53
|
+
assert_equal "module", @c.guess_target("outfile.netmodule")
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_guess_exe_target_as_winexe
|
57
|
+
assert_equal "winexe", @c.guess_target("outfile.exe")
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_should_default_to_library_target
|
61
|
+
assert_equal "library", @c.guess_target("outfile.dll")
|
62
|
+
assert_equal "library", @c.guess_target("outfile")
|
63
|
+
end
|
64
|
+
|
65
|
+
if @@mocha_required
|
66
|
+
def test_should_escape_sources_as_string
|
67
|
+
sys = mock()
|
68
|
+
sys.expects(:sp).with("outfile").returns("outfile")
|
69
|
+
sys.expects(:sp).with("a").returns("a")
|
70
|
+
|
71
|
+
context = mock()
|
72
|
+
context.expects(:sys).at_least_once.returns(sys)
|
73
|
+
|
74
|
+
@c.cmd("outfile", {:sources => "a"}, context)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_should_escape_sources_as_array
|
78
|
+
sys = mock()
|
79
|
+
sys.expects(:sp).with("outfile").returns("outfile")
|
80
|
+
sys.expects(:sp).with("a").returns("a").times(2)
|
81
|
+
|
82
|
+
context = mock()
|
83
|
+
context.expects(:sys).at_least_once.returns(sys)
|
84
|
+
|
85
|
+
@c.cmd("outfile", {:sources => ["a", "a"]}, context)
|
86
|
+
end
|
87
|
+
else
|
88
|
+
print "**** Could not run all tests for BaseCompilerAdapter, " +
|
89
|
+
"requires mocha libary ****\n"
|
90
|
+
end
|
91
|
+
|
92
|
+
# Helpers
|
93
|
+
def mock_context
|
94
|
+
Struct.new(:sys).new(MockSys.new)
|
95
|
+
end
|
96
|
+
|
97
|
+
def assert_regex regex, actual
|
98
|
+
assert actual =~ Regexp.new(regex), "<\"#{actual}\"> did not match /#{regex}/"
|
99
|
+
end
|
100
|
+
|
101
|
+
# Mocks
|
102
|
+
class MockSys
|
103
|
+
def sp(file)
|
104
|
+
file
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../csharp_test_helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) +
|
3
|
+
'/../../../lib/rant/csharp/base_compiler_adapter')
|
4
|
+
|
5
|
+
class TestBaseCompilerAdapter < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@c = Rant::CSharp::BaseCompilerAdapter.new("testbin")
|
8
|
+
end
|
9
|
+
|
10
|
+
# Tests
|
11
|
+
def test_initialize_should_fail_with_blank_bin
|
12
|
+
assert_raise(Exception) { Rant::CSharp::BaseCompilerAdapter.new }
|
13
|
+
assert_raise(Exception) { Rant::CSharp::BaseCompilerAdapter.new("") }
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_cmd_should_fail_with_blank_target
|
17
|
+
assert_raise(Exception) { @c.cmd("", nil, nil) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_cmd_should_create_compile_line
|
21
|
+
assert_equal "testbin out:outfile target:library ",
|
22
|
+
@c.cmd("outfile", {}, mock_context)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_cmd_should_create_complex_compile_line
|
26
|
+
args = {:sources => ["a", "b"],
|
27
|
+
:libs => ["c", "d"],
|
28
|
+
:target => "exe",
|
29
|
+
:checked => false}
|
30
|
+
|
31
|
+
cmd = @c.cmd("outfile", args, mock_context)
|
32
|
+
# Order of arguments is undefined, so use regex to test
|
33
|
+
assert_regex "^testbin out:outfile " , cmd
|
34
|
+
assert_regex " target:exe " , cmd
|
35
|
+
assert_regex " checked- " , cmd
|
36
|
+
assert_regex " libs:c libs:d " , cmd
|
37
|
+
assert_regex "a b$" , cmd
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_should_provide_default_map_target
|
41
|
+
assert_equal "string 1", @c.map_target("string 1")
|
42
|
+
assert_equal "string 2", @c.map_target("string 2")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_should_guess_module_target
|
46
|
+
assert_equal "module", @c.guess_target("outfile.netmodule")
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_should_guess_exe_target_as_winexe
|
50
|
+
assert_equal "winexe", @c.guess_target("outfile.exe")
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_should_default_to_library_target
|
54
|
+
assert_equal "library", @c.guess_target("outfile.dll")
|
55
|
+
assert_equal "library", @c.guess_target("outfile")
|
56
|
+
end
|
57
|
+
|
58
|
+
# Helpers
|
59
|
+
def mock_context
|
60
|
+
Struct.new(:sys).new(MockSys.new)
|
61
|
+
end
|
62
|
+
|
63
|
+
def assert_regex regex, actual
|
64
|
+
assert actual =~ Regexp.new(regex), "<\"#{actual}\"> did not match /#{regex}/"
|
65
|
+
end
|
66
|
+
|
67
|
+
# Mocks
|
68
|
+
class MockSys
|
69
|
+
def sp(file)
|
70
|
+
file
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../csharp_test_helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) +
|
3
|
+
'/../../../lib/rant/csharp/compiler_adapter_factory')
|
4
|
+
|
5
|
+
class TestCompilerAdapterFactory < Test::Unit::TestCase
|
6
|
+
# Tests
|
7
|
+
def test_should_create_compiler_from_bin_in_path
|
8
|
+
c = Rant::CSharp::CompilerAdapterFactory.new(mock_context(MockEnv.new))
|
9
|
+
c.compiler_map = {"testbin" => MockCompiler }
|
10
|
+
|
11
|
+
assert c.compiler.kind_of?(MockCompiler),
|
12
|
+
"Compiler was not an instance of MockCompiler"
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_raise_exception_if_no_compiler_found
|
16
|
+
mock_context = Struct.new(:env).new(MockEnvNoBin.new)
|
17
|
+
c = Rant::CSharp::CompilerAdapterFactory.new(mock_context(MockEnvNoBin.new))
|
18
|
+
assert_raise(Exception) { c.compiler }
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_cache_compiler
|
22
|
+
mock_context = Struct.new(:env).new(MockEnv.new)
|
23
|
+
c = ::Rant::CSharp::CompilerAdapterFactory.new(mock_context)
|
24
|
+
c.compiler_map = {"testbin" => MockCompiler }
|
25
|
+
|
26
|
+
c.compiler # First call to populate cache
|
27
|
+
c.compiler_map = nil
|
28
|
+
|
29
|
+
assert c.compiler.kind_of?(MockCompiler),
|
30
|
+
"Complier was not cached"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_have_valid_default_compiler_map
|
34
|
+
c = Rant::CSharp::CompilerAdapterFactory.new(nil)
|
35
|
+
|
36
|
+
assert c.compiler_map.respond_to?("[]"), "Default compiler map is invalid"
|
37
|
+
c.compiler_map.each_pair do |key, value|
|
38
|
+
assert value.respond_to?(:new),
|
39
|
+
"Default compiler map contains an invalid pair: #{key} => #{value}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Helpers
|
44
|
+
def mock_context(env)
|
45
|
+
Struct.new(:env).new(env)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Mocks
|
49
|
+
class MockEnv
|
50
|
+
def find_bin(bin)
|
51
|
+
bin == "testbin"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class MockEnvNoBin
|
56
|
+
def find_bin(bin)
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class MockCompiler
|
62
|
+
def initialize context
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/csharp_test_helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) +
|
3
|
+
'/../../../lib/rant/csharp/compiler_adapter_factory')
|
4
|
+
|
5
|
+
class TestCompilerAdapterFactory < Test::Unit::TestCase
|
6
|
+
# Tests
|
7
|
+
def test_should_create_compiler_from_bin_in_path
|
8
|
+
c = Rant::CSharp::CompilerAdapterFactory.new(mock_context(MockEnv.new))
|
9
|
+
c.compiler_map = {"testbin" => MockCompiler }
|
10
|
+
|
11
|
+
assert c.compiler.kind_of?(MockCompiler),
|
12
|
+
"Compiler was not an instance of MockCompiler"
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_raise_exception_if_no_compiler_found
|
16
|
+
mock_context = Struct.new(:env).new(MockEnvNoBin.new)
|
17
|
+
c = Rant::CSharp::CompilerAdapterFactory.new(mock_context(MockEnvNoBin.new))
|
18
|
+
assert_raise(Exception) { c.compiler }
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_cache_compiler
|
22
|
+
mock_context = Struct.new(:env).new(MockEnv.new)
|
23
|
+
c = ::Rant::CSharp::CompilerAdapterFactory.new(mock_context)
|
24
|
+
c.compiler_map = {"testbin" => MockCompiler }
|
25
|
+
|
26
|
+
c.compiler # First call to populate cache
|
27
|
+
c.compiler_map = nil
|
28
|
+
|
29
|
+
assert c.compiler.kind_of?(MockCompiler),
|
30
|
+
"Complier was not cached"
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_have_valid_default_compiler_map
|
34
|
+
c = Rant::CSharp::CompilerAdapterFactory.new(nil)
|
35
|
+
|
36
|
+
assert c.compiler_map.respond_to?("[]"), "Default compiler map is invalid"
|
37
|
+
c.compiler_map.each_pair do |key, value|
|
38
|
+
assert value.respond_to?(:new),
|
39
|
+
"Default compiler map contains an invalid pair: #{key} => #{value}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Helpers
|
44
|
+
def mock_context(env)
|
45
|
+
Struct.new(:env).new(env)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Mocks
|
49
|
+
class MockEnv
|
50
|
+
def find_bin(bin)
|
51
|
+
bin == "testbin"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class MockEnvNoBin
|
56
|
+
def find_bin(bin)
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class MockCompiler
|
62
|
+
def initialize context
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|