~ubuntu-branches/ubuntu/wily/tdiary/wily

« back to all changes in this revision

Viewing changes to vendor/json_pure-1.7.7/tests/test_json_addition.rb

  • Committer: Package Import Robot
  • Author(s): Hideki Yamane
  • Date: 2013-05-19 16:14:01 UTC
  • mfrom: (12.1.1 experimental)
  • Revision ID: package-import@ubuntu.com-20130519161401-hf5oyr8g8a94fsew
Tags: 3.2.2-2
Upload to unstable 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env ruby
 
2
# -*- coding:utf-8 -*-
 
3
 
 
4
require 'test/unit'
 
5
require File.join(File.dirname(__FILE__), 'setup_variant')
 
6
require 'json/add/core'
 
7
require 'json/add/complex'
 
8
require 'json/add/rational'
 
9
require 'json/add/bigdecimal'
 
10
require 'json/add/ostruct'
 
11
require 'date'
 
12
 
 
13
class TestJSONAddition < Test::Unit::TestCase
 
14
  include JSON
 
15
 
 
16
  class A
 
17
    def initialize(a)
 
18
      @a = a
 
19
    end
 
20
 
 
21
    attr_reader :a
 
22
 
 
23
    def ==(other)
 
24
      a == other.a
 
25
    end
 
26
 
 
27
    def self.json_create(object)
 
28
      new(*object['args'])
 
29
    end
 
30
 
 
31
    def to_json(*args)
 
32
      {
 
33
        'json_class'  => self.class.name,
 
34
        'args'        => [ @a ],
 
35
      }.to_json(*args)
 
36
    end
 
37
  end
 
38
 
 
39
  class A2 < A
 
40
    def to_json(*args)
 
41
      {
 
42
        'json_class'  => self.class.name,
 
43
        'args'        => [ @a ],
 
44
      }.to_json(*args)
 
45
    end
 
46
  end
 
47
 
 
48
  class B
 
49
    def self.json_creatable?
 
50
      false
 
51
    end
 
52
 
 
53
    def to_json(*args)
 
54
      {
 
55
        'json_class'  => self.class.name,
 
56
      }.to_json(*args)
 
57
    end
 
58
  end
 
59
 
 
60
  class C
 
61
    def self.json_creatable?
 
62
      false
 
63
    end
 
64
 
 
65
    def to_json(*args)
 
66
      {
 
67
        'json_class'  => 'TestJSONAddition::Nix',
 
68
      }.to_json(*args)
 
69
    end
 
70
  end
 
71
 
 
72
  def test_extended_json
 
73
    a = A.new(666)
 
74
    assert A.json_creatable?
 
75
    json = generate(a)
 
76
    a_again = JSON.parse(json, :create_additions => true)
 
77
    assert_kind_of a.class, a_again
 
78
    assert_equal a, a_again
 
79
  end
 
80
 
 
81
  def test_extended_json_default
 
82
    a = A.new(666)
 
83
    assert A.json_creatable?
 
84
    json = generate(a)
 
85
    a_hash = JSON.parse(json)
 
86
    assert_kind_of Hash, a_hash
 
87
  end
 
88
 
 
89
  def test_extended_json_disabled
 
90
    a = A.new(666)
 
91
    assert A.json_creatable?
 
92
    json = generate(a)
 
93
    a_again = JSON.parse(json, :create_additions => true)
 
94
    assert_kind_of a.class, a_again
 
95
    assert_equal a, a_again
 
96
    a_hash = JSON.parse(json, :create_additions => false)
 
97
    assert_kind_of Hash, a_hash
 
98
    assert_equal(
 
99
      {"args"=>[666], "json_class"=>"TestJSONAddition::A"}.sort_by { |k,| k },
 
100
      a_hash.sort_by { |k,| k }
 
101
    )
 
102
  end
 
103
 
 
104
  def test_extended_json_fail1
 
105
    b = B.new
 
106
    assert !B.json_creatable?
 
107
    json = generate(b)
 
108
    assert_equal({ "json_class"=>"TestJSONAddition::B" }, JSON.parse(json))
 
109
  end
 
110
 
 
111
  def test_extended_json_fail2
 
112
    c = C.new
 
113
    assert !C.json_creatable?
 
114
    json = generate(c)
 
115
    assert_raises(ArgumentError, NameError) { JSON.parse(json, :create_additions => true) }
 
