ruby-json 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. data/COPYING +504 -0
  2. data/README +16 -0
  3. data/doc/classes/Array.html +162 -0
  4. data/doc/classes/Array.src/M000011.html +27 -0
  5. data/doc/classes/Array.src/M000012.html +32 -0
  6. data/doc/classes/ArrayTest.html +129 -0
  7. data/doc/classes/ArrayTest.src/M000014.html +28 -0
  8. data/doc/classes/FalseClass.html +131 -0
  9. data/doc/classes/FalseClass.src/M000013.html +18 -0
  10. data/doc/classes/Hash.html +156 -0
  11. data/doc/classes/Hash.src/M000009.html +29 -0
  12. data/doc/classes/Hash.src/M000010.html +45 -0
  13. data/doc/classes/JSON.html +103 -0
  14. data/doc/classes/JSON/Lexer.html +411 -0
  15. data/doc/classes/JSON/Lexer.src/M000022.html +19 -0
  16. data/doc/classes/JSON/Lexer.src/M000023.html +18 -0
  17. data/doc/classes/JSON/Lexer.src/M000024.html +18 -0
  18. data/doc/classes/JSON/Lexer.src/M000025.html +20 -0
  19. data/doc/classes/JSON/Lexer.src/M000026.html +20 -0
  20. data/doc/classes/JSON/Lexer.src/M000027.html +21 -0
  21. data/doc/classes/JSON/Lexer.src/M000028.html +43 -0
  22. data/doc/classes/JSON/Lexer.src/M000029.html +67 -0
  23. data/doc/classes/JSON/Lexer.src/M000030.html +46 -0
  24. data/doc/classes/JSON/Lexer.src/M000031.html +26 -0
  25. data/doc/classes/JSON/Lexer.src/M000032.html +61 -0
  26. data/doc/classes/JSON/Lexer.src/M000033.html +29 -0
  27. data/doc/classes/JSON/Lexer.src/M000034.html +18 -0
  28. data/doc/classes/JSON/Lexer.src/M000035.html +19 -0
  29. data/doc/classes/JSON/Lexer.src/M000036.html +20 -0
  30. data/doc/classes/LexerTest.html +219 -0
  31. data/doc/classes/LexerTest.src/M000002.html +24 -0
  32. data/doc/classes/LexerTest.src/M000003.html +22 -0
  33. data/doc/classes/LexerTest.src/M000004.html +26 -0
  34. data/doc/classes/LexerTest.src/M000005.html +23 -0
  35. data/doc/classes/LexerTest.src/M000006.html +31 -0
  36. data/doc/classes/LexerTest.src/M000007.html +27 -0
  37. data/doc/classes/LexerTest.src/M000008.html +58 -0
  38. data/doc/classes/NilClass.html +131 -0
  39. data/doc/classes/NilClass.src/M000017.html +18 -0
  40. data/doc/classes/Numeric.html +131 -0
  41. data/doc/classes/Numeric.src/M000016.html +18 -0
  42. data/doc/classes/Object.html +176 -0
  43. data/doc/classes/Object.src/M000018.html +18 -0
  44. data/doc/classes/ObjectTest.html +129 -0
  45. data/doc/classes/ObjectTest.src/M000015.html +28 -0
  46. data/doc/classes/String.html +151 -0
  47. data/doc/classes/String.src/M000019.html +18 -0
  48. data/doc/classes/String.src/M000020.html +46 -0
  49. data/doc/classes/TrueClass.html +131 -0
  50. data/doc/classes/TrueClass.src/M000021.html +18 -0
  51. data/doc/created.rid +1 -0
  52. data/doc/files/install_rb.html +194 -0
  53. data/doc/files/install_rb.src/M000001.html +43 -0
  54. data/doc/files/json/lexer_rb.html +156 -0
  55. data/doc/files/json/objects_rb.html +154 -0
  56. data/doc/files/test/arraytest_rb.html +150 -0
  57. data/doc/files/test/lexertest_rb.html +150 -0
  58. data/doc/files/test/objtest_rb.html +150 -0
  59. data/doc/fr_class_index.html +39 -0
  60. data/doc/fr_file_index.html +32 -0
  61. data/doc/fr_method_index.html +62 -0
  62. data/doc/index.html +24 -0
  63. data/doc/rdoc-style.css +175 -0
  64. data/install.rb +67 -0
  65. data/lib/json/lexer.rb +297 -0
  66. data/lib/json/objects.rb +201 -0
  67. data/ruby-json.gemspec +25 -0
  68. data/test/arraytest.rb +45 -0
  69. data/test/lexertest.rb +146 -0
  70. data/test/objtest.rb +45 -0
  71. metadata +126 -0
