1require 'psych/helper' 2require 'date' 3 4module Psych 5 class TestScalarScanner < TestCase 6 attr_reader :ss 7 8 def setup 9 super 10 @ss = Psych::ScalarScanner.new 11 end 12 13 def test_scan_time 14 { '2001-12-15T02:59:43.1Z' => Time.utc(2001, 12, 15, 02, 59, 43, 100000), 15 '2001-12-14t21:59:43.10-05:00' => Time.utc(2001, 12, 15, 02, 59, 43, 100000), 16 '2001-12-14 21:59:43.10 -5' => Time.utc(2001, 12, 15, 02, 59, 43, 100000), 17 '2001-12-15 2:59:43.10' => Time.utc(2001, 12, 15, 02, 59, 43, 100000), 18 '2011-02-24 11:17:06 -0800' => Time.utc(2011, 02, 24, 19, 17, 06) 19 }.each do |time_str, time| 20 assert_equal time, @ss.tokenize(time_str) 21 end 22 end 23 24 def test_scan_bad_time 25 [ '2001-12-15T02:59:73.1Z', 26 '2001-12-14t90:59:43.10-05:00', 27 '2001-92-14 21:59:43.10 -5', 28 '2001-12-15 92:59:43.10', 29 '2011-02-24 81:17:06 -0800', 30 ].each do |time_str| 31 assert_equal time_str, @ss.tokenize(time_str) 32 end 33 end 34 35 def test_scan_bad_dates 36 x = '2000-15-01' 37 assert_equal x, @ss.tokenize(x) 38 39 x = '2000-10-51' 40 assert_equal x, @ss.tokenize(x) 41 42 x = '2000-10-32' 43 assert_equal x, @ss.tokenize(x) 44 end 45 46 def test_scan_good_edge_date 47 x = '2000-1-31' 48 assert_equal Date.strptime(x, '%Y-%m-%d'), @ss.tokenize(x) 49 end 50 51 def test_scan_bad_edge_date 52 x = '2000-11-31' 53 assert_equal x, @ss.tokenize(x) 54 end 55 56 def test_scan_date 57 date = '1980-12-16' 58 token = @ss.tokenize date 59 assert_equal 1980, token.year 60 assert_equal 12, token.month 61 assert_equal 16, token.day 62 end 63 64 def test_scan_inf 65 assert_equal(1 / 0.0, ss.tokenize('.inf')) 66 end 67 68 def test_scan_minus_inf 69 assert_equal(-1 / 0.0, ss.tokenize('-.inf')) 70 end 71 72 def test_scan_nan 73 assert ss.tokenize('.nan').nan? 74 end 75 76 def test_scan_null 77 assert_equal nil, ss.tokenize('null') 78 assert_equal nil, ss.tokenize('~') 79 assert_equal nil, ss.tokenize('') 80 end 81 82 def test_scan_symbol 83 assert_equal :foo, ss.tokenize(':foo') 84 end 85 86 def test_scan_sexagesimal_float 87 assert_equal 685230.15, ss.tokenize('190:20:30.15') 88 end 89 90 def test_scan_sexagesimal_int 91 assert_equal 685230, ss.tokenize('190:20:30') 92 end 93 94 def test_scan_float 95 assert_equal 1.2, ss.tokenize('1.2') 96 end 97 98 def test_scan_true 99 assert_equal true, ss.tokenize('true') 100 end 101 102 def test_scan_strings_starting_with_underscores 103 assert_equal "_100", ss.tokenize('_100') 104 end 105 end 106end 107