# _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # # for lib/facets/more/json.rb # # Extracted Tue Jun 20 15:12:27 EDT 2006 # Unit Tools Reap Test Extractor # require 'facets/more/json.rb' require 'test/unit' class TC_JSON < Test::Unit::TestCase include JSON class A def initialize(a) @a = a end attr_reader :a def ==(other) a == other.a end def self.json_create(object) new(*object['args']) end def to_json(*args) { 'json_class' => self.class, 'args' => [ @a ], }.to_json(*args) end end def setup $KCODE = 'UTF8' @ary = [1, "foo", 3.14, 4711.0, 2.718, nil, [1,-2,3], false, true] @ary_to_parse = ["1", '"foo"', "3.14", "4711.0", "2.718", "null", "[1,-2,3]", "false", "true"] @hash = { 'a' => 2, 'b' => 3.141, 'c' => 'c', 'd' => [ 1, "b", 3.14 ], 'e' => { 'foo' => 'bar' }, 'g' => "\"\0\037", 'h' => 1000.0, 'i' => 0.001 } @json = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' + '"g":"\\"\\u0000\\u001f","h":1.0E3,"i":1.0E-3}' @json2 = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' + '"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}' end def test_parse_value assert_equal("", parse('""')) assert_equal("\\", parse('"\\\\"')) assert_equal('"', parse('"\""')) assert_equal('\\"\\', parse('"\\\\\\"\\\\"')) assert_equal("\\a\"\b\f\n\r\t\0\037", parse('"\\a\"\b\f\n\r\t\u0000\u001f"')) for i in 0 ... @ary.size assert_equal(@ary[i], parse(@ary_to_parse[i])) end end def test_parse_array assert_equal([], parse('[]')) assert_equal([], parse(' [ ] ')) assert_equal([1], parse('[1]')) assert_equal([1], parse(' [ 1 ] ')) assert_equal(@ary, parse('[1,"foo",3.14,47.11e+2,2718.E-3,null,[1,-2,3],false,true]')) assert_equal(@ary, parse(%Q{ [ 1 , "foo" , 3.14 \t , 47.11e+2 , 2718.E-3 ,\n null , [1, -2, 3 ], false , true\n ] })) end def test_parse_object assert_equal({}, parse('{}')) assert_equal({}, parse(' { } ')) assert_equal({'foo'=>'bar'}, parse('{"foo":"bar"}')) assert_equal({'foo'=>'bar'}, parse(' { "foo" : "bar" } ')) end def test_unparse json = unparse(@hash) assert_equal(@json2, json) parsed_json = parse(json) assert_equal(@hash, parsed_json) json = unparse({1=>2}) assert_equal('{"1":2}', json) parsed_json = parse(json) assert_equal({"1"=>2}, parsed_json) end def test_parser_reset parser = Parser.new(@json) assert_equal(@hash, parser.parse) assert_equal(@hash, parser.parse) end def test_unicode assert_equal '""', ''.to_json assert_equal '"\\b"', "\b".to_json assert_equal '"\u0001"', 0x1.chr.to_json assert_equal '"\u001f"', 0x1f.chr.to_json assert_equal '" "', ' '.to_json assert_equal "\"#{0x7f.chr}\"", 0x7f.chr.to_json utf8 = '© ≠ €!' json = '"\u00a9 \u2260 \u20ac!"' assert_equal json, utf8.to_json assert_equal utf8, parse(json) utf8 = "\343\201\202\343\201\204\343\201\206\343\201\210\343\201\212" json = '"\u3042\u3044\u3046\u3048\u304a"' assert_equal json, utf8.to_json assert_equal utf8, parse(json) utf8 = 'საქართველო' json = '"\u10e1\u10d0\u10e5\u10d0\u10e0\u10d7\u10d5\u10d4\u10da\u10dd"' assert_equal json, utf8.to_json assert_equal utf8, parse(json) end def test_comments json = < "value1", "key2" => "value2", "key3" => "value3" }, parse(json)) json = < "value1" }, parse(json)) end def test_extended_json a = A.new(666) json = a.to_json a_again = JSON.parse(json) assert_kind_of a.class, a_again assert_equal a, a_again end def test_raw_strings raw = '' raw_array = [] for i in 0..255 raw << i raw_array << i end json = raw.to_json_raw json_raw_object = raw.to_json_raw_object hash = { 'json_class' => 'String', 'raw'=> raw_array } assert_equal hash, json_raw_object json_raw = <