diff options
Diffstat (limited to 'spec/ruby/library/rbconfig/rbconfig_spec.rb')
| -rw-r--r-- | spec/ruby/library/rbconfig/rbconfig_spec.rb | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/spec/ruby/library/rbconfig/rbconfig_spec.rb b/spec/ruby/library/rbconfig/rbconfig_spec.rb new file mode 100644 index 0000000000..4195128a05 --- /dev/null +++ b/spec/ruby/library/rbconfig/rbconfig_spec.rb @@ -0,0 +1,163 @@ +require_relative '../../spec_helper' +require 'rbconfig' + +describe 'RbConfig::CONFIG' do + it 'values are all strings' do + RbConfig::CONFIG.each do |k, v| + k.should.is_a? String + v.should.is_a? String + end + end + + it 'has MAJOR, MINOR, TEENY, and PATCHLEVEL matching RUBY_VERSION and RUBY_PATCHLEVEL' do + major, minor, teeny = RUBY_VERSION.split('.') + RbConfig::CONFIG.values_at("MAJOR", "MINOR", "TEENY", "PATCHLEVEL").should == [ + major, minor, teeny, RUBY_PATCHLEVEL.to_s + ] + end + + # These directories have no meanings before the installation. + guard -> { RbConfig::TOPDIR } do + it "['rubylibdir'] returns the directory containing Ruby standard libraries" do + rubylibdir = RbConfig::CONFIG['rubylibdir'] + File.directory?(rubylibdir).should == true + File.should.exist?("#{rubylibdir}/fileutils.rb") + end + + it "['archdir'] returns the directory containing standard libraries C extensions" do + archdir = RbConfig::CONFIG['archdir'] + File.directory?(archdir).should == true + File.should.exist?("#{archdir}/etc.#{RbConfig::CONFIG['DLEXT']}") + end + + it "['sitelibdir'] is set and is part of $LOAD_PATH" do + sitelibdir = RbConfig::CONFIG['sitelibdir'] + sitelibdir.should.is_a? String + $LOAD_PATH.map{|path| File.realpath(path) rescue path }.should.include? sitelibdir + end + end + + it "contains no frozen strings even with --enable-frozen-string-literal" do + ruby_exe(<<-RUBY, options: '--enable-frozen-string-literal').should == "Done\n" + require 'rbconfig' + RbConfig::CONFIG.each do |k, v| + if v.frozen? + puts "\#{k} Failure" + end + end + puts 'Done' + RUBY + end + + platform_is_not :windows do + it "['LIBRUBY'] is the same as LIBRUBY_SO if and only if ENABLE_SHARED" do + case RbConfig::CONFIG['ENABLE_SHARED'] + when 'yes' + RbConfig::CONFIG['LIBRUBY'].should == RbConfig::CONFIG['LIBRUBY_SO'] + when 'no' + RbConfig::CONFIG['LIBRUBY'].should_not == RbConfig::CONFIG['LIBRUBY_SO'] + end + end + end + + guard -> { RbConfig::TOPDIR } do + it "libdir/LIBRUBY_SO is the path to libruby and it exists if and only if ENABLE_SHARED" do + libdirname = RbConfig::CONFIG['LIBPATHENV'] == 'PATH' ? 'bindir' : + RbConfig::CONFIG['libdirname'] + libdir = RbConfig::CONFIG[libdirname] + libruby_so = "#{libdir}/#{RbConfig::CONFIG['LIBRUBY_SO']}" + case RbConfig::CONFIG['ENABLE_SHARED'] + when 'yes' + File.should.exist?(libruby_so) + when 'no' + File.should_not.exist?(libruby_so) + end + end + end + + platform_is :linux do + it "['AR'] exists and can be executed" do + ar = RbConfig::CONFIG.fetch('AR') + out = `#{ar} --version` + $?.should.success? + out.should_not.empty? + end + + it "['STRIP'] exists and can be executed" do + strip = RbConfig::CONFIG.fetch('STRIP') + copy = tmp("sh") + cp '/bin/sh', copy + begin + out = `#{strip} #{copy}` + $?.should.success? + ensure + rm_r copy + end + end + end + + guard -> { %w[aarch64 arm64].include? RbConfig::CONFIG['host_cpu'] } do + it "['host_cpu'] returns CPU architecture properly for AArch64" do + platform_is :darwin do + RbConfig::CONFIG['host_cpu'].should == 'arm64' + end + + platform_is_not :darwin do + RbConfig::CONFIG['host_cpu'].should == 'aarch64' + end + end + end + + guard -> { platform_is(:linux) || platform_is(:darwin) } do + it "['host_os'] returns a proper OS name or platform" do + platform_is :darwin do + RbConfig::CONFIG['host_os'].should.match?(/darwin/) + end + + platform_is :linux do + RbConfig::CONFIG['host_os'].should.match?(/linux/) + end + end + end +end + +describe "RbConfig::TOPDIR" do + it "either returns nil (if not installed) or the prefix" do + if RbConfig::TOPDIR + RbConfig::TOPDIR.should == RbConfig::CONFIG["prefix"] + else + RbConfig::TOPDIR.should == nil + end + end +end + +describe "RUBY_PLATFORM" do + it "RUBY_PLATFORM contains a proper CPU architecture" do + RUBY_PLATFORM.should.include? RbConfig::CONFIG['host_cpu'] + end + + guard -> { platform_is(:linux) || platform_is(:darwin) } do + it "RUBY_PLATFORM contains OS name" do + # don't use RbConfig::CONFIG['host_os'] as far as it could be slightly different, e.g. linux-gnu + platform_is(:linux) do + RUBY_PLATFORM.should.include? 'linux' + end + + platform_is(:darwin) do + RUBY_PLATFORM.should.include? 'darwin' + end + end + end +end + +describe "RUBY_DESCRIPTION" do + guard_not -> { RUBY_ENGINE == "ruby" && !RbConfig::TOPDIR } do + it "contains version" do + RUBY_DESCRIPTION.should.include? RUBY_VERSION + end + + it "contains RUBY_PLATFORM" do + RUBY_DESCRIPTION.should.include? RUBY_PLATFORM + end + end +end |
