1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 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 be_kind_of String
v.should be_kind_of 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 be_kind_of 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 be_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
|