ruby-json 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
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