@@ -0,0 +1,201 @@
1
+ #
2
+ # JSON Objects
3
+ # Copyright (C) 2003,2005 Rafael R. Sevilla <dido@imperium.ph>
4
+ # This file is part of JSON for Ruby
5
+ #
6
+ # JSON for Ruby is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public License
8
+ # as published by the Free Software Foundation; either version 2.1 of
9
+ # the License, or (at your option) any later version.
10
+ #
11
+ # JSON for Ruby is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with JSON for Ruby; if not, write to the Free
18
+ # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19
+ # 02111-1307 USA.
20
+ #
21
+ # Author:: Rafael R. Sevilla (mailto:dido@imperium.ph)
22
+ # Heavily modified by Adam Kramer (mailto:adam@the-kramers.net)
23
+ # Copyright:: Copyright (c) 2003,2005 Rafael R. Sevilla
24
+ # License:: GNU Lesser General Public License
25
+ # $Id: objects.rb,v 1.1 2005/01/28 02:08:45 didosevilla Exp $
26
+ #
27
+
28
+
29
+ class Object
30
+ def to_json #all strings in json need to have double quotes around them, treat random objects as strings
31
+ String.to_json(to_s)
32
+ end
33
+ end
34
+
35
+
36
+ class NilClass
37
+ def to_json
38
+ "null"
39
+ end
40
+ end
41
+ class TrueClass
42
+ def to_json
43
+ "true"
44
+ end
45
+ end
46
+
47
+ class FalseClass
48
+ def to_json
49
+ "false"
50
+ end
51
+ end
52
+
53
+ class Numeric
54
+ def to_json
55
+ to_s
56
+ end
57
+ end
58
+
59
+ class String
60
+ # produce a string in double quotes with all the necessary quoting
61
+ # done
62
+ def to_json
63
+ return String.to_json(self)
64
+ end
65
+
66
+ def self.to_json(str)
67
+ return "\"\"" if (str.length == 0)
68
+ newstr = "\""
69
+ str.each_byte {
70
+ |b|
71
+ c = b.chr
72
+ case c
73
+ when /\\|\">/
74
+ newstr << "\\" + c
75
+ when "\b"
76
+ newstr << "\\b"
77
+ when "\t"
78
+ newstr << "\\t"
79
+ when "\n"
80
+ newstr << "\\n"
81
+ when "\f"
82
+ newstr << "\\f"
83
+ when "\r"
84
+ newstr << "\\r"
85
+ else
86
+ if (c < ' ')
87
+ t = "000" + sprintf("%0x", b)
88
+ newstr << ("\\u" + t[0,t.length - 4])
89
+ else
90
+ newstr << c
91
+ end
92
+ end
93
+ }
94
+ newstr += '"'
95
+ return(newstr)
96
+ end
97
+ end
98
+
99
+ class Array
100
+
101
+ # This method will return a string giving the contents of the JSON
102
+ # array in standard JSON format.
103
+ def to_json
104
+ retval = '['
105
+
106
+ first=true
107
+ self.each { |obj|
108
+ retval << ',' unless first
109
+ retval << obj.to_json
110
+ first=false
111
+ }
112
+ retval << "]"
113
+ return(retval)
114
+ end
115
+
116
+ # This method will parse a JSON array from the passed lexer
117
+ # object. It takes a lexer object which is about to read a JSON
118
+ # array. It raises a runtime error otherwise. It returns the
119
+ # original JSON array. This method is not intended to be used
120
+ # directly.
121
+ # =====Parameters
122
+ # +lexer+:: Lexer object to use
123
+ def from_json(lexer)
124
+ raise "A JSON Array must begin with '['" if (lexer.nextclean != "[")
125
+ return if lexer.nextclean == ']'
126
+ lexer.back
127
+ loop {
128
+ self << lexer.nextvalue
129
+ case lexer.nextclean
130
+ when ','
131
+ return if (lexer.nextclean == ']')
132
+ lexer.back
133
+ when ']'
134
+ return(self)
135
+ else
136
+ raise "Expected a ',' or ']'"
137
+ end
138
+ }
139
+ end
140
+ end
141
+
142
+
143
+
144
+
145
+ class Hash
146
+
147
+ # This method will serialize the hash into regular JSON format.
148
+ def to_json
149
+ retval = "{"
150
+
151
+ first = true
152
+ self.each {|key, val|
153
+ retval << "," unless first
154
+ key = key.to_s #keys in json hashes need to be strings, nothing else.
155
+ retval << key.to_json + ":"
156
+ retval << val.to_json
157
+ first = false
158
+ }
159
+ retval << "}"
160
+ return(retval)
161
+ end
162
+
163
+ # This method will parse a JSON object from the passed lexer
164
+ # object. It takes a lexer object which is about to read a JSON
165
+ # object. It raises a runtime error otherwise. It returns the
166
+ # original JSON object. This method probably shouldn't be used
167
+ # directly.
168
+ # =====Parameters
169
+ def from_json(lexer)
170
+ lexer.unescape if (lexer.nextclean == '%')
171
+ lexer.back
172
+ raise "A JSON Object must begin with '{'" if (lexer.nextclean != "{")
173
+ loop {
174
+ c = lexer.nextclean
175
+ key = nil
176
+ case c
177
+ when '\0'
178
+ raise "A JSON Object must end with '}'"
179
+ when '}'
180
+ return;
181
+ else
182
+ lexer.back
183
+ key = lexer.nextvalue().to_s()
184
+ end
185
+ raise "Expected a ':' after a key" if (lexer.nextclean() != ':')
186
+ self[key] = lexer.nextvalue()
187
+ case lexer.nextclean()
188
+ when ','
189
+ return if (lexer.nextclean() == '}')
190
+ lexer.back
191
+ when '}'
192
+ return(self)
193
+ else
194
+ raise "Expected a ',' or '}'"
195
+ end
196
+ }
197
+ return(self)
198
+ end
199
+
200
+ end
201
+
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{ruby-json}
3
+ s.version = "1.1.1"
4
+ s.date = %q{2005-01-28}
5
+ s.summary = %q{ruby-json is a library for using the JavaScript Object Notation (JSON) under Ruby.}
6
+ s.require_paths = ["json"]
7
+ s.email = %q{dido@imperium.ph}
8
+ s.homepage = %q{http://sourceforge.net/projects/json}
9
+ s.description = %q{ruby-json is a library able to serialize and deserialize Ruby objects to and from their JSON representation.}
10
+
11
+ s.require_path = 'lib'
12
+ s.autorequire = %q{json/lexer}
13
+ s.has_rdoc = true
14
+ s.files = ["doc", "lib/json", "test",
15
+ "README", "ruby-json.gemspec", "install.rb", "COPYING",
16
+ "doc/files", "doc/index.html", "doc/rdoc-style.css",
17
+ "doc/fr_method_index.html", "doc/fr_class_index.html",
18
+ "doc/fr_file_index.html", "doc/created.rid", "doc/classes", "doc/files/json",
19
+ "doc/files/test", "doc/files/install_rb.html", "doc/files/install_rb.src", "doc/files/json/lexer_rb.html", "doc/files/json/objects_rb.html", "doc/files/test/lexertest_rb.html", "doc/files/test/objtest_rb.html", "doc/files/test/arraytest_rb.html", "doc/files/install_rb.src/M000001.html", "doc/classes/JSON", "doc/classes/Hash.html", "doc/classes/ObjectTest.html", "doc/classes/JSON.html", "doc/classes/String.html", "doc/classes/Array.src", "doc/classes/Numeric.src", "doc/classes/Hash.src", "doc/classes/NilClass.html", "doc/classes/LexerTest.src", "doc/classes/String.src", "doc/classes/Object.src", "doc/classes/Object.html", "doc/classes/FalseClass.src", "doc/classes/Array.html", "doc/classes/ObjectTest.src", "doc/classes/TrueClass.src", "doc/classes/TrueClass.html", "doc/classes/FalseClass.html", "doc/classes/LexerTest.html", "doc/classes/NilClass.src", "doc/classes/ArrayTest.html", "doc/classes/Numeric.html", "doc/classes/ArrayTest.src", "doc/classes/JSON/Lexer.src", "doc/classes/JSON/Lexer.html", "doc/classes/JSON/Lexer.src/M000022.html", "doc/classes/JSON/Lexer.src/M000023.html", "doc/classes/JSON/Lexer.src/M000024.html", "doc/classes/JSON/Lexer.src/M000025.html", "doc/classes/JSON/Lexer.src/M000026.html", "doc/classes/JSON/Lexer.src/M000027.html", "doc/classes/JSON/Lexer.src/M000028.html", "doc/classes/JSON/Lexer.src/M000029.html", "doc/classes/JSON/Lexer.src/M000030.html", "doc/classes/JSON/Lexer.src/M000031.html", "doc/classes/JSON/Lexer.src/M000032.html", "doc/classes/JSON/Lexer.src/M000033.html", "doc/classes/JSON/Lexer.src/M000034.html", "doc/classes/JSON/Lexer.src/M000035.html", "doc/classes/JSON/Lexer.src/M000036.html", "doc/classes/Array.src/M000011.html", "doc/classes/Array.src/M000012.html", "doc/classes/Numeric.src/M000016.html", "doc/classes/Hash.src/M000009.html", "doc/classes/Hash.src/M000010.html", "doc/classes/LexerTest.src/M000008.html", "doc/classes/LexerTest.src/M000002.html", "doc/classes/LexerTest.src/M000003.html", "doc/classes/LexerTest.src/M000004.html", "doc/classes/LexerTest.src/M000005.html", "doc/classes/LexerTest.src/M000006.html", "doc/classes/LexerTest.src/M000007.html", "doc/classes/String.src/M000019.html", "doc/classes/String.src/M000020.html", "doc/classes/Object.src/M000018.html", "doc/classes/FalseClass.src/M000013.html", "doc/classes/ObjectTest.src/M000015.html", "doc/classes/TrueClass.src/M000021.html", "doc/classes/NilClass.src/M000017.html", "doc/classes/ArrayTest.src/M000014.html",
20
+ "lib/json/objects.rb",
21
+ "lib/json/lexer.rb",
22
+ "test/lexertest.rb",
23
+ "test/objtest.rb",
24
+ "test/arraytest.rb"]
25
+ end
@@ -0,0 +1,45 @@
1
+ #
2
+ # Unit Tests for JSON Arrays
3
+ # Copyright (C) 2002 Rafael R. Sevilla <dido@imperium.ph>
4
+ # This file is part of JSON for Ruby
5
+ #
6
+ # JSON for Ruby is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public License
8
+ # as published by the Free Software Foundation; either version 2.1 of
9
+ # the License, or (at your option) any later version.
10
+ #
11
+ # JSON for Ruby is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with JSON for Ruby; if not, write to the Free
18
+ # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19
+ # 02111-1307 USA.
20
+ #
21
+ # Author:: Rafael R. Sevilla (mailto:dido@imperium.ph)
22
+ # Copyright:: Copyright (c) 2003 Rafael R. Sevilla
23
+ # License:: GNU Lesser General Public License
24
+ # $Id: arraytest.rb,v 1.2 2005/01/28 02:59:02 didosevilla Exp $
25
+ #
26
+
27
+ require 'test/unit'
28
+ require 'json/lexer'
29
+ require 'json/objects'
30
+
31
+ class ArrayTest < Test::Unit::TestCase
32
+ def test_array_to_json
33
+ array = Array.new
34
+ array[0] = 'bar'
35
+ array[1] = 1
36
+ array[2] = 2.7182818
37
+
38
+ str = array.to_json
39
+ sarray = JSON::Lexer.new(str).nextvalue
40
+ assert(sarray.class == Array, "array was not generated by deserialization")
41
+ assert(sarray[0] == 'bar', "error in serialization of a string to JSON")
42
+ assert(sarray[1] == 1, "error in serialization of a FixNum to JSON")
43
+ assert(sarray[2] == 2.7182818, "error in serialization of a float to JSON")
44
+ end
45
+ end
@@ -0,0 +1,146 @@
1
+ #
2
+ # Unit tests for JSON Lexer
3
+ # Copyright (C) 2003 Rafael R. Sevilla <dido@imperium.ph>
4
+ # This file is part of JSON for Ruby
5
+ #
6
+ # JSON for Ruby is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public License
8
+ # as published by the Free Software Foundation; either version 2.1 of
9
+ # the License, or (at your option) any later version.
10
+ #
11
+ # JSON for Ruby is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with JSON for Ruby; if not, write to the Free
18
+ # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19
+ # 02111-1307 USA.
20
+ #
21
+ # Author:: Rafael R. Sevilla (mailto:dido@imperium.ph)
22
+ # Copyright:: Copyright (c) 2003 Rafael R. Sevilla
23
+ # License:: GNU Lesser General Public License
24
+ # $Id: lexertest.rb,v 1.3 2005/01/28 03:03:51 didosevilla Exp $
25
+ #
26
+
27
+ require 'test/unit'
28
+ #require 'test/unit/ui/console/testrunner'
29
+ require 'json/lexer'
30
+ require 'json/objects'
31
+
32
+ class LexerTest < Test::Unit::TestCase
33
+ def test_nextchar_back
34
+ str = "some_string"
35
+ lex = JSON::Lexer.new(str)
36
+ c = lex.nextchar
37
+ assert(c == 's', "wrong character read")
38
+ lex.back
39
+ c = lex.nextchar
40
+ assert(c == 's', "backing up produces inconsistent results")
41
+ end
42
+
43
+ def test_ending
44
+ lex = JSON::Lexer.new("ab")
45
+ lex.nextchar
46
+ assert(lex.more?, "more? method produces wrong results (no more when there should be more)")
47
+ lex.nextchar
48
+ assert(!lex.more?, "more? method produces wrong results (more when there are no more)")
49
+ end
50
+
51
+ def test_nextmatch
52
+ lex = JSON::Lexer.new("abc")
53
+ c = ""
54
+ assert_nothing_raised {
55
+ c = lex.nextmatch('a')
56
+ }
57
+ assert(c == 'a', "nextmatch is wrong")
58
+ assert_raises(RuntimeError, "exception not raised for not found") {
59
+ c = lex.nextmatch('a')
60
+ }
61
+ end
62
+
63
+ def test_nextchars
64
+ lex = JSON::Lexer.new("some_string")
65
+ str = lex.nextchars(4)
66
+ assert(str == 'some', "nextchars doesn't work correctly")
67
+ assert_raises(RuntimeError, "exception not raised for substring bounds error") {
68
+ lex.nextchars(10)
69
+ }
70
+ end
71
+
72
+ def test_nextclean
73
+ str1 = "/\t// comment\nb"
74
+ lex = JSON::Lexer.new(str1)
75
+ assert(lex.nextclean == '/', "nextclean seems to have problems")
76
+ assert(lex.nextclean == 'b', "// comment processing has problems")
77
+ str2 = "/ /* comment */b"
78
+ lex = JSON::Lexer.new(str2)
79
+ assert(lex.nextclean == '/', "nextclean seems to have problems")
80
+ assert(lex.nextclean == 'b', "/* .. */ comment processing has problems")
81
+ # test unclosed comments
82
+ lex = JSON::Lexer.new("a/* unclosed comment")
83
+ assert(lex.nextclean == 'a', "nextclean seems to have problems")
84
+ assert_raises(RuntimeError, "unclosed comment doesn't raise exceptions") {
85
+ lex.nextclean
86
+ }
87
+ end
88
+
89
+ def test_nextstring
90
+ str1 = "str\""
91
+ lex = JSON::Lexer.new(str1)
92
+ assert(lex.nextstring('"') == "str", "string processing has problems")
93
+ str2 = '\b\t\n\f\r"'
94
+ lex = JSON::Lexer.new(str2)
95
+ assert(lex.nextstring('"') == "\b\t\n\f\r", "escape sequence processing has bugs")
96
+ # UTF8 conversion tests for escape sequences
97
+ str3 = '\u1234"'
98
+ lex = JSON::Lexer.new(str3)
99
+ assert(lex.nextstring('"') == "\341\210\224", "Unicode escape sequence processing has bugs")
100
+ end
101
+
102
+ def test_nextvalue
103
+ str = "false"
104
+ lex = JSON::Lexer.new(str)
105
+ assert(lex.nextvalue == false, "error parsing false");
106
+
107
+ str = "true"
108
+ lex = JSON::Lexer.new(str)
109
+ assert(lex.nextvalue == true, "error parsing true");
110
+
111
+ str = "31337"
112
+ lex = JSON::Lexer.new(str)
113
+ assert(lex.nextvalue == 31337, "error parsing integer");
114
+
115
+ str = "0.577289"
116
+ lex = JSON::Lexer.new(str)
117
+ assert(lex.nextvalue == 0.577289, "error parsing float")
118
+
119
+ str = "\"123\n\""
120
+ lex = JSON::Lexer.new(str)
121
+ assert(lex.nextvalue == "123\n", "error parsing string")
122
+
123
+ str = "null"
124
+ lex = JSON::Lexer.new(str)
125
+ assert(lex.nextvalue.nil?, "error parsing null")
126
+
127
+ str = "[ 1, \"abc\", 2.7182818 ]"
128
+ lex = JSON::Lexer.new(str)
129
+ array = lex.nextvalue
130
+ assert(array[0] == 1, "error parsing an array (0th elem)")
131
+ assert(array[1] == "abc", "error parsing an array (1st elem)")
132
+ assert(array[2] = 2.7182818, "error parsing an array (2nd elem)")
133
+
134
+ str = '{"foo":"bar", "xyz":1, "e":2.7182818}'
135
+ lex = JSON::Lexer.new(str)
136
+ obj = lex.nextvalue
137
+ assert(obj["foo"] == "bar", "error parsing an object ('foo' elem)")
138
+ assert(obj["xyz"] == 1, "error parsing an object ('xyz' elem)")
139
+ assert(obj["e"] == 2.7182818, "error parsing an object ('e' elem)")
140
+
141
+ str = "false"
142
+ lex = JSON::Lexer.new(str)
143
+ assert(lex.nextvalue == false, "error parsing false");
144
+ end
145
+ end
146
+
@@ -0,0 +1,45 @@
1
+ #
2
+ # Unit Tests for JSON Objects
3
+ # Copyright (C) 2002 Rafael R. Sevilla <dido@imperium.ph>
4
+ # This file is part of JSON for Ruby
5
+ #
6
+ # JSON for Ruby is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public License
8
+ # as published by the Free Software Foundation; either version 2.1 of
9
+ # the License, or (at your option) any later version.
10
+ #
11
+ # JSON for Ruby is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with JSON for Ruby; if not, write to the Free
18
+ # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19
+ # 02111-1307 USA.
20
+ #
21
+ # Author:: Rafael R. Sevilla (mailto:dido@imperium.ph)
22
+ # Copyright:: Copyright (c) 2003 Rafael R. Sevilla
23
+ # License:: GNU Lesser General Public License
24
+ # $Id: objtest.rb,v 1.2 2005/01/28 02:59:30 didosevilla Exp $
25
+ #
26
+
27
+ require 'test/unit'
28
+ require 'json/lexer'
29
+ require 'json/objects'
30
+
31
+ class ObjectTest < Test::Unit::TestCase
32
+ def test_to_json
33
+ obj = Hash.new
34
+ obj['foo'] = 'bar'
35
+ obj['xyz'] = 1
36
+ obj['euler'] = 0.577215665
37
+
38
+ str = obj.to_json
39
+ sobj = JSON::Lexer.new(str).nextvalue
40
+ assert(sobj.class == Hash, "Hash was not generated by deserialization")
41
+ assert(sobj['foo'] == 'bar', "error in serialization of a string to JSON")
42
+ assert(sobj['xyz'] == 1, "error in serialization of a FixNum to JSON")
43
+ assert(sobj['euler'] == 0.577215665, "error in serialization of a float to JSON")
44
+ end
45
+ end