File: C:/Ruby27-x64/lib/ruby/gems/2.7.0/gems/tzinfo-1.2.11/test/tc_ruby_core_support.rb
# encoding: UTF-8
require File.join(File.expand_path(File.dirname(__FILE__)), 'test_utils')
include TZInfo
class TCRubyCoreSupport < Minitest::Test
def test_rational_new!
assert_equal(Rational(3,4), RubyCoreSupport.rational_new!(3,4))
end
def test_datetime_new!
assert_equal(DateTime.new(2008,10,5,12,0,0, 0, Date::ITALY), RubyCoreSupport.datetime_new!(2454745,0,2299161))
assert_equal(DateTime.new(2008,10,5,13,0,0, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new!(2454745,Rational(1, 24),2299161))
assert_equal(DateTime.new(2008,10,5,20,30,0, 0, Date::ITALY), RubyCoreSupport.datetime_new!(Rational(117827777, 48), 0, 2299161))
assert_equal(DateTime.new(2008,10,5,21,30,0, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new!(Rational(117827777, 48), Rational(1, 24), 2299161))
assert_equal(DateTime.new(2008,10,6,6,26,21, 0, Date::ITALY), RubyCoreSupport.datetime_new!(Rational(70696678127,28800), 0, 2299161))
assert_equal(DateTime.new(2008,10,6,7,26,21, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new!(Rational(70696678127, 28800), Rational(1, 24), 2299161))
assert_equal(DateTime.new(-4712,1,1,12,0,0, 0, Date::ITALY), RubyCoreSupport.datetime_new!(0, 0, 2299161))
assert_equal(DateTime.new(-4712,1,1,13,0,0, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new!(0, Rational(1, 24), 2299161))
assert_equal(DateTime.new(-4713,12,31,23,58,59, 0, Date::ITALY), RubyCoreSupport.datetime_new!(Rational(-43261, 86400), 0, 2299161))
assert_equal(DateTime.new(-4712,1,1,0,58,59, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new!(Rational(-43261, 86400), Rational(1, 24), 2299161))
assert_equal(DateTime.new(-4713,12,30,23,58,59, 0, Date::ITALY), RubyCoreSupport.datetime_new!(Rational(-129661, 86400), 0, 2299161))
assert_equal(DateTime.new(-4713,12,31,0,58,59, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new!(Rational(-129661, 86400), Rational(1, 24), 2299161))
end
def test_datetime_new
assert_equal(DateTime.new(2012, 12, 31, 23, 59, 59, 0, Date::ITALY), RubyCoreSupport.datetime_new(2012, 12, 31, 23, 59, 59, 0, Date::ITALY))
assert_equal(DateTime.new(2013, 2, 6, 23, 2, 36, Rational(1, 24), Date::ITALY), RubyCoreSupport.datetime_new(2013, 2, 6, 23, 2, 36, Rational(1,24), Date::ITALY))
assert_equal(DateTime.new(2012, 12, 31, 23, 59, 59, 0, Date::ITALY) + Rational(1, 86400000), RubyCoreSupport.datetime_new(2012, 12, 31, 23, 59, 59 + Rational(1, 1000), 0, Date::ITALY))
assert_equal(DateTime.new(2001, 10, 12, 12, 22, 59, Rational(1, 24), Date::ITALY) + Rational(501, 86400000), RubyCoreSupport.datetime_new(2001, 10, 12, 12, 22, 59 + Rational(501, 1000), Rational(1, 24), Date::ITALY))
end
def test_time_supports_negative
if RubyCoreSupport.time_supports_negative
assert_equal(Time.utc(1969, 12, 31, 23, 59, 59), Time.at(-1).utc)
else
assert_raises(ArgumentError) do
Time.at(-1)
end
end
end
def test_time_supports_64_bit
if RubyCoreSupport.time_supports_64bit
assert_equal(Time.utc(1901, 12, 13, 20, 45, 51), Time.at(-2147483649).utc)
assert_equal(Time.utc(2038, 1, 19, 3, 14, 8), Time.at(2147483648).utc)
else
assert_raises(RangeError) do
Time.at(-2147483649)
end
assert_raises(RangeError) do
Time.at(2147483648)
end
end
end
def test_time_nsec
t = Time.utc(2013, 2, 6, 21, 56, 23, 567890 + Rational(123,1000))
if t.respond_to?(:nsec)
assert_equal(567890123, RubyCoreSupport.time_nsec(t))
else
assert_equal(567890000, RubyCoreSupport.time_nsec(t))
end
end
def test_force_encoding
s = [0xC2, 0xA9].pack('c2')
if s.respond_to?(:force_encoding)
# Ruby 1.9+ - should call String#force_encoding
assert_equal('ASCII-8BIT', s.encoding.name)
assert_equal(2, s.bytesize)
result = RubyCoreSupport.force_encoding(s, 'UTF-8')
assert_same(s, result)
assert_equal('UTF-8', s.encoding.name)
assert_equal(2, s.bytesize)
assert_equal(1, s.length)
assert_equal('©', s)
else
# Ruby 1.8 - no-op
result = RubyCoreSupport.force_encoding(s, 'UTF-8')
assert_same(s, result)
assert_equal('©', s)
end
end
begin
SUPPORTS_ENCODING = !!Encoding
rescue NameError
SUPPORTS_ENCODING = false
end
def check_open_file_test_file_bytes(test_file)
if SUPPORTS_ENCODING
File.open(test_file, 'r') do |file|
file.binmode
data = file.read(2)
refute_nil(data)
assert_equal(2, data.length)
bytes = data.unpack('C2')
assert_equal(0xC2, bytes[0])
assert_equal(0xA9, bytes[1])
end
end
end
def check_open_file_test_file_content(file)
content = file.gets
refute_nil(content)
content.chomp!
if SUPPORTS_ENCODING
assert_equal('UTF-8', content.encoding.name)
assert_equal(1, content.length)
assert_equal(2, content.bytesize)
assert_equal('©', content)
else
assert_equal('x', content)
end
end
def test_open_file
Dir.mktmpdir('tzinfo_test') do |dir|
test_file = File.join(dir, 'test.txt')
file = RubyCoreSupport.open_file(test_file, 'w', :external_encoding => 'UTF-8')
begin
file.puts(SUPPORTS_ENCODING ? '©' : 'x')
ensure
file.close
end
check_open_file_test_file_bytes(test_file)
file = RubyCoreSupport.open_file(test_file, 'r', :external_encoding => 'UTF-8', :internal_encoding => 'UTF-8')
begin
check_open_file_test_file_content(file)
ensure
file.close
end
end
end
def test_open_file_block
Dir.mktmpdir('tzinfo_test') do |dir|
test_file = File.join(dir, 'test.txt')
RubyCoreSupport.open_file(test_file, 'w', :external_encoding => 'UTF-8') do |file|
file.puts(SUPPORTS_ENCODING ? '©' : 'x')
end
check_open_file_test_file_bytes(test_file)
RubyCoreSupport.open_file(test_file, 'r', :external_encoding => 'UTF-8', :internal_encoding => 'UTF-8') do |file|
check_open_file_test_file_content(file)
end
end
end
end