Change source structure according to OSCI-991
[packages/precise/mcollective.git] / mcollective-2.3.3 / lib / mcollective / vendor / json / tests / test_json_encoding.rb
1 #!/usr/bin/env ruby
2 # -*- coding: utf-8 -*-
3
4 require 'test/unit'
5 require File.join(File.dirname(__FILE__), 'setup_variant')
6
7 class TC_JSONEncoding < Test::Unit::TestCase
8   include JSON
9
10   def setup
11     @utf_8 = '["© ≠ €!"]'
12     @parsed = [ "© ≠ €!" ]
13     @generated = '["\u00a9 \u2260 \u20ac!"]'
14     if String.method_defined?(:encode)
15       @utf_16_data = [@parsed.first.encode('utf-16be', 'utf-8')]
16       @utf_8_ascii_8bit = @utf_8.dup.force_encoding(Encoding::ASCII_8BIT)
17       @utf_16be = @utf_8.encode('utf-16be', 'utf-8')
18       @utf_16be_ascii_8bit = @utf_16be.dup.force_encoding(Encoding::ASCII_8BIT)
19       @utf_16le = @utf_8.encode('utf-16le', 'utf-8')
20       @utf_16le_ascii_8bit = @utf_16le.dup.force_encoding(Encoding::ASCII_8BIT)
21       @utf_32be = @utf_8.encode('utf-32be', 'utf-8')
22       @utf_32be_ascii_8bit = @utf_32be.dup.force_encoding(Encoding::ASCII_8BIT)
23       @utf_32le = @utf_8.encode('utf-32le', 'utf-8')
24       @utf_32le_ascii_8bit = @utf_32le.dup.force_encoding(Encoding::ASCII_8BIT)
25     else
26       require 'iconv'
27       @utf_16_data = Iconv.iconv('utf-16be', 'utf-8', @parsed.first)
28       @utf_8_ascii_8bit = @utf_8.dup
29       @utf_16be, = Iconv.iconv('utf-16be', 'utf-8', @utf_8)
30       @utf_16be_ascii_8bit = @utf_16be.dup
31       @utf_16le, = Iconv.iconv('utf-16le', 'utf-8', @utf_8)
32       @utf_16le_ascii_8bit = @utf_16le.dup
33       @utf_32be, = Iconv.iconv('utf-32be', 'utf-8', @utf_8)
34       @utf_32be_ascii_8bit = @utf_32be.dup
35       @utf_32le, = Iconv.iconv('utf-32le', 'utf-8', @utf_8)
36       @utf_32le_ascii_8bit = @utf_32le.dup
37     end
38   end
39
40   def test_parse
41     assert_equal @parsed, JSON.parse(@utf_8)
42     assert_equal @parsed, JSON.parse(@utf_16be)
43     assert_equal @parsed, JSON.parse(@utf_16le)
44     assert_equal @parsed, JSON.parse(@utf_32be)
45     assert_equal @parsed, JSON.parse(@utf_32le)
46   end
47
48   def test_parse_ascii_8bit
49     assert_equal @parsed, JSON.parse(@utf_8_ascii_8bit)
50     assert_equal @parsed, JSON.parse(@utf_16be_ascii_8bit)
51     assert_equal @parsed, JSON.parse(@utf_16le_ascii_8bit)
52     assert_equal @parsed, JSON.parse(@utf_32be_ascii_8bit)
53     assert_equal @parsed, JSON.parse(@utf_32le_ascii_8bit)
54   end
55
56   def test_generate
57     assert_equal @generated, JSON.generate(@parsed, :ascii_only => true)
58     if defined?(::Encoding)
59       assert_equal @generated, JSON.generate(@utf_16_data, :ascii_only => true)
60     else
61       # XXX checking of correct utf8 data is not as strict (yet?) without :ascii_only
62       assert_raises(JSON::GeneratorError) { JSON.generate(@utf_16_data, :ascii_only => true) }
63     end
64   end
65 end