aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/json.rb
diff options
context:
space:
mode:
authorSam Stephenson <sam@37signals.com>2005-12-27 03:11:03 +0000
committerSam Stephenson <sam@37signals.com>2005-12-27 03:11:03 +0000
commite567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a (patch)
tree47baca37670f0ad23d803c2f939199147efe4287 /activesupport/test/json.rb
parent0b55ce7191b167d67ec7ccc7eb8db2e5fac4f2e1 (diff)
downloadrails-e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a.tar.gz
rails-e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a.tar.bz2
rails-e567a5eb1afe1ac38f1da37f1c1e3922bbf79d2a.zip
Add ActiveSupport::JSON and Object#to_json for converting Ruby objects to JSON strings
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3356 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/test/json.rb')
-rw-r--r--activesupport/test/json.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/activesupport/test/json.rb b/activesupport/test/json.rb
new file mode 100644
index 0000000000..c5b597abd7
--- /dev/null
+++ b/activesupport/test/json.rb
@@ -0,0 +1,53 @@
+$:.unshift File.dirname(__FILE__) + '/../lib'
+require 'active_support'
+require 'test/unit'
+
+class Foo
+ def initialize(a, b)
+ @a, @b = a, b
+ end
+end
+
+class TestJSONEmitters < Test::Unit::TestCase
+ TrueTests = [[ true, %(true) ]]
+ FalseTests = [[ false, %(false) ]]
+ NilTests = [[ nil, %(null) ]]
+ NumericTests = [[ 1, %(1) ],
+ [ 2.5, %(2.5) ]]
+
+ StringTests = [[ 'this is the string', %("this is the string") ],
+ [ 'a "string" with quotes', %("a \\"string\\" with quotes") ]]
+
+ ArrayTests = [[ ['a', 'b', 'c'], %([\"a\", \"b\", \"c\"]) ],
+ [ [1, 'a', :b, nil, false], %([1, \"a\", \"b\", null, false]) ]]
+
+ HashTests = [[ {:a => :b, :c => :d}, %({\"c\": \"d\", \"a\": \"b\"}) ]]
+
+ SymbolTests = [[ :a, %("a") ],
+ [ :this, %("this") ],
+ [ :"a b", %("a b") ]]
+
+ ObjectTests = [[ Foo.new(1, 2), %({\"a\": 1, \"b\": 2}) ]]
+
+ constants.grep(/Tests$/).each do |class_tests|
+ define_method("test_#{class_tests[0..-6].downcase}") do
+ self.class.const_get(class_tests).each do |pair|
+ assert_equal pair.last, pair.first.to_json
+ end
+ end
+ end
+
+ def test_utf8_string_encoded_properly_when_kcode_is_utf8
+ old_kcode, $KCODE = $KCODE, 'UTF8'
+ assert_equal '"\\u20ac2.99"', '€2.99'.to_json
+ assert_equal '"\\u270e\\u263a"', '✎☺'.to_json
+ ensure
+ $KCODE = old_kcode
+ end
+
+ def test_exception_raised_when_encoding_circular_reference
+ a = [1]
+ a << a
+ assert_raises(ActiveSupport::JSON::CircularReferenceError) { a.to_json }
+ end
+end