json-jruby 1.1.7-universal-java-1.6 → 1.2.0-universal-java-1.6
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.
- data/lib/json.rb +3 -226
- data/lib/json/common.rb +34 -17
- data/lib/json/ext/generator.jar +0 -0
- data/lib/json/ext/parser.jar +0 -0
- data/lib/json/pure.rb +3 -3
- data/lib/json/pure/generator.rb +26 -13
- data/lib/json/pure/parser.rb +37 -3
- data/lib/json/version.rb +1 -2
- data/tests/test_jjrb_offsets.rb +0 -5
- data/tests/test_json.rb +26 -18
- data/tests/test_json_encoding.rb +67 -0
- data/tests/test_json_generate.rb +21 -7
- data/tests/test_json_rails.rb +1 -1
- metadata +89 -89
- data/tests/runner.rb +0 -27
data/lib/json.rb
CHANGED
@@ -1,233 +1,10 @@
|
|
1
1
|
require 'json/common'
|
2
|
-
# = json - JSON for Ruby
|
3
|
-
#
|
4
|
-
# == Description
|
5
|
-
#
|
6
|
-
# This is a implementation of the JSON specification according to RFC 4627
|
7
|
-
# (http://www.ietf.org/rfc/rfc4627.txt). Starting from version 1.0.0 on there
|
8
|
-
# will be two variants available:
|
9
|
-
#
|
10
|
-
# * A pure ruby variant, that relies on the iconv and the stringscan
|
11
|
-
# extensions, which are both part of the ruby standard library.
|
12
|
-
# * The quite a bit faster C extension variant, which is in parts implemented
|
13
|
-
# in C and comes with its own unicode conversion functions and a parser
|
14
|
-
# generated by the ragel state machine compiler
|
15
|
-
# (http://www.cs.queensu.ca/~thurston/ragel).
|
16
|
-
#
|
17
|
-
# Both variants of the JSON generator escape all non-ASCII an control
|
18
|
-
# characters with \uXXXX escape sequences, and support UTF-16 surrogate pairs
|
19
|
-
# in order to be able to generate the whole range of unicode code points. This
|
20
|
-
# means that generated JSON text is encoded as UTF-8 (because ASCII is a subset
|
21
|
-
# of UTF-8) and at the same time avoids decoding problems for receiving
|
22
|
-
# endpoints, that don't expect UTF-8 encoded texts. On the negative side this
|
23
|
-
# may lead to a bit longer strings than necessarry.
|
24
|
-
#
|
25
|
-
# All strings, that are to be encoded as JSON strings, should be UTF-8 byte
|
26
|
-
# sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8
|
27
|
-
# encoded, please use the to_json_raw_object method of String (which produces
|
28
|
-
# an object, that contains a byte array) and decode the result on the receiving
|
29
|
-
# endpoint.
|
30
|
-
#
|
31
|
-
# == Author
|
32
|
-
#
|
33
|
-
# Florian Frank <mailto:flori@ping.de>
|
34
|
-
#
|
35
|
-
# == License
|
36
|
-
#
|
37
|
-
# This software is distributed under the same license as Ruby itself, see
|
38
|
-
# http://www.ruby-lang.org/en/LICENSE.txt.
|
39
|
-
#
|
40
|
-
# == Download
|
41
|
-
#
|
42
|
-
# The latest version of this library can be downloaded at
|
43
|
-
#
|
44
|
-
# * http://rubyforge.org/frs?group_id=953
|
45
|
-
#
|
46
|
-
# Online Documentation should be located at
|
47
|
-
#
|
48
|
-
# * http://json.rubyforge.org
|
49
|
-
#
|
50
|
-
# == Usage
|
51
|
-
#
|
52
|
-
# To use JSON you can
|
53
|
-
# require 'json'
|
54
|
-
# to load the installed variant (either the extension 'json' or the pure
|
55
|
-
# variant 'json_pure'). If you have installed the extension variant, you can
|
56
|
-
# pick either the extension variant or the pure variant by typing
|
57
|
-
# require 'json/ext'
|
58
|
-
# or
|
59
|
-
# require 'json/pure'
|
60
|
-
#
|
61
|
-
# You can choose to load a set of common additions to ruby core's objects if
|
62
|
-
# you
|
63
|
-
# require 'json/add/core'
|
64
|
-
#
|
65
|
-
# After requiring this you can, e. g., serialise/deserialise Ruby ranges:
|
66
|
-
#
|
67
|
-
# JSON JSON(1..10) # => 1..10
|
68
|
-
#
|
69
|
-
# To find out how to add JSON support to other or your own classes, read the
|
70
|
-
# Examples section below.
|
71
|
-
#
|
72
|
-
# To get the best compatibility to rails' JSON implementation, you can
|
73
|
-
# require 'json/add/rails'
|
74
|
-
#
|
75
|
-
# Both of the additions attempt to require 'json' (like above) first, if it has
|
76
|
-
# not been required yet.
|
77
|
-
#
|
78
|
-
# == Speed Comparisons
|
79
|
-
#
|
80
|
-
# I have created some benchmark results (see the benchmarks subdir of the
|
81
|
-
# package) for the JSON-Parser to estimate the speed up in the C extension:
|
82
|
-
#
|
83
|
-
# JSON::Pure::Parser:: 28.90 calls/second
|
84
|
-
# JSON::Ext::Parser:: 505.50 calls/second
|
85
|
-
#
|
86
|
-
# This is ca. <b>17.5</b> times the speed of the pure Ruby implementation.
|
87
|
-
#
|
88
|
-
# I have benchmarked the JSON-Generator as well. This generates a few more
|
89
|
-
# values, because there are different modes, that also influence the achieved
|
90
|
-
# speed:
|
91
|
-
#
|
92
|
-
# * JSON::Pure::Generator:
|
93
|
-
# generate:: 35.06 calls/second
|
94
|
-
# pretty_generate:: 34.00 calls/second
|
95
|
-
# fast_generate:: 41.06 calls/second
|
96
|
-
#
|
97
|
-
# * JSON::Ext::Generator:
|
98
|
-
# generate:: 492.11 calls/second
|
99
|
-
# pretty_generate:: 348.85 calls/second
|
100
|
-
# fast_generate:: 541.60 calls/second
|
101
|
-
#
|
102
|
-
# * Speedup Ext/Pure:
|
103
|
-
# generate safe:: 14.0 times
|
104
|
-
# generate pretty:: 10.3 times
|
105
|
-
# generate fast:: 13.2 times
|
106
|
-
#
|
107
|
-
# The rails framework includes a generator as well, also it seems to be rather
|
108
|
-
# slow: I measured only 23.87 calls/second which is slower than any of my pure
|
109
|
-
# generator results. Here a comparison of the different speedups with the Rails
|
110
|
-
# measurement as the divisor:
|
111
|
-
#
|
112
|
-
# * Speedup Pure/Rails:
|
113
|
-
# generate safe:: 1.5 times
|
114
|
-
# generate pretty:: 1.4 times
|
115
|
-
# generate fast:: 1.7 times
|
116
|
-
#
|
117
|
-
# * Speedup Ext/Rails:
|
118
|
-
# generate safe:: 20.6 times
|
119
|
-
# generate pretty:: 14.6 times
|
120
|
-
# generate fast:: 22.7 times
|
121
|
-
#
|
122
|
-
# To achieve the fastest JSON text output, you can use the
|
123
|
-
# fast_generate/fast_unparse methods. Beware, that this will disable the
|
124
|
-
# checking for circular Ruby data structures, which may cause JSON to go into
|
125
|
-
# an infinite loop.
|
126
|
-
#
|
127
|
-
# == Examples
|
128
|
-
#
|
129
|
-
# To create a JSON text from a ruby data structure, you
|
130
|
-
# can call JSON.generate (or JSON.unparse) like that:
|
131
|
-
#
|
132
|
-
# json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
|
133
|
-
# # => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]"
|
134
|
-
#
|
135
|
-
# To create a valid JSON text you have to make sure, that the output is
|
136
|
-
# embedded in either a JSON array [] or a JSON object {}. The easiest way to do
|
137
|
-
# this, is by putting your values in a Ruby Array or Hash instance.
|
138
|
-
#
|
139
|
-
# To get back a ruby data structure from a JSON text, you have to call
|
140
|
-
# JSON.parse on it:
|
141
|
-
#
|
142
|
-
# JSON.parse json
|
143
|
-
# # => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"]
|
144
|
-
#
|
145
|
-
# Note, that the range from the original data structure is a simple
|
146
|
-
# string now. The reason for this is, that JSON doesn't support ranges
|
147
|
-
# or arbitrary classes. In this case the json library falls back to call
|
148
|
-
# Object#to_json, which is the same as #to_s.to_json.
|
149
|
-
#
|
150
|
-
# It's possible to add JSON support serialization to arbitrary classes by
|
151
|
-
# simply implementing a more specialized version of the #to_json method, that
|
152
|
-
# should return a JSON object (a hash converted to JSON with #to_json) like
|
153
|
-
# this (don't forget the *a for all the arguments):
|
154
|
-
#
|
155
|
-
# class Range
|
156
|
-
# def to_json(*a)
|
157
|
-
# {
|
158
|
-
# 'json_class' => self.class.name, # = 'Range'
|
159
|
-
# 'data' => [ first, last, exclude_end? ]
|
160
|
-
# }.to_json(*a)
|
161
|
-
# end
|
162
|
-
# end
|
163
|
-
#
|
164
|
-
# The hash key 'json_class' is the class, that will be asked to deserialise the
|
165
|
-
# JSON representation later. In this case it's 'Range', but any namespace of
|
166
|
-
# the form 'A::B' or '::A::B' will do. All other keys are arbitrary and can be
|
167
|
-
# used to store the necessary data to configure the object to be deserialised.
|
168
|
-
#
|
169
|
-
# If a the key 'json_class' is found in a JSON object, the JSON parser checks
|
170
|
-
# if the given class responds to the json_create class method. If so, it is
|
171
|
-
# called with the JSON object converted to a Ruby hash. So a range can
|
172
|
-
# be deserialised by implementing Range.json_create like this:
|
173
|
-
#
|
174
|
-
# class Range
|
175
|
-
# def self.json_create(o)
|
176
|
-
# new(*o['data'])
|
177
|
-
# end
|
178
|
-
# end
|
179
|
-
#
|
180
|
-
# Now it possible to serialise/deserialise ranges as well:
|
181
|
-
#
|
182
|
-
# json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
|
183
|
-
# # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
|
184
|
-
# JSON.parse json
|
185
|
-
# # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
|
186
|
-
#
|
187
|
-
# JSON.generate always creates the shortest possible string representation of a
|
188
|
-
# ruby data structure in one line. This good for data storage or network
|
189
|
-
# protocols, but not so good for humans to read. Fortunately there's also
|
190
|
-
# JSON.pretty_generate (or JSON.pretty_generate) that creates a more
|
191
|
-
# readable output:
|
192
|
-
#
|
193
|
-
# puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10])
|
194
|
-
# [
|
195
|
-
# 1,
|
196
|
-
# 2,
|
197
|
-
# {
|
198
|
-
# "a": 3.141
|
199
|
-
# },
|
200
|
-
# false,
|
201
|
-
# true,
|
202
|
-
# null,
|
203
|
-
# {
|
204
|
-
# "json_class": "Range",
|
205
|
-
# "data": [
|
206
|
-
# 4,
|
207
|
-
# 10,
|
208
|
-
# false
|
209
|
-
# ]
|
210
|
-
# }
|
211
|
-
# ]
|
212
|
-
#
|
213
|
-
# There are also the methods Kernel#j for unparse, and Kernel#jj for
|
214
|
-
# pretty_unparse output to the console, that work analogous to Core Ruby's p
|
215
|
-
# and the pp library's pp methods.
|
216
|
-
#
|
217
|
-
# The script tools/server.rb contains a small example if you want to test, how
|
218
|
-
# receiving a JSON object from a webrick server in your browser with the
|
219
|
-
# javasript prototype library (http://www.prototypejs.org) works.
|
220
|
-
#
|
221
2
|
module JSON
|
222
3
|
require 'json/version'
|
223
4
|
|
224
|
-
|
5
|
+
begin
|
225
6
|
require 'json/ext'
|
226
|
-
|
227
|
-
|
228
|
-
require 'json/ext'
|
229
|
-
rescue LoadError
|
230
|
-
require 'json/pure'
|
231
|
-
end
|
7
|
+
rescue LoadError
|
8
|
+
require 'json/pure'
|
232
9
|
end
|
233
10
|
end
|
data/lib/json/common.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'json/version'
|
2
|
+
require 'iconv'
|
2
3
|
|
3
4
|
module JSON
|
4
5
|
class << self
|
@@ -74,7 +75,7 @@ module JSON
|
|
74
75
|
end
|
75
76
|
self.create_id = 'json_class'
|
76
77
|
|
77
|
-
NaN =
|
78
|
+
NaN = 0.0/0
|
78
79
|
|
79
80
|
Infinity = 1.0/0
|
80
81
|
|
@@ -105,7 +106,7 @@ module JSON
|
|
105
106
|
|
106
107
|
module_function
|
107
108
|
|
108
|
-
# Parse the JSON
|
109
|
+
# Parse the JSON document _source_ into a Ruby data structure and return it.
|
109
110
|
#
|
110
111
|
# _opts_ can have the following
|
111
112
|
# keys:
|
@@ -122,9 +123,9 @@ module JSON
|
|
122
123
|
JSON.parser.new(source, opts).parse
|
123
124
|
end
|
124
125
|
|
125
|
-
# Parse the JSON
|
126
|
+
# Parse the JSON document _source_ into a Ruby data structure and return it.
|
126
127
|
# The bang version of the parse method, defaults to the more dangerous values
|
127
|
-
# for the _opts_ hash, so be sure only to parse trusted _source_
|
128
|
+
# for the _opts_ hash, so be sure only to parse trusted _source_ documents.
|
128
129
|
#
|
129
130
|
# _opts_ can have the following keys:
|
130
131
|
# * *max_nesting*: The maximum depth of nesting allowed in the parsed data
|
@@ -145,9 +146,8 @@ module JSON
|
|
145
146
|
JSON.parser.new(source, opts).parse
|
146
147
|
end
|
147
148
|
|
148
|
-
#
|
149
|
-
#
|
150
|
-
# * a JSON::State object,
|
149
|
+
# Generate a JSON document from the Ruby data structure _obj_ and return
|
150
|
+
# it. _state_ is * a JSON::State object,
|
151
151
|
# * or a Hash like object (responding to to_hash),
|
152
152
|
# * an object convertible into a hash by a to_h method,
|
153
153
|
# that is used as or to configure a State object.
|
@@ -180,7 +180,11 @@ module JSON
|
|
180
180
|
else
|
181
181
|
state = State.new
|
182
182
|
end
|
183
|
-
obj.to_json(state)
|
183
|
+
result = obj.to_json(state)
|
184
|
+
if result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
|
185
|
+
raise GeneratorError, "only generation of JSON objects or arrays allowed"
|
186
|
+
end
|
187
|
+
result
|
184
188
|
end
|
185
189
|
|
186
190
|
# :stopdoc:
|
@@ -190,14 +194,17 @@ module JSON
|
|
190
194
|
module_function :unparse
|
191
195
|
# :startdoc:
|
192
196
|
|
193
|
-
#
|
194
|
-
#
|
195
|
-
# also generates NaN, Infinity, and, -Infinity float values.
|
197
|
+
# Generate a JSON document from the Ruby data structure _obj_ and return it.
|
198
|
+
# This method disables the checks for circles in Ruby objects.
|
196
199
|
#
|
197
200
|
# *WARNING*: Be careful not to pass any Ruby data structures with circles as
|
198
201
|
# _obj_ argument, because this will cause JSON to go into an infinite loop.
|
199
202
|
def fast_generate(obj)
|
200
|
-
obj.to_json(nil)
|
203
|
+
result = obj.to_json(nil)
|
204
|
+
if result !~ /\A(?:\[.*\]|\{.*\})\Z/
|
205
|
+
raise GeneratorError, "only generation of JSON objects or arrays allowed"
|
206
|
+
end
|
207
|
+
result
|
201
208
|
end
|
202
209
|
|
203
210
|
# :stopdoc:
|
@@ -206,8 +213,9 @@ module JSON
|
|
206
213
|
module_function :fast_unparse
|
207
214
|
# :startdoc:
|
208
215
|
|
209
|
-
#
|
210
|
-
# returned
|
216
|
+
# Generate a JSON document from the Ruby data structure _obj_ and return it.
|
217
|
+
# The returned document is a prettier form of the document returned by
|
218
|
+
# #unparse.
|
211
219
|
#
|
212
220
|
# The _opts_ argument can be used to configure the generator, see the
|
213
221
|
# generate method for a more detailed explanation.
|
@@ -229,7 +237,11 @@ module JSON
|
|
229
237
|
end
|
230
238
|
state.configure(opts)
|
231
239
|
end
|
232
|
-
obj.to_json(state)
|
240
|
+
result = obj.to_json(state)
|
241
|
+
if result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
|
242
|
+
raise GeneratorError, "only generation of JSON objects or arrays allowed"
|
243
|
+
end
|
244
|
+
result
|
233
245
|
end
|
234
246
|
|
235
247
|
# :stopdoc:
|
@@ -270,8 +282,6 @@ module JSON
|
|
270
282
|
proc.call result
|
271
283
|
end
|
272
284
|
end
|
273
|
-
private :recurse_proc
|
274
|
-
module_function :recurse_proc
|
275
285
|
|
276
286
|
alias restore load
|
277
287
|
module_function :restore
|
@@ -307,9 +317,16 @@ module JSON
|
|
307
317
|
rescue JSON::NestingError
|
308
318
|
raise ArgumentError, "exceed depth limit"
|
309
319
|
end
|
320
|
+
|
321
|
+
# Shortuct for iconv.
|
322
|
+
def self.iconv(to, from, string)
|
323
|
+
Iconv.iconv(to, from, string).first
|
324
|
+
end
|
310
325
|
end
|
311
326
|
|
312
327
|
module ::Kernel
|
328
|
+
private
|
329
|
+
|
313
330
|
# Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in
|
314
331
|
# one line.
|
315
332
|
def j(*objs)
|
data/lib/json/ext/generator.jar
CHANGED
Binary file
|
data/lib/json/ext/parser.jar
CHANGED
Binary file
|
data/lib/json/pure.rb
CHANGED
@@ -10,6 +10,9 @@ module JSON
|
|
10
10
|
# An iconv instance to convert from UTF16 Big Endian to UTF8.
|
11
11
|
UTF8toUTF16 = Iconv.new('utf-16be', 'utf-8') # :nodoc:
|
12
12
|
UTF8toUTF16.iconv('no bom')
|
13
|
+
rescue LoadError
|
14
|
+
raise MissingUnicodeSupport,
|
15
|
+
"iconv couldn't be loaded, which is required for UTF-8/UTF-16 conversions"
|
13
16
|
rescue Errno::EINVAL, Iconv::InvalidEncoding
|
14
17
|
# Iconv doesn't support big endian utf-16. Let's try to hack this manually
|
15
18
|
# into the converters.
|
@@ -51,9 +54,6 @@ module JSON
|
|
51
54
|
ensure
|
52
55
|
$VERBOSE = old_verbose
|
53
56
|
end
|
54
|
-
rescue LoadError
|
55
|
-
raise MissingUnicodeSupport,
|
56
|
-
"iconv couldn't be loaded, which is required for UTF-8/UTF-16 conversions"
|
57
57
|
end
|
58
58
|
|
59
59
|
# Swap consecutive bytes of _string_ in place.
|
data/lib/json/pure/generator.rb
CHANGED
@@ -34,17 +34,16 @@ module JSON
|
|
34
34
|
"\x1f" => '\u001f',
|
35
35
|
'"' => '\"',
|
36
36
|
'\\' => '\\\\',
|
37
|
-
'/' => '\/',
|
38
37
|
} # :nodoc:
|
39
38
|
|
40
39
|
# Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with
|
41
40
|
# UTF16 big endian characters as \u????, and return it.
|
42
|
-
if
|
41
|
+
if defined?(::Encoding)
|
43
42
|
def utf8_to_json(string) # :nodoc:
|
44
43
|
string = string.dup
|
45
44
|
string << '' # XXX workaround: avoid buffer sharing
|
46
|
-
string.force_encoding(Encoding::ASCII_8BIT)
|
47
|
-
string.gsub!(/["
|
45
|
+
string.force_encoding(::Encoding::ASCII_8BIT)
|
46
|
+
string.gsub!(/["\\\x0-\x1f]/) { MAP[$&] }
|
48
47
|
string.gsub!(/(
|
49
48
|
(?:
|
50
49
|
[\xc2-\xdf][\x80-\xbf] |
|
@@ -57,14 +56,14 @@ module JSON
|
|
57
56
|
s = JSON::UTF8toUTF16.iconv(c).unpack('H*')[0]
|
58
57
|
s.gsub!(/.{4}/n, '\\\\u\&')
|
59
58
|
}
|
60
|
-
string.force_encoding(Encoding::UTF_8)
|
59
|
+
string.force_encoding(::Encoding::UTF_8)
|
61
60
|
string
|
62
61
|
rescue Iconv::Failure => e
|
63
62
|
raise GeneratorError, "Caught #{e.class}: #{e}"
|
64
63
|
end
|
65
64
|
else
|
66
65
|
def utf8_to_json(string) # :nodoc:
|
67
|
-
string = string.gsub(/["
|
66
|
+
string = string.gsub(/["\\\x0-\x1f]/) { MAP[$&] }
|
68
67
|
string.gsub!(/(
|
69
68
|
(?:
|
70
69
|
[\xc2-\xdf][\x80-\xbf] |
|
@@ -352,13 +351,13 @@ module JSON
|
|
352
351
|
def to_json(state = nil, *)
|
353
352
|
case
|
354
353
|
when infinite?
|
355
|
-
if
|
354
|
+
if state && state.allow_nan?
|
356
355
|
to_s
|
357
356
|
else
|
358
357
|
raise GeneratorError, "#{self} not allowed in JSON"
|
359
358
|
end
|
360
359
|
when nan?
|
361
|
-
if
|
360
|
+
if state && state.allow_nan?
|
362
361
|
to_s
|
363
362
|
else
|
364
363
|
raise GeneratorError, "#{self} not allowed in JSON"
|
@@ -370,11 +369,25 @@ module JSON
|
|
370
369
|
end
|
371
370
|
|
372
371
|
module String
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
372
|
+
if defined?(::Encoding)
|
373
|
+
# This string should be encoded with UTF-8 A call to this method
|
374
|
+
# returns a JSON string encoded with UTF16 big endian characters as
|
375
|
+
# \u????.
|
376
|
+
def to_json(*)
|
377
|
+
if encoding == ::Encoding::UTF_8
|
378
|
+
'"' << JSON.utf8_to_json(self) << '"'
|
379
|
+
else
|
380
|
+
string = encode(::Encoding::UTF_8)
|
381
|
+
'"' << JSON.utf8_to_json(string) << '"'
|
382
|
+
end
|
383
|
+
end
|
384
|
+
else
|
385
|
+
# This string should be encoded with UTF-8 A call to this method
|
386
|
+
# returns a JSON string encoded with UTF16 big endian characters as
|
387
|
+
# \u????.
|
388
|
+
def to_json(*)
|
389
|
+
'"' << JSON.utf8_to_json(self) << '"'
|
390
|
+
end
|
378
391
|
end
|
379
392
|
|
380
393
|
# Module that holds the extinding methods if, the String module is
|
data/lib/json/pure/parser.rb
CHANGED
@@ -66,7 +66,41 @@ module JSON
|
|
66
66
|
# * *object_class*: Defaults to Hash
|
67
67
|
# * *array_class*: Defaults to Array
|
68
68
|
def initialize(source, opts = {})
|
69
|
-
|
69
|
+
if defined?(::Encoding)
|
70
|
+
if source.encoding == Encoding::ASCII_8BIT
|
71
|
+
b = source[0, 4].bytes.to_a
|
72
|
+
source = case
|
73
|
+
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
|
74
|
+
source.dup.force_encoding(Encoding::UTF_32BE).encode!(Encoding::UTF_8)
|
75
|
+
when b.size >= 4 && b[0] == 0 && b[2] == 0
|
76
|
+
source.dup.force_encoding(Encoding::UTF_16BE).encode!(Encoding::UTF_8)
|
77
|
+
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
|
78
|
+
source.dup.force_encoding(Encoding::UTF_32LE).encode!(Encoding::UTF_8)
|
79
|
+
when b.size >= 4 && b[1] == 0 && b[3] == 0
|
80
|
+
source.dup.force_encoding(Encoding::UTF_16LE).encode!(Encoding::UTF_8)
|
81
|
+
else
|
82
|
+
source.dup
|
83
|
+
end
|
84
|
+
else
|
85
|
+
source = source.encode(Encoding::UTF_8)
|
86
|
+
end
|
87
|
+
source.force_encoding(Encoding::ASCII_8BIT)
|
88
|
+
else
|
89
|
+
b = source
|
90
|
+
source = case
|
91
|
+
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
|
92
|
+
JSON.iconv('utf-8', 'utf-32be', b)
|
93
|
+
when b.size >= 4 && b[0] == 0 && b[2] == 0
|
94
|
+
JSON.iconv('utf-8', 'utf-16be', b)
|
95
|
+
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
|
96
|
+
JSON.iconv('utf-8', 'utf-32le', b)
|
97
|
+
when b.size >= 4 && b[1] == 0 && b[3] == 0
|
98
|
+
JSON.iconv('utf-8', 'utf-16le', b)
|
99
|
+
else
|
100
|
+
b
|
101
|
+
end
|
102
|
+
end
|
103
|
+
super source
|
70
104
|
if !opts.key?(:max_nesting) # defaults to 19
|
71
105
|
@max_nesting = 19
|
72
106
|
elsif opts[:max_nesting]
|
@@ -188,7 +222,7 @@ module JSON
|
|
188
222
|
end
|
189
223
|
|
190
224
|
def parse_array
|
191
|
-
raise NestingError, "nesting of #@current_nesting is
|
225
|
+
raise NestingError, "nesting of #@current_nesting is too deep" if
|
192
226
|
@max_nesting.nonzero? && @current_nesting > @max_nesting
|
193
227
|
result = @array_class.new
|
194
228
|
delim = false
|
@@ -220,7 +254,7 @@ module JSON
|
|
220
254
|
end
|
221
255
|
|
222
256
|
def parse_object
|
223
|
-
raise NestingError, "nesting of #@current_nesting is
|
257
|
+
raise NestingError, "nesting of #@current_nesting is too deep" if
|
224
258
|
@max_nesting.nonzero? && @current_nesting > @max_nesting
|
225
259
|
result = @object_class.new
|
226
260
|
delim = false
|
data/lib/json/version.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
module JSON
|
2
2
|
# JSON version
|
3
|
-
VERSION = '1.
|
3
|
+
VERSION = '1.2.0'
|
4
4
|
VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
|
5
5
|
VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
|
6
6
|
VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
|
7
7
|
VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
|
8
|
-
VARIANT_BINARY = false
|
9
8
|
end
|
data/tests/test_jjrb_offsets.rb
CHANGED
@@ -226,11 +226,6 @@ EOT
|
|
226
226
|
assert_equal json, JSON.unparse(data)
|
227
227
|
assert_equal data, JSON.parse(json)
|
228
228
|
#
|
229
|
-
json = '["\/"]'
|
230
|
-
data = JSON.parse(json)
|
231
|
-
assert_equal ['/'], data
|
232
|
-
assert_equal json, JSON.unparse(data)
|
233
|
-
#
|
234
229
|
json = '["\""]'
|
235
230
|
data = JSON.parse(json)
|
236
231
|
assert_equal ['"'], data
|
data/tests/test_json.rb
CHANGED
@@ -9,6 +9,20 @@ else require 'json'
|
|
9
9
|
end
|
10
10
|
require 'stringio'
|
11
11
|
|
12
|
+
unless Array.method_defined?(:permutation)
|
13
|
+
begin
|
14
|
+
require 'enumerator'
|
15
|
+
require 'permutation'
|
16
|
+
class Array
|
17
|
+
def permutation
|
18
|
+
Permutation.for(self).to_enum.map { |x| x.project }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
rescue LoadError
|
22
|
+
warn "Skipping permutation tests."
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
12
26
|
class TC_JSON < Test::Unit::TestCase
|
13
27
|
include JSON
|
14
28
|
|
@@ -94,30 +108,24 @@ class TC_JSON < Test::Unit::TestCase
|
|
94
108
|
assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
|
95
109
|
end
|
96
110
|
|
97
|
-
|
98
|
-
require 'permutation'
|
111
|
+
if Array.method_defined?(:permutation)
|
99
112
|
def test_parse_more_complex_arrays
|
100
113
|
a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
json = pretty_generate(orig_ary)
|
105
|
-
assert_equal orig_ary, parse(json)
|
114
|
+
a.permutation.each do |perm|
|
115
|
+
json = pretty_generate(perm)
|
116
|
+
assert_equal perm, parse(json)
|
106
117
|
end
|
107
118
|
end
|
108
119
|
|
109
120
|
def test_parse_complex_objects
|
110
121
|
a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
|
111
|
-
|
112
|
-
perms.each do |perm|
|
122
|
+
a.permutation.each do |perm|
|
113
123
|
s = "a"
|
114
|
-
orig_obj = perm.
|
124
|
+
orig_obj = perm.inject({}) { |h, x| h[s.dup] = x; s = s.succ; h }
|
115
125
|
json = pretty_generate(orig_obj)
|
116
126
|
assert_equal orig_obj, parse(json)
|
117
127
|
end
|
118
128
|
end
|
119
|
-
rescue LoadError
|
120
|
-
warn "Skipping permutation tests."
|
121
129
|
end
|
122
130
|
|
123
131
|
def test_parse_arrays
|
@@ -222,27 +230,27 @@ EOT
|
|
222
230
|
def test_backslash
|
223
231
|
data = [ '\\.(?i:gif|jpe?g|png)$' ]
|
224
232
|
json = '["\\\\.(?i:gif|jpe?g|png)$"]'
|
225
|
-
assert_equal json, JSON.
|
233
|
+
assert_equal json, JSON.generate(data)
|
226
234
|
assert_equal data, JSON.parse(json)
|
227
235
|
#
|
228
236
|
data = [ '\\"' ]
|
229
237
|
json = '["\\\\\""]'
|
230
|
-
assert_equal json, JSON.
|
238
|
+
assert_equal json, JSON.generate(data)
|
231
239
|
assert_equal data, JSON.parse(json)
|
232
240
|
#
|
233
|
-
json = '["
|
241
|
+
json = '["/"]'
|
234
242
|
data = JSON.parse(json)
|
235
243
|
assert_equal ['/'], data
|
236
|
-
assert_equal json, JSON.
|
244
|
+
assert_equal json, JSON.generate(data)
|
237
245
|
#
|
238
246
|
json = '["\""]'
|
239
247
|
data = JSON.parse(json)
|
240
248
|
assert_equal ['"'], data
|
241
|
-
assert_equal json, JSON.
|
249
|
+
assert_equal json, JSON.generate(data)
|
242
250
|
json = '["\\\'"]'
|
243
251
|
data = JSON.parse(json)
|
244
252
|
assert_equal ["'"], data
|
245
|
-
assert_equal '["\'"]', JSON.
|
253
|
+
assert_equal '["\'"]', JSON.generate(data)
|
246
254
|
end
|
247
255
|
|
248
256
|
def test_wrong_inputs
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
case ENV['JSON']
|
6
|
+
when 'pure' then require 'json/pure'
|
7
|
+
when 'ext' then require 'json/ext'
|
8
|
+
else require 'json'
|
9
|
+
end
|
10
|
+
require 'iconv'
|
11
|
+
|
12
|
+
class TC_JSONEncoding < Test::Unit::TestCase
|
13
|
+
include JSON
|
14
|
+
|
15
|
+
def setup
|
16
|
+
@utf_8 = '["© ≠ €!"]'
|
17
|
+
@parsed = [ "© ≠ €!" ]
|
18
|
+
@utf_16_data = Iconv.iconv('utf-16be', 'utf-8', @parsed.first)
|
19
|
+
@generated = '["\u00a9 \u2260 \u20ac!"]'
|
20
|
+
if defined?(::Encoding)
|
21
|
+
@utf_8_ascii_8bit = @utf_8.dup.force_encoding(Encoding::ASCII_8BIT)
|
22
|
+
@utf_16be, = Iconv.iconv('utf-16be', 'utf-8', @utf_8)
|
23
|
+
@utf_16be_ascii_8bit = @utf_16be.dup.force_encoding(Encoding::ASCII_8BIT)
|
24
|
+
@utf_16le, = Iconv.iconv('utf-16le', 'utf-8', @utf_8)
|
25
|
+
@utf_16le_ascii_8bit = @utf_16le.dup.force_encoding(Encoding::ASCII_8BIT)
|
26
|
+
@utf_32be, = Iconv.iconv('utf-32be', 'utf-8', @utf_8)
|
27
|
+
@utf_32be_ascii_8bit = @utf_32be.dup.force_encoding(Encoding::ASCII_8BIT)
|
28
|
+
@utf_32le, = Iconv.iconv('utf-32le', 'utf-8', @utf_8)
|
29
|
+
@utf_32le_ascii_8bit = @utf_32le.dup.force_encoding(Encoding::ASCII_8BIT)
|
30
|
+
else
|
31
|
+
@utf_8_ascii_8bit = @utf_8.dup
|
32
|
+
@utf_16be, = Iconv.iconv('utf-16be', 'utf-8', @utf_8)
|
33
|
+
@utf_16be_ascii_8bit = @utf_16be.dup
|
34
|
+
@utf_16le, = Iconv.iconv('utf-16le', 'utf-8', @utf_8)
|
35
|
+
@utf_16le_ascii_8bit = @utf_16le.dup
|
36
|
+
@utf_32be, = Iconv.iconv('utf-32be', 'utf-8', @utf_8)
|
37
|
+
@utf_32be_ascii_8bit = @utf_32be.dup
|
38
|
+
@utf_32le, = Iconv.iconv('utf-32le', 'utf-8', @utf_8)
|
39
|
+
@utf_32le_ascii_8bit = @utf_32le.dup
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_parse
|
44
|
+
assert_equal @parsed, JSON.parse(@utf_8)
|
45
|
+
assert_equal @parsed, JSON.parse(@utf_16be)
|
46
|
+
assert_equal @parsed, JSON.parse(@utf_16le)
|
47
|
+
assert_equal @parsed, JSON.parse(@utf_32be)
|
48
|
+
assert_equal @parsed, JSON.parse(@utf_32le)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_parse_ascii_8bit
|
52
|
+
assert_equal @parsed, JSON.parse(@utf_8_ascii_8bit)
|
53
|
+
assert_equal @parsed, JSON.parse(@utf_16be_ascii_8bit)
|
54
|
+
assert_equal @parsed, JSON.parse(@utf_16le_ascii_8bit)
|
55
|
+
assert_equal @parsed, JSON.parse(@utf_32be_ascii_8bit)
|
56
|
+
assert_equal @parsed, JSON.parse(@utf_32le_ascii_8bit)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_generate
|
60
|
+
assert_equal @generated, JSON.generate(@parsed)
|
61
|
+
if defined?(::Encoding)
|
62
|
+
assert_equal @generated, JSON.generate(@utf_16_data)
|
63
|
+
else
|
64
|
+
assert_raises(JSON::GeneratorError) { JSON.generate(@utf_16_data) }
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/tests/test_json_generate.rb
CHANGED
@@ -44,8 +44,8 @@ class TC_JSONGenerate < Test::Unit::TestCase
|
|
44
44
|
EOT
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
48
|
-
json =
|
47
|
+
def test_generate
|
48
|
+
json = generate(@hash)
|
49
49
|
assert_equal(JSON.parse(@json2), JSON.parse(json))
|
50
50
|
parsed_json = parse(json)
|
51
51
|
assert_equal(@hash, parsed_json)
|
@@ -53,10 +53,11 @@ EOT
|
|
53
53
|
assert_equal('{"1":2}', json)
|
54
54
|
parsed_json = parse(json)
|
55
55
|
assert_equal({"1"=>2}, parsed_json)
|
56
|
+
assert_raise(GeneratorError) { generate(666) }
|
56
57
|
end
|
57
58
|
|
58
|
-
def
|
59
|
-
json =
|
59
|
+
def test_generate_pretty
|
60
|
+
json = pretty_generate(@hash)
|
60
61
|
assert_equal(JSON.parse(@json3), JSON.parse(json))
|
61
62
|
parsed_json = parse(json)
|
62
63
|
assert_equal(@hash, parsed_json)
|
@@ -68,6 +69,19 @@ EOT
|
|
68
69
|
EOT
|
69
70
|
parsed_json = parse(json)
|
70
71
|
assert_equal({"1"=>2}, parsed_json)
|
72
|
+
assert_raise(GeneratorError) { pretty_generate(666) }
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_fast_generate
|
76
|
+
json = fast_generate(@hash)
|
77
|
+
assert_equal(JSON.parse(@json2), JSON.parse(json))
|
78
|
+
parsed_json = parse(json)
|
79
|
+
assert_equal(@hash, parsed_json)
|
80
|
+
json = fast_generate({1=>2})
|
81
|
+
assert_equal('{"1":2}', json)
|
82
|
+
parsed_json = parse(json)
|
83
|
+
assert_equal({"1"=>2}, parsed_json)
|
84
|
+
assert_raise(GeneratorError) { fast_generate(666) }
|
71
85
|
end
|
72
86
|
|
73
87
|
def test_states
|
@@ -89,17 +103,17 @@ EOT
|
|
89
103
|
def test_allow_nan
|
90
104
|
assert_raises(GeneratorError) { generate([JSON::NaN]) }
|
91
105
|
assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
|
92
|
-
|
106
|
+
assert_raises(GeneratorError) { fast_generate([JSON::NaN]) }
|
93
107
|
assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
|
94
108
|
assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
|
95
109
|
assert_raises(GeneratorError) { generate([JSON::Infinity]) }
|
96
110
|
assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
|
97
|
-
|
111
|
+
assert_raises(GeneratorError) { fast_generate([JSON::Infinity]) }
|
98
112
|
assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
|
99
113
|
assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
|
100
114
|
assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
|
101
115
|
assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
|
102
|
-
|
116
|
+
assert_raises(GeneratorError) { fast_generate([JSON::MinusInfinity]) }
|
103
117
|
assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
|
104
118
|
assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
|
105
119
|
end
|
data/tests/test_json_rails.rb
CHANGED
metadata
CHANGED
@@ -1,104 +1,104 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
name: json-jruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.2.0
|
5
|
+
platform: universal-java-1.6
|
6
|
+
authors:
|
7
|
+
- Daniel Luz
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
9
10
|
cert_chain: []
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
date: 2009-11-28 00:00:00 -02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: mernen+rubyforge@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
13
22
|
extra_rdoc_files: []
|
14
23
|
|
24
|
+
files:
|
25
|
+
- lib/json.rb
|
26
|
+
- lib/json/version.rb
|
27
|
+
- lib/json/ext.rb
|
28
|
+
- lib/json/pure.rb
|
29
|
+
- lib/json/common.rb
|
30
|
+
- lib/json/add/rails.rb
|
31
|
+
- lib/json/add/core.rb
|
32
|
+
- lib/json/ext/generator.jar
|
33
|
+
- lib/json/ext/parser.jar
|
34
|
+
- lib/json/pure/generator.rb
|
35
|
+
- lib/json/pure/parser.rb
|
36
|
+
- tests/test_json_generate.rb
|
37
|
+
- tests/test_json_unicode.rb
|
38
|
+
- tests/test_jjrb_offsets.rb
|
39
|
+
- tests/test_json_addition.rb
|
40
|
+
- tests/test_json_fixtures.rb
|
41
|
+
- tests/test_json_encoding.rb
|
42
|
+
- tests/test_json_rails.rb
|
43
|
+
- tests/test_json.rb
|
44
|
+
- tests/fixtures/fail20.json
|
45
|
+
- tests/fixtures/fail6.json
|
46
|
+
- tests/fixtures/fail1.json
|
47
|
+
- tests/fixtures/fail14.json
|
48
|
+
- tests/fixtures/fail9.json
|
49
|
+
- tests/fixtures/pass26.json
|
50
|
+
- tests/fixtures/fail27.json
|
51
|
+
- tests/fixtures/fail19.json
|
52
|
+
- tests/fixtures/fail5.json
|
53
|
+
- tests/fixtures/fail10.json
|
54
|
+
- tests/fixtures/fail12.json
|
55
|
+
- tests/fixtures/fail3.json
|
56
|
+
- tests/fixtures/fail13.json
|
57
|
+
- tests/fixtures/fail24.json
|
58
|
+
- tests/fixtures/pass3.json
|
59
|
+
- tests/fixtures/fail23.json
|
60
|
+
- tests/fixtures/fail7.json
|
61
|
+
- tests/fixtures/pass1.json
|
62
|
+
- tests/fixtures/fail18.json
|
63
|
+
- tests/fixtures/pass17.json
|
64
|
+
- tests/fixtures/fail11.json
|
65
|
+
- tests/fixtures/fail21.json
|
66
|
+
- tests/fixtures/fail25.json
|
67
|
+
- tests/fixtures/fail4.json
|
68
|
+
- tests/fixtures/fail8.json
|
69
|
+
- tests/fixtures/fail2.json
|
70
|
+
- tests/fixtures/pass15.json
|
71
|
+
- tests/fixtures/fail22.json
|
72
|
+
- tests/fixtures/fail28.json
|
73
|
+
- tests/fixtures/pass2.json
|
74
|
+
- tests/fixtures/pass16.json
|
75
|
+
has_rdoc: true
|
15
76
|
homepage: http://rubyforge.org/projects/json-jruby/
|
16
|
-
signing_key:
|
17
|
-
name: json-jruby
|
18
|
-
rdoc_options: []
|
19
|
-
|
20
|
-
rubyforge_project: json-jruby
|
21
|
-
autorequire:
|
22
77
|
licenses: []
|
23
78
|
|
24
|
-
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
25
81
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
-
|
31
|
-
-
|
32
|
-
|
33
|
-
|
34
|
-
- lib/json/common.rb
|
35
|
-
- lib/json/add/rails.rb
|
36
|
-
- lib/json/add/core.rb
|
37
|
-
- lib/json/ext/generator.jar
|
38
|
-
- lib/json/ext/parser.jar
|
39
|
-
- lib/json/pure/generator.rb
|
40
|
-
- lib/json/pure/parser.rb
|
41
|
-
- tests/test_json_generate.rb
|
42
|
-
- tests/test_json_unicode.rb
|
43
|
-
- tests/test_jjrb_offsets.rb
|
44
|
-
- tests/test_json_addition.rb
|
45
|
-
- tests/test_json_fixtures.rb
|
46
|
-
- tests/test_json_rails.rb
|
47
|
-
- tests/test_json.rb
|
48
|
-
- tests/runner.rb
|
49
|
-
- tests/fixtures/fail20.json
|
50
|
-
- tests/fixtures/fail6.json
|
51
|
-
- tests/fixtures/fail1.json
|
52
|
-
- tests/fixtures/fail14.json
|
53
|
-
- tests/fixtures/fail9.json
|
54
|
-
- tests/fixtures/pass26.json
|
55
|
-
- tests/fixtures/fail27.json
|
56
|
-
- tests/fixtures/fail19.json
|
57
|
-
- tests/fixtures/fail5.json
|
58
|
-
- tests/fixtures/fail10.json
|
59
|
-
- tests/fixtures/fail12.json
|
60
|
-
- tests/fixtures/fail3.json
|
61
|
-
- tests/fixtures/fail13.json
|
62
|
-
- tests/fixtures/fail24.json
|
63
|
-
- tests/fixtures/pass3.json
|
64
|
-
- tests/fixtures/fail23.json
|
65
|
-
- tests/fixtures/fail7.json
|
66
|
-
- tests/fixtures/pass1.json
|
67
|
-
- tests/fixtures/fail18.json
|
68
|
-
- tests/fixtures/pass17.json
|
69
|
-
- tests/fixtures/fail11.json
|
70
|
-
- tests/fixtures/fail21.json
|
71
|
-
- tests/fixtures/fail25.json
|
72
|
-
- tests/fixtures/fail4.json
|
73
|
-
- tests/fixtures/fail8.json
|
74
|
-
- tests/fixtures/fail2.json
|
75
|
-
- tests/fixtures/pass15.json
|
76
|
-
- tests/fixtures/fail22.json
|
77
|
-
- tests/fixtures/fail28.json
|
78
|
-
- tests/fixtures/pass2.json
|
79
|
-
- tests/fixtures/pass16.json
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: "0"
|
89
|
+
version:
|
80
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
91
|
requirements:
|
82
|
-
|
83
|
-
|
84
|
-
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: "0"
|
85
95
|
version:
|
86
|
-
extensions: []
|
87
|
-
|
88
|
-
rubygems_version: 1.3.3
|
89
96
|
requirements: []
|
90
97
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
version: !ruby/object:Gem::Version
|
98
|
-
version: 1.1.7
|
99
|
-
require_paths:
|
100
|
-
- lib
|
101
|
-
dependencies: []
|
98
|
+
rubyforge_project: json-jruby
|
99
|
+
rubygems_version: 1.3.5
|
100
|
+
signing_key:
|
101
|
+
specification_version: 3
|
102
|
+
summary: A JSON implementation as a JRuby extension
|
103
|
+
test_files: []
|
102
104
|
|
103
|
-
bindir: bin
|
104
|
-
has_rdoc: true
|
data/tests/runner.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'test/unit/ui/console/testrunner'
|
4
|
-
require 'test/unit/testsuite'
|
5
|
-
$:.unshift File.expand_path(File.dirname($0))
|
6
|
-
$:.unshift 'tests'
|
7
|
-
require 'test_json'
|
8
|
-
require 'test_json_generate'
|
9
|
-
require 'test_json_unicode'
|
10
|
-
require 'test_json_addition'
|
11
|
-
require 'test_json_rails'
|
12
|
-
require 'test_json_fixtures'
|
13
|
-
require 'test_jjrb_offsets'
|
14
|
-
|
15
|
-
class TS_AllTests
|
16
|
-
def self.suite
|
17
|
-
suite = Test::Unit::TestSuite.new name
|
18
|
-
suite << TC_JSONGenerate.suite
|
19
|
-
suite << TC_JSON.suite
|
20
|
-
suite << TC_JSONUnicode.suite
|
21
|
-
suite << TC_JSONAddition.suite
|
22
|
-
suite << TC_JSONRails.suite
|
23
|
-
suite << TC_JSONFixtures.suite
|
24
|
-
suite << TestJjrbOffsets.suite
|
25
|
-
end
|
26
|
-
end
|
27
|
-
Test::Unit::UI::Console::TestRunner.run(TS_AllTests)
|