1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/-ext-/test_printf.rb
Jeremy Evans ffd0820ab3 Deprecate taint/trust and related methods, and make the methods no-ops
This removes the related tests, and puts the related specs behind
version guards.  This affects all code in lib, including some
libraries that may want to support older versions of Ruby.
2019-11-18 01:00:25 +02:00

184 lines
4.3 KiB
Ruby

# frozen_string_literal: false
require 'test/unit'
require "-test-/printf"
require_relative '../ruby/allpairs'
class Test_SPrintf < Test::Unit::TestCase
def to_s
"#{self.class}:#{object_id}"
end
def inspect
"<#{self.class}:#{object_id}>"
end
def test_to_str
assert_equal("<#{self.class}:#{object_id}>", Bug::Printf.s(self))
end
def test_inspect
assert_equal("{<#{self.class}:#{object_id}>}", Bug::Printf.v(self))
end
def test_quote
assert_equal('["\n"]', Bug::Printf.q("\n"))
assert_equal('[aaa]', Bug::Printf.q('aaa'))
assert_equal('[a a]', Bug::Printf.q('a a'))
assert_equal('[]', Bug::Printf.q(''))
assert_equal('[""]', Bug::Printf.q(:''))
end
def test_encoding
def self.to_s
"\u{3042 3044 3046 3048 304a}"
end
assert_equal("<\u{3042 3044 3046 3048 304a}>", Bug::Printf.s(self))
end
VS = [
#-0x1000000000000000000000000000000000000000000000002,
#-0x1000000000000000000000000000000000000000000000001,
#-0x1000000000000000000000000000000000000000000000000,
#-0xffffffffffffffffffffffffffffffffffffffffffffffff,
#-0x1000000000000000000000002,
#-0x1000000000000000000000001,
#-0x1000000000000000000000000,
#-0xffffffffffffffffffffffff,
-0x10000000000000002,
-0x10000000000000001,
-0x10000000000000000,
-0xffffffffffffffff,
-0x4000000000000002,
-0x4000000000000001,
-0x4000000000000000,
-0x3fffffffffffffff,
-0x100000002,
-0x100000001,
-0x100000000,
-0xffffffff,
#-0xc717a08d, # 0xc717a08d * 0x524b2245 = 0x4000000000000001
-0x80000002,
-0x80000001,
-0x80000000,
-0x7fffffff,
#-0x524b2245,
-0x40000002,
-0x40000001,
-0x40000000,
-0x3fffffff,
#-0x10002,
#-0x10001,
#-0x10000,
#-0xffff,
#-0x8101, # 0x8101 * 0x7f01 = 0x40000001
#-0x8002,
#-0x8001,
#-0x8000,
#-0x7fff,
#-0x7f01,
#-65,
#-64,
#-63,
#-62,
#-33,
#-32,
#-31,
#-30,
-3,
-2,
-1,
0,
1,
2,
3,
#30,
#31,
#32,
#33,
#62,
#63,
#64,
#65,
#0x7f01,
#0x7ffe,
#0x7fff,
#0x8000,
#0x8001,
#0x8101,
#0xfffe,
#0xffff,
#0x10000,
#0x10001,
0x3ffffffe,
0x3fffffff,
0x40000000,
0x40000001,
#0x524b2245,
0x7ffffffe,
0x7fffffff,
0x80000000,
0x80000001,
#0xc717a08d,
0xfffffffe,
0xffffffff,
0x100000000,
0x100000001,
0x3ffffffffffffffe,
0x3fffffffffffffff,
0x4000000000000000,
0x4000000000000001,
0xfffffffffffffffe,
0xffffffffffffffff,
0x10000000000000000,
0x10000000000000001,
#0xffffffffffffffffffffffff,
#0x1000000000000000000000000,
#0x1000000000000000000000001,
#0xffffffffffffffffffffffffffffffffffffffffffffffff,
#0x1000000000000000000000000000000000000000000000000,
#0x1000000000000000000000000000000000000000000000001
]
VS.reverse!
FLAGS = [[nil, ' '], [nil, '#'], [nil, '+'], [nil, '-'], [nil, '0']]
def self.assertions_format_integer(format, type, **opts)
proc {
VS.each {|v|
begin
r = Bug::Printf.(type, v, **opts)
rescue RangeError
else
e = sprintf format, v
assert_equal([e, format], r, "rb_sprintf(#{format.dump}, #{v})")
end
}
}
end
AllPairs.each(%w[d],
# octal and hexadecimal deal with negative values differently
[nil, 0, 5, 20],
[nil, true, 0], # 8, 20
*FLAGS) {
|type, width, prec, sp, hs, pl, mi, zr|
precision = ".#{prec unless prec == true}" if prec
format = "%#{sp}#{hs}#{pl}#{mi}#{zr}#{width}#{precision}#{type}"
define_method("test_format_integer(#{format})",
assertions_format_integer(format, type,
space: sp, hash: hs,
plus: pl, minus: mi,
zero: zr, width: width,
prec: prec))
}
def test_string_prec
assert_equal("a", Bug::Printf.("s", "a", prec: 3)[0])
assert_equal(" a", Bug::Printf.("s", "a", width: 3, prec: 3)[0])
assert_equal("a ", Bug::Printf.("s", "a", minus: true, width: 3, prec: 3)[0])
end
def test_snprintf_count
assert_equal(3, Bug::Printf.sncount("foo"))
end
end