-
-
Notifications
You must be signed in to change notification settings - Fork 253
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
1,029 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
source "https://rubygems.org" | ||
|
||
gem "rails", "6.0.0" | ||
gem "sqlite3" | ||
|
||
gemspec :path => "../" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
Tests copied from [rails/activesupport/test/json/], | ||
[rails/activesupport/lib/active_support], [rails/activesupport/test]. | ||
|
||
[rails/activesupport/test/json/]: https://github.com/rails/rails/tree/v6.0.0/activesupport/test/json | ||
[rails/activesupport/lib/active_support]: https://github.com/rails/rails/tree/v6.0.0/activesupport/lib/active_support | ||
[rails/activesupport/test]: https://github.com/rails/rails/tree/v6.0.0/activesupport/test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# frozen_string_literal: true | ||
|
||
ORIG_ARGV = ARGV.dup | ||
|
||
require "active_support/core_ext/kernel/reporting" | ||
|
||
silence_warnings do | ||
Encoding.default_internal = Encoding::UTF_8 | ||
Encoding.default_external = Encoding::UTF_8 | ||
end | ||
|
||
require "active_support/testing/autorun" | ||
require "active_support/testing/method_call_assertions" | ||
|
||
ENV["NO_RELOAD"] = "1" | ||
require "active_support" | ||
|
||
Thread.abort_on_exception = true | ||
|
||
# Show backtraces for deprecated behavior for quicker cleanup. | ||
ActiveSupport::Deprecation.debug = true | ||
|
||
# Default to old to_time behavior but allow running tests with new behavior | ||
ActiveSupport.to_time_preserves_timezone = ENV["PRESERVE_TIMEZONES"] == "1" | ||
|
||
# Disable available locale checks to avoid warnings running the test suite. | ||
I18n.enforce_available_locales = false | ||
|
||
class ActiveSupport::TestCase | ||
include ActiveSupport::Testing::MethodCallAssertions | ||
|
||
private | ||
# Skips the current run on Rubinius using Minitest::Assertions#skip | ||
def rubinius_skip(message = "") | ||
skip message if RUBY_ENGINE == "rbx" | ||
end | ||
|
||
# Skips the current run on JRuby using Minitest::Assertions#skip | ||
def jruby_skip(message = "") | ||
skip message if defined?(JRUBY_VERSION) | ||
end | ||
end | ||
|
||
require_relative "test_common" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
# frozen_string_literal: true | ||
|
||
require_relative "abstract_unit" | ||
require "active_support/json" | ||
require "active_support/time" | ||
require_relative "time_zone_test_helpers" | ||
|
||
require 'oj' | ||
|
||
Oj::Rails.set_decoder() | ||
|
||
class TestJSONDecoding < ActiveSupport::TestCase | ||
include TimeZoneTestHelpers | ||
|
||
# Added for testing if Oj is used. | ||
test "oj is used as an encoder" do | ||
assert_equal ActiveSupport.json_encoder, Oj::Rails::Encoder | ||
end | ||
|
||
class Foo | ||
def self.json_create(object) | ||
"Foo" | ||
end | ||
end | ||
|
||
TESTS = { | ||
%q({"returnTo":{"\/categories":"\/"}}) => { "returnTo" => { "/categories" => "/" } }, | ||
%q({"return\\"To\\":":{"\/categories":"\/"}}) => { "return\"To\":" => { "/categories" => "/" } }, | ||
%q({"returnTo":{"\/categories":1}}) => { "returnTo" => { "/categories" => 1 } }, | ||
%({"returnTo":[1,"a"]}) => { "returnTo" => [1, "a"] }, | ||
%({"returnTo":[1,"\\"a\\",", "b"]}) => { "returnTo" => [1, "\"a\",", "b"] }, | ||
%({"a": "'", "b": "5,000"}) => { "a" => "'", "b" => "5,000" }, | ||
%({"a": "a's, b's and c's", "b": "5,000"}) => { "a" => "a's, b's and c's", "b" => "5,000" }, | ||
# multibyte | ||
%({"matzue": "松江", "asakusa": "浅草"}) => { "matzue" => "松江", "asakusa" => "浅草" }, | ||
%({"a": "2007-01-01"}) => { "a" => Date.new(2007, 1, 1) }, | ||
%({"a": "2007-01-01 01:12:34 Z"}) => { "a" => Time.utc(2007, 1, 1, 1, 12, 34) }, | ||
%(["2007-01-01 01:12:34 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34)], | ||
%(["2007-01-01 01:12:34 Z", "2007-01-01 01:12:35 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34), Time.utc(2007, 1, 1, 1, 12, 35)], | ||
# no time zone | ||
%({"a": "2007-01-01 01:12:34"}) => { "a" => Time.new(2007, 1, 1, 1, 12, 34, "-05:00") }, | ||
# invalid date | ||
%({"a": "1089-10-40"}) => { "a" => "1089-10-40" }, | ||
# xmlschema date notation | ||
%({"a": "2009-08-10T19:01:02"}) => { "a" => Time.new(2009, 8, 10, 19, 1, 2, "-04:00") }, | ||
%({"a": "2009-08-10T19:01:02Z"}) => { "a" => Time.utc(2009, 8, 10, 19, 1, 2) }, | ||
%({"a": "2009-08-10T19:01:02+02:00"}) => { "a" => Time.utc(2009, 8, 10, 17, 1, 2) }, | ||
%({"a": "2009-08-10T19:01:02-05:00"}) => { "a" => Time.utc(2009, 8, 11, 00, 1, 2) }, | ||
# needs to be *exact* | ||
%({"a": " 2007-01-01 01:12:34 Z "}) => { "a" => " 2007-01-01 01:12:34 Z " }, | ||
%({"a": "2007-01-01 : it's your birthday"}) => { "a" => "2007-01-01 : it's your birthday" }, | ||
%([]) => [], | ||
%({}) => {}, | ||
%({"a":1}) => { "a" => 1 }, | ||
%({"a": ""}) => { "a" => "" }, | ||
%({"a":"\\""}) => { "a" => "\"" }, | ||
%({"a": null}) => { "a" => nil }, | ||
%({"a": true}) => { "a" => true }, | ||
%({"a": false}) => { "a" => false }, | ||
'{"bad":"\\\\","trailing":""}' => { "bad" => "\\", "trailing" => "" }, | ||
%q({"a": "http:\/\/test.host\/posts\/1"}) => { "a" => "http://test.host/posts/1" }, | ||
%q({"a": "\u003cunicode\u0020escape\u003e"}) => { "a" => "<unicode escape>" }, | ||
'{"a": "\\\\u0020skip double backslashes"}' => { "a" => "\\u0020skip double backslashes" }, | ||
%q({"a": "\u003cbr /\u003e"}) => { "a" => "<br />" }, | ||
%q({"b":["\u003ci\u003e","\u003cb\u003e","\u003cu\u003e"]}) => { "b" => ["<i>", "<b>", "<u>"] }, | ||
# test combination of dates and escaped or unicode encoded data in arrays | ||
%q([{"d":"1970-01-01", "s":"\u0020escape"},{"d":"1970-01-01", "s":"\u0020escape"}]) => | ||
[{ "d" => Date.new(1970, 1, 1), "s" => " escape" }, { "d" => Date.new(1970, 1, 1), "s" => " escape" }], | ||
%q([{"d":"1970-01-01","s":"http:\/\/example.com"},{"d":"1970-01-01","s":"http:\/\/example.com"}]) => | ||
[{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" }, | ||
{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" }], | ||
# tests escaping of "\n" char with Yaml backend | ||
%q({"a":"\n"}) => { "a" => "\n" }, | ||
%q({"a":"\u000a"}) => { "a" => "\n" }, | ||
%q({"a":"Line1\u000aLine2"}) => { "a" => "Line1\nLine2" }, | ||
# prevent json unmarshalling | ||
'{"json_class":"TestJSONDecoding::Foo"}' => { "json_class" => "TestJSONDecoding::Foo" }, | ||
# json "fragments" - these are invalid JSON, but ActionPack relies on this | ||
'"a string"' => "a string", | ||
"1.1" => 1.1, | ||
"1" => 1, | ||
"-1" => -1, | ||
"true" => true, | ||
"false" => false, | ||
"null" => nil | ||
} | ||
|
||
TESTS.each_with_index do |(json, expected), index| | ||
fail_message = "JSON decoding failed for #{json}" | ||
|
||
test "json decodes #{index}" do | ||
with_tz_default "Eastern Time (US & Canada)" do | ||
with_parse_json_times(true) do | ||
silence_warnings do | ||
if expected.nil? | ||
assert_nil ActiveSupport::JSON.decode(json), fail_message | ||
else | ||
assert_equal expected, ActiveSupport::JSON.decode(json), fail_message | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
test "json decodes time json with time parsing disabled" do | ||
with_parse_json_times(false) do | ||
expected = { "a" => "2007-01-01 01:12:34 Z" } | ||
assert_equal expected, ActiveSupport::JSON.decode(%({"a": "2007-01-01 01:12:34 Z"})) | ||
end | ||
end | ||
|
||
def test_failed_json_decoding | ||
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%(undefined)) } | ||
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({a: 1})) } | ||
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({: 1})) } | ||
assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%()) } | ||
end | ||
|
||
def test_cannot_pass_unsupported_options | ||
assert_raise(ArgumentError) { ActiveSupport::JSON.decode("", create_additions: true) } | ||
end | ||
|
||
private | ||
|
||
def with_parse_json_times(value) | ||
old_value = ActiveSupport.parse_json_times | ||
ActiveSupport.parse_json_times = value | ||
yield | ||
ensure | ||
ActiveSupport.parse_json_times = old_value | ||
end | ||
end |
Oops, something went wrong.