116
  end
 
117
 
 
118
  def test_raw_strings
 
119
    raw = ''
 
120
    raw.respond_to?(:encode!) and raw.encode!(Encoding::ASCII_8BIT)
 
121
    raw_array = []
 
122
    for i in 0..255
 
123
      raw << i
 
124
      raw_array << i
 
125
    end
 
126
    json = raw.to_json_raw
 
127
    json_raw_object = raw.to_json_raw_object
 
128
    hash = { 'json_class' => 'String', 'raw'=> raw_array }
 
129
    assert_equal hash, json_raw_object
 
130
    assert_match(/\A\{.*\}\z/, json)
 
131
    assert_match(/"json_class":"String"/, json)
 
132
    assert_match(/"raw":\[0,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,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255\]/, json)
 
133
    raw_again = JSON.parse(json, :create_additions => true)
 
134
    assert_equal raw, raw_again
 
135
  end
 
136
 
 
137
  MyJsonStruct = Struct.new 'MyJsonStruct', :foo, :bar
 
138
 
 
139
  def test_core
 
140
    t = Time.now
 
141
    assert_equal t, JSON(JSON(t), :create_additions => true)
 
142
    d = Date.today
 
143
    assert_equal d, JSON(JSON(d), :create_additions => true)
 
144
    d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
 
145
    assert_equal d, JSON(JSON(d), :create_additions => true)
 
146
    assert_equal 1..10, JSON(JSON(1..10), :create_additions => true)
 
147
    assert_equal 1...10, JSON(JSON(1...10), :create_additions => true)
 
148
    assert_equal "a".."c", JSON(JSON("a".."c"), :create_additions => true)
 
149
    assert_equal "a"..."c", JSON(JSON("a"..."c"), :create_additions => true)
 
150
    s = MyJsonStruct.new 4711, 'foot'
 
151
    assert_equal s, JSON(JSON(s), :create_additions => true)
 
152
    struct = Struct.new :foo, :bar
 
153
    s = struct.new 4711, 'foot'
 
154
    assert_raises(JSONError) { JSON(s) }
 
155
    begin
 
156
      raise TypeError, "test me"
 
157
    rescue TypeError => e
 
158
      e_json = JSON.generate e
 
159
      e_again = JSON e_json, :create_additions => true
 
160
      assert_kind_of TypeError, e_again
 
161
      assert_equal e.message, e_again.message
 
162
      assert_equal e.backtrace, e_again.backtrace
 
163
    end
 
164
    assert_equal(/foo/, JSON(JSON(/foo/), :create_additions => true))
 
165
    assert_equal(/foo/i, JSON(JSON(/foo/i), :create_additions => true))
 
166
  end
 
167
 
 
168
  def test_utc_datetime
 
169
    now = Time.now
 
170
    d = DateTime.parse(now.to_s, :create_additions => true)                    # usual case
 
171
    assert_equal d, JSON.parse(d.to_json, :create_additions => true)
 
172
    d = DateTime.parse(now.utc.to_s)                # of = 0
 
173
    assert_equal d, JSON.parse(d.to_json, :create_additions => true)
 
174
    d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(1,24))
 
175
    assert_equal d, JSON.parse(d.to_json, :create_additions => true)
 
176
    d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
 
177
    assert_equal d, JSON.parse(d.to_json, :create_additions => true)
 
178
  end
 
179
 
 
180
  def test_rational_complex
 
181
    assert_equal Rational(2, 9), JSON.parse(JSON(Rational(2, 9)), :create_additions => true)
 
182
    assert_equal Complex(2, 9), JSON.parse(JSON(Complex(2, 9)), :create_additions => true)
 
183
  end
 
184
 
 
185
  def test_bigdecimal
 
186
    assert_equal BigDecimal('3.141', 23), JSON(JSON(BigDecimal('3.141', 23)), :create_additions => true)
 
187
    assert_equal BigDecimal('3.141', 666), JSON(JSON(BigDecimal('3.141', 666)), :create_additions => true)
 
188
  end
 
189
 
 
190
  def test_ostruct
 
191
    o = OpenStruct.new
 
192
    # XXX this won't work; o.foo = { :bar => true }
 
193
    o.foo = { 'bar' => true }
 
194
    assert_equal o, JSON.parse(JSON(o), :create_additions => true)
 
195
  end
 
196
end