class PhusionPassenger::Utils::GeneratorTest

def generate(obj) JSON.generate(obj) end

def generate(obj) JSON.generate(obj) end

def test_array

def test_array
  assert_equal %([1, 2, 3]), generate([1, 2, 3])
end

def test_bool

def test_bool
  assert_equal %([true, false]), generate([true, false])
end

def test_date

def test_date
  time = Date.new(2012, 04, 19)
  assert_equal %(["2012-04-19"]), generate([time])
end

def test_hash

def test_hash
  json = generate(:abc => 123, 123 => 'abc')
  assert_match /^\{/, json
  assert_match /\}$/, json
  assert_equal [%("123": "abc"), %("abc": 123)], json[1...-1].split(', ').sort
end

def test_invalid_json

def test_invalid_json
  assert_raises(ArgumentError) { generate("abc") }
end

def test_invalid_object

def test_invalid_object
  err = assert_raises(ArgumentError) { generate("a" => Object.new) }
  assert_equal "can't serialize Object", err.message
end

def test_nested_structure

def test_nested_structure
  json = generate(:hash => {1=>2}, :array => [1,2])
  assert json.include?(%("hash": {"1": 2}))
  assert json.include?(%("array": [1, 2]))
end

def test_null

def test_null
  assert_equal %([null]), generate([nil])
end

def test_string

def test_string
  assert_equal %(["abc\\n123"]), generate(["abc\n123"])
end

def test_string_unicode

def test_string_unicode
  assert_equal %(["ć\\\\\\\\\\đ"]), generate([\"č\nž\tš\\đ"])
end

def test_symbol

def test_symbol
  assert_equal %(["abc"]), generate([:abc])
end

def test_time

def test_time
  time = Time.utc(2012, 04, 19, 1, 2, 3)
  assert_equal %(["2012-04-19 01:02:03 UTC"]), generate([time])
end