1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/test/psych/test_scalar_scanner.rb
tenderlove ec3056ae22 * ext/psych/lib/psych/scalar_scanner.rb: Ignore bad timestamps. If
something looks like a timestamp but has an invalid component, treat
  it as a string instead of throwing an ArgumentError.
  Thanks Rhett Sutphin!

* test/psych/test_scalar_scanner.rb: appropriate tests.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-10-22 21:09:56 +00:00

106 lines
2.5 KiB
Ruby

require 'psych/helper'
require 'date'
module Psych
class TestScalarScanner < TestCase
attr_reader :ss
def setup
super
@ss = Psych::ScalarScanner.new
end
def test_scan_time
{ '2001-12-15T02:59:43.1Z' => Time.utc(2001, 12, 15, 02, 59, 43, 100000),
'2001-12-14t21:59:43.10-05:00' => Time.utc(2001, 12, 15, 02, 59, 43, 100000),
'2001-12-14 21:59:43.10 -5' => Time.utc(2001, 12, 15, 02, 59, 43, 100000),
'2001-12-15 2:59:43.10' => Time.utc(2001, 12, 15, 02, 59, 43, 100000),
'2011-02-24 11:17:06 -0800' => Time.utc(2011, 02, 24, 19, 17, 06)
}.each do |time_str, time|
assert_equal time, @ss.tokenize(time_str)
end
end
def test_scan_bad_time
[ '2001-12-15T02:59:73.1Z',
'2001-12-14t90:59:43.10-05:00',
'2001-92-14 21:59:43.10 -5',
'2001-12-15 92:59:43.10',
'2011-02-24 81:17:06 -0800',
].each do |time_str|
assert_equal time_str, @ss.tokenize(time_str)
end
end
def test_scan_bad_dates
x = '2000-15-01'
assert_equal x, @ss.tokenize(x)
x = '2000-10-51'
assert_equal x, @ss.tokenize(x)
x = '2000-10-32'
assert_equal x, @ss.tokenize(x)
end
def test_scan_good_edge_date
x = '2000-1-31'
assert_equal Date.strptime(x, '%Y-%m-%d'), @ss.tokenize(x)
end
def test_scan_bad_edge_date
x = '2000-11-31'
assert_equal x, @ss.tokenize(x)
end
def test_scan_date
date = '1980-12-16'
token = @ss.tokenize date
assert_equal 1980, token.year
assert_equal 12, token.month
assert_equal 16, token.day
end
def test_scan_inf
assert_equal(1 / 0.0, ss.tokenize('.inf'))
end
def test_scan_minus_inf
assert_equal(-1 / 0.0, ss.tokenize('-.inf'))
end
def test_scan_nan
assert ss.tokenize('.nan').nan?
end
def test_scan_null
assert_equal nil, ss.tokenize('null')
assert_equal nil, ss.tokenize('~')
assert_equal nil, ss.tokenize('')
end
def test_scan_symbol
assert_equal :foo, ss.tokenize(':foo')
end
def test_scan_sexagesimal_float
assert_equal 685230.15, ss.tokenize('190:20:30.15')
end
def test_scan_sexagesimal_int
assert_equal 685230, ss.tokenize('190:20:30')
end
def test_scan_float
assert_equal 1.2, ss.tokenize('1.2')
end
def test_scan_true
assert_equal true, ss.tokenize('true')
end
def test_scan_strings_starting_with_underscores
assert_equal "_100", ss.tokenize('_100')
end
end
end