Update to RDoc 2.1.0 r112
[rbx.git] / test / rubygems / test_gem_ext_ext_conf_builder.rb
blobfb21fa07554eabc8bb1208ec5fc2b867fafa62d0
1 require 'test/unit'
2 require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
3 require 'rubygems/ext'
5 class TestGemExtExtConfBuilder < RubyGemTestCase
7   def setup
8     super
10     @ext = File.join @tempdir, 'ext'
11     @dest_path = File.join @tempdir, 'prefix'
13     FileUtils.mkdir_p @ext
14     FileUtils.mkdir_p @dest_path
15   end
17   def test_class_build
18     File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
19       extconf.puts "require 'mkmf'\ncreate_makefile 'foo'"
20     end
22     output = []
24     Dir.chdir @ext do
25       Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
26     end
28     expected = [
29       "ruby extconf.rb",
30       "creating Makefile\n",
31       "make",
32       "make: Nothing to be done for `all'.\n",
33       "make install",
34       "make: Nothing to be done for `install'.\n"
35     ]
37     assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
38     assert_equal "creating Makefile\n", output[1]
39     case RUBY_PLATFORM
40     when /mswin/ then
41       assert_equal "nmake", output[2]
42       assert_equal "nmake install", output[4]
43     else
44       assert_equal "make", output[2]
45       assert_equal "make install", output[4]
46     end
47   end
49   def test_class_build_extconf_fail
50     File.open File.join(@ext, 'extconf.rb'), 'w' do |extconf|
51       extconf.puts "require 'mkmf'"
52       extconf.puts "have_library 'nonexistent' or abort 'need libnonexistent'"
53       extconf.puts "create_makefile 'foo'"
54     end
56     output = []
58     error = assert_raise Gem::InstallError do
59       Dir.chdir @ext do
60         Gem::Ext::ExtConfBuilder.build 'extconf.rb', nil, @dest_path, output
61       end
62     end
64     assert_match(/\Aextconf failed:
66 #{Gem.ruby} extconf.rb.*
67 checking for main\(\) in .*?nonexistent/m, error.message)
69     assert_match(/^#{Gem.ruby} extconf.rb/, output[0])
70   end
72   def test_class_make
73     output = []
74     makefile_path = File.join(@ext, 'Makefile')
75     File.open makefile_path, 'w' do |makefile|
76       makefile.puts "RUBYARCHDIR = $(foo)$(target_prefix)"
77       makefile.puts "RUBYLIBDIR = $(bar)$(target_prefix)"
78       makefile.puts "all:"
79       makefile.puts "install:"
80     end
82     Dir.chdir @ext do
83       Gem::Ext::ExtConfBuilder.make @ext, output
84     end
86     case RUBY_PLATFORM
87     when /mswin/ then
88       assert_equal 'nmake', output[0]
89       assert_equal 'nmake install', output[2]
90     else
91       assert_equal 'make', output[0]
92       assert_equal 'make install', output[2]
93     end
95     edited_makefile = <<-EOF
96 RUBYARCHDIR = #{@ext}$(target_prefix)
97 RUBYLIBDIR = #{@ext}$(target_prefix)
98 all:
99 install:
100     EOF
102     assert_equal edited_makefile, File.read(makefile_path)
103   end
105   def test_class_make_no_Makefile
106     error = assert_raise Gem::InstallError do
107       Dir.chdir @ext do
108         Gem::Ext::ExtConfBuilder.make @ext, ['output']
109       end
110     end
112     expected = <<-EOF.strip
113 Makefile not found:
115 output
116     EOF
118     assert_equal expected, error.message
119   end