locale 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. data/COPYING +55 -0
  2. data/ChangeLog +113 -0
  3. data/README +100 -0
  4. data/Rakefile +77 -0
  5. data/doc/classes/Locale/Driver.html +375 -0
  6. data/doc/classes/Locale/Driver/CGI.html +502 -0
  7. data/doc/classes/Locale/Driver/Env.html +440 -0
  8. data/doc/classes/Locale/Driver/JRuby.html +390 -0
  9. data/doc/classes/Locale/Driver/Posix.html +431 -0
  10. data/doc/classes/Locale/Driver/Win32.html +398 -0
  11. data/doc/classes/Locale/Driver/Win32Table.html +356 -0
  12. data/doc/classes/Locale/Info.html +586 -0
  13. data/doc/classes/Locale/Info/Language.html +764 -0
  14. data/doc/classes/Locale/Info/Region.html +470 -0
  15. data/doc/classes/Locale/Tag/Cldr.html +547 -0
  16. data/doc/classes/Locale/Tag/Common.html +655 -0
  17. data/doc/classes/Locale/Tag/Illegular.html +424 -0
  18. data/doc/classes/Locale/Tag/Posix.html +612 -0
  19. data/doc/classes/Locale/Tag/Rfc.html +610 -0
  20. data/doc/classes/Locale/Tag/Simple.html +684 -0
  21. data/doc/classes/Locale/TagList.html +783 -0
  22. data/doc/classes/Locale/Util.html +476 -0
  23. data/doc/classes/Locale/Util/Memoizable.html +356 -0
  24. data/doc/created.rid +1 -0
  25. data/doc/files/ChangeLog.html +497 -0
  26. data/doc/files/README.html +525 -0
  27. data/doc/files/lib/locale/driver/cgi_rb.html +342 -0
  28. data/doc/files/lib/locale/driver/env_rb.html +354 -0
  29. data/doc/files/lib/locale/driver/jruby_rb.html +359 -0
  30. data/doc/files/lib/locale/driver/posix_rb.html +349 -0
  31. data/doc/files/lib/locale/driver/win32_rb.html +359 -0
  32. data/doc/files/lib/locale/driver/win32_table_rb.html +342 -0
  33. data/doc/files/lib/locale/info/language_rb.html +353 -0
  34. data/doc/files/lib/locale/info/region_rb.html +353 -0
  35. data/doc/files/lib/locale/info_rb.html +354 -0
  36. data/doc/files/lib/locale/tag/cldr_rb.html +342 -0
  37. data/doc/files/lib/locale/tag/common_rb.html +342 -0
  38. data/doc/files/lib/locale/tag/illegular_rb.html +349 -0
  39. data/doc/files/lib/locale/tag/posix_rb.html +342 -0
  40. data/doc/files/lib/locale/tag/rfc_rb.html +342 -0
  41. data/doc/files/lib/locale/tag/simple_rb.html +349 -0
  42. data/doc/files/lib/locale/tag_rb.html +374 -0
  43. data/doc/files/lib/locale/taglist_rb.html +342 -0
  44. data/doc/files/lib/locale/util/memoizable_rb.html +360 -0
  45. data/doc/files/lib/locale/version_rb.html +342 -0
  46. data/doc/files/lib/locale_rb.html +379 -0
  47. data/doc/fr_class_index.html +20 -0
  48. data/doc/fr_file_index.html +23 -0
  49. data/doc/fr_method_index.html +80 -0
  50. data/doc/index.html +1 -0
  51. data/doc/rdoc-style.css +320 -0
  52. data/lib/locale.rb +248 -0
  53. data/lib/locale/data/languages.tab.gz +0 -0
  54. data/lib/locale/data/regions.tab.gz +0 -0
  55. data/lib/locale/driver/cgi.rb +132 -0
  56. data/lib/locale/driver/env.rb +64 -0
  57. data/lib/locale/driver/jruby.rb +53 -0
  58. data/lib/locale/driver/posix.rb +49 -0
  59. data/lib/locale/driver/win32.rb +61 -0
  60. data/lib/locale/driver/win32_table.rb +298 -0
  61. data/lib/locale/info.rb +12 -0
  62. data/lib/locale/info/language.rb +134 -0
  63. data/lib/locale/info/region.rb +74 -0
  64. data/lib/locale/tag.rb +36 -0
  65. data/lib/locale/tag/cldr.rb +93 -0
  66. data/lib/locale/tag/common.rb +122 -0
  67. data/lib/locale/tag/illegular.rb +38 -0
  68. data/lib/locale/tag/posix.rb +97 -0
  69. data/lib/locale/tag/rfc.rb +106 -0
  70. data/lib/locale/tag/simple.rb +145 -0
  71. data/lib/locale/taglist.rb +93 -0
  72. data/lib/locale/util/memoizable.rb +76 -0
  73. data/lib/locale/version.rb +12 -0
  74. data/samples/cgi/README +20 -0
  75. data/samples/cgi/cookie.cgi +62 -0
  76. data/samples/cgi/http.rb +52 -0
  77. data/samples/cgi/index.cgi +90 -0
  78. data/samples/cgi/locale.css +115 -0
  79. data/samples/sample_1.rb +25 -0
  80. data/samples/sample_info.rb +6 -0
  81. data/setup.rb +1585 -0
  82. data/test/test_detect_cgi.rb +179 -0
  83. data/test/test_detect_general.rb +159 -0
  84. data/test/test_info.rb +28 -0
  85. data/test/test_tag.rb +1183 -0
  86. data/test/test_thread.rb +37 -0
  87. metadata +162 -0
@@ -0,0 +1,179 @@
1
+ require 'cgi'
2
+ require 'locale'
3
+ require 'test/unit'
4
+
5
+ class CGI
6
+ module QueryExtension
7
+ # Override this method to avoid to put warning messages.
8
+ module_function
9
+ def readlines=(str)
10
+ @@lines = [str]
11
+ end
12
+ def readlines
13
+ @@lines
14
+ end
15
+ def read_from_cmdline
16
+ require "shellwords"
17
+ string = readlines.join(' ').gsub(/\n/n, '').gsub(/\\=/n, '%3D').gsub(/\\&/n, '%26')
18
+
19
+ words = Shellwords.shellwords(string)
20
+
21
+ if words.find{|x| /=/n.match(x) }
22
+ words.join('&')
23
+ else
24
+ words.join('+')
25
+ end
26
+ end
27
+ private :read_from_cmdline
28
+ end
29
+ end
30
+
31
+ class TestDetectCGI < Test::Unit::TestCase
32
+ def setup_cgi(str)
33
+ CGI::QueryExtension.readlines = str
34
+ Locale.init(:driver => :cgi)
35
+ cgi = CGI.new
36
+ Locale.cgi = cgi
37
+ Locale.clear_all
38
+ end
39
+
40
+ def test_query_string
41
+ #query string
42
+ setup_cgi("lang=ja_JP")
43
+ lang = Locale.current[0]
44
+ assert_equal(Locale::Tag::Simple, lang.class)
45
+ assert_equal("ja_JP", lang.to_s)
46
+
47
+ setup_cgi("lang=ja-jp")
48
+ lang = Locale.current[0]
49
+ assert_equal(Locale::Tag::Simple, lang.class)
50
+ assert_equal("ja_JP", lang.to_s)
51
+ assert_equal("ja-JP", lang.to_rfc.to_s)
52
+ setup_cgi("lang=ja-jp")
53
+ assert_equal("ja_JP", lang.to_s)
54
+ assert_equal("ja-JP", lang.to_rfc.to_s)
55
+
56
+ end
57
+
58
+ def test_cookie
59
+ #cockie
60
+ setup_cgi("Set-Cookie: lang=en-us")
61
+ assert_equal("en_US", Locale.current.to_s)
62
+ end
63
+
64
+ def test_accept_language
65
+ setup_cgi("")
66
+ ENV["HTTP_ACCEPT_LANGUAGE"] = ""
67
+ ENV["HTTP_ACCEPT_CHARSET"] = ""
68
+ lang = Locale.current[0]
69
+ assert_equal(Locale::Tag::Simple, lang.class)
70
+ assert_equal("en", lang.to_s)
71
+ assert_equal("en", lang.to_rfc.to_s)
72
+
73
+ setup_cgi("")
74
+ ENV["HTTP_ACCEPT_LANGUAGE"] = "ja,en-us;q=0.7,en;q=0.3"
75
+ lang1, lang2, lang3 = Locale.current
76
+ assert_equal("ja", lang1.to_rfc.to_s)
77
+ assert_equal("en-US", lang2.to_rfc.to_s)
78
+ assert_equal("en", lang3.to_rfc.to_s)
79
+
80
+ setup_cgi("")
81
+ ENV["HTTP_ACCEPT_LANGUAGE"] = "en-us,ja;q=0.7,en;q=0.3"
82
+ lang1, lang2, lang3 = Locale.current
83
+ assert_equal("en-US", lang1.to_rfc.to_s)
84
+ assert_equal("ja", lang2.to_rfc.to_s)
85
+ assert_equal("en", lang3.to_rfc.to_s)
86
+
87
+ setup_cgi("")
88
+ ENV["HTTP_ACCEPT_LANGUAGE"] = "en"
89
+ lang = Locale.current[0]
90
+ assert_equal("en", lang.to_rfc.to_s)
91
+ end
92
+
93
+ def test_accept_charset
94
+ #accept charset
95
+ setup_cgi("")
96
+ ENV["HTTP_ACCEPT_CHARSET"] = "Shift_JIS"
97
+ assert_equal("Shift_JIS", Locale.charset)
98
+
99
+ setup_cgi("")
100
+ ENV["HTTP_ACCEPT_CHARSET"] = "EUC-JP,*,utf-8"
101
+ assert_equal("EUC-JP", Locale.charset)
102
+
103
+ setup_cgi("")
104
+ ENV["HTTP_ACCEPT_CHARSET"] = "*"
105
+ assert_equal("UTF-8", Locale.charset)
106
+
107
+ setup_cgi("")
108
+ ENV["HTTP_ACCEPT_CHARSET"] = ""
109
+ assert_equal("UTF-8", Locale.charset)
110
+ end
111
+
112
+ def test_default
113
+ Locale.set_default(nil)
114
+ Locale.set_default("ja-JP")
115
+ setup_cgi("")
116
+ ENV["HTTP_ACCEPT_LANGUAGE"] = ""
117
+ ENV["HTTP_ACCEPT_CHARSET"] = ""
118
+ assert_equal("ja-JP", Locale.default.to_rfc.to_s)
119
+ assert_equal("ja-JP", Locale.current.to_rfc.to_s)
120
+ Locale.set_default(nil)
121
+ end
122
+
123
+ def common(*ary)
124
+ ary.map{|v| Locale::Tag::Common.parse(v)}
125
+ end
126
+
127
+ def rfc(*ary)
128
+ ary.map{|v| Locale::Tag::Rfc.parse(v)}
129
+ end
130
+
131
+ def cldr(*ary)
132
+ ary.map{|v| Locale::Tag::Cldr.parse(v)}
133
+ end
134
+
135
+ def simple(*ary)
136
+ ary.map{|v| Locale::Tag::Simple.parse(v)}
137
+ end
138
+
139
+ def test_candidates
140
+ setup_cgi("")
141
+
142
+ ENV["HTTP_ACCEPT_LANGUAGE"] = "fr-fr,zh_CN;q=0.7,zh_TW;q=0.2,ja_JP;q=0.1"
143
+
144
+ assert_equal common("fr-FR", "zh-CN", "zh-TW", "ja-JP",
145
+ "fr", "zh", "ja", "en"), Locale.candidates
146
+
147
+ assert_equal rfc("fr-FR", "zh-CN", "zh-TW", "ja-JP", "fr",
148
+ "zh", "ja", "en"), Locale.candidates(:type => :rfc)
149
+
150
+ assert_equal cldr("fr_FR", "zh_CN", "zh_TW", "ja_JP", "fr",
151
+ "zh", "ja", "en"), Locale.candidates(:type => :cldr)
152
+
153
+ assert_equal simple("fr-FR", "zh-CN", "zh-TW", "ja-JP",
154
+ "fr", "zh", "ja", "en"), Locale.candidates(:type => :simple)
155
+
156
+ assert_equal common("fr_FR", "zh", "ja"), Locale.candidates(:type => :common,
157
+ :supported_language_tags => ["fr_FR", "ja", "zh"])
158
+
159
+ assert_equal simple("fr-FR", "zh", "ja"), Locale.candidates(:type => :simple,
160
+ :supported_language_tags => ["fr-FR", "ja", "zh"])
161
+
162
+ assert_equal simple("fr-FR", "zh", "ja", "no", "pt"),
163
+ Locale.candidates(:type => :simple,
164
+ :supported_language_tags => ["fr-FR", "ja", "zh", "no", "pt"],
165
+ :default_language_tags => ["no", "pt"])
166
+
167
+ assert_equal simple("no", "pt"), Locale.candidates(:type => :simple,
168
+ :supported_language_tags => ["aa"],
169
+ :default_language_tags => ["no", "pt"])
170
+ assert_equal simple("en"), Locale.candidates(:type => :simple,
171
+ :supported_language_tags => ["aa"])
172
+
173
+ taglist = Locale.candidates(:type => :rfc)
174
+ assert_equal Locale::TagList, taglist.class
175
+ assert_equal "fr", taglist.language
176
+ assert_equal "FR", taglist.region
177
+
178
+ end
179
+ end
@@ -0,0 +1,159 @@
1
+ require 'locale'
2
+ require 'test/unit'
3
+
4
+ class TestDetectGeneral < Test::Unit::TestCase
5
+
6
+ def setup
7
+ Locale.clear_all
8
+ ENV["LC_ALL"] = nil
9
+ ENV["LC_MESSAGES"] = nil
10
+ ENV["LANG"] = nil
11
+ ENV["LANGUAGE"] = nil
12
+ end
13
+
14
+ def test_lc_all
15
+ ENV["LC_ALL"] = "ja_JP.eucJP"
16
+ ENV["LC_MESSAGES"] = "zh_CN.UTF-8" #Ignored.
17
+ ENV["LANG"] = "ko_KR.UTF-8" #Ignored.
18
+ ENV["LANGUAGE"] = nil
19
+
20
+ lang = Locale.current[0]
21
+ assert_equal Locale::Tag::Posix, lang.class
22
+ assert_equal "ja", lang.language
23
+ assert_equal "JP", lang.region
24
+ assert_equal "eucJP", lang.charset
25
+ assert_equal Locale::Tag::Posix.new("ja", "JP", "eucJP"), lang
26
+
27
+ assert_equal "eucJP", Locale.charset
28
+ end
29
+
30
+ def test_lc_messages
31
+ ENV["LC_ALL"] = nil
32
+ ENV["LC_MESSAGES"] = "ja_JP.eucJP"
33
+ ENV["LANG"] = "ko_KR.UTF-8" #Ignored.
34
+ ENV["LANGUAGE"] = nil
35
+
36
+ lang = Locale.current[0]
37
+ assert_equal Locale::Tag::Posix, lang.class
38
+ assert_equal "ja", lang.language
39
+ assert_equal "JP", lang.region
40
+ assert_equal "eucJP", lang.charset
41
+ assert_equal Locale::Tag::Posix.new("ja", "JP", "eucJP"), lang
42
+
43
+ assert_equal "eucJP", Locale.charset
44
+ end
45
+
46
+ def test_lang
47
+ ENV["LC_ALL"] = nil
48
+ ENV["LC_MESSAGES"] = nil
49
+ ENV["LANG"] = "ja_JP.eucJP"
50
+ ENV["LANGUAGE"] = nil
51
+
52
+ lang = Locale.current[0]
53
+ assert_equal Locale::Tag::Posix, lang.class
54
+ assert_equal "ja", lang.language
55
+ assert_equal "JP", lang.region
56
+ assert_equal "eucJP", lang.charset
57
+ assert_equal Locale::Tag::Posix.new("ja", "JP", "eucJP"), lang
58
+
59
+ assert_equal "eucJP", Locale.charset
60
+ end
61
+
62
+ def test_lang
63
+ ENV["LC_ALL"] = "zh_CN.UTF-8" # Ignored.
64
+ ENV["LC_MESSAGES"] = "ko_KR.UTF-8" #Ingored.
65
+ ENV["LANG"] = "en_US.UTF-8" # Ignored.
66
+ ENV["LANGUAGE"] ="ja_JP.eucJP:zh_CN.UTF-8"
67
+
68
+ lang = Locale.current[0]
69
+ assert_equal Locale::Tag::Posix, lang.class
70
+ assert_equal "ja", lang.language
71
+ assert_equal "JP", lang.region
72
+ assert_equal "eucJP", lang.charset
73
+ assert_equal Locale::Tag::Posix.new("ja", "JP", "eucJP"), lang
74
+
75
+ # Use the LANG value (locale charmap don't use LANGUAGE)
76
+ assert_equal "UTF-8", Locale.charset
77
+ end
78
+
79
+ def test_language
80
+ ENV["LC_ALL"] = "ja_JP.Shift_JIS"
81
+ ENV["LANGUAGE"] = "zh_CN.UTF-8:ja_JP"
82
+
83
+ tags = Locale.current
84
+ assert_equal Locale::Tag::Posix, tags[0].class
85
+ assert_equal Locale::Tag::Posix, tags[1].class
86
+
87
+ assert_equal "zh", tags.language
88
+ assert_equal "CN", tags.region
89
+ assert_equal "UTF-8", tags.charset
90
+
91
+ assert_equal "zh", tags[0].language
92
+ assert_equal "CN", tags[0].region
93
+ assert_equal "UTF-8", tags[0].charset
94
+
95
+ assert_equal "ja", tags[1].language
96
+ assert_equal "JP", tags[1].region
97
+ assert_equal nil, tags[1].charset
98
+
99
+ assert_equal Locale::TagList.new([Locale::Tag::Posix.new("zh", "CN", "UTF-8"),
100
+ Locale::Tag::Posix.new("ja", "JP")]), tags
101
+
102
+ assert_equal "Shift_JIS", Locale.charset
103
+ end
104
+
105
+ def test_no_charset
106
+ ENV["LC_ALL"] = "cs_CZ"
107
+
108
+ lang = Locale.current[0]
109
+ assert_equal Locale::Tag::Posix, lang.class
110
+
111
+ assert_equal "cs", lang.language
112
+ assert_equal "CZ", lang.region
113
+ assert_equal nil, lang.charset
114
+ assert_equal Locale::Tag::Posix.new("cs", "CZ"), lang
115
+
116
+ if /linux|bsd/ =~ RUBY_PLATFORM
117
+ assert_equal "ISO-8859-2", Locale.charset
118
+ end
119
+ end
120
+
121
+ def test_default
122
+ Locale.set_default("yo_NG")
123
+ assert_equal Locale::Tag.parse("yo_NG"), Locale.default
124
+ assert_equal Locale::Tag.parse("yo_NG"), Locale.current[0]
125
+ Locale.set_default(nil)
126
+
127
+ Locale.default = "fr"
128
+ assert_equal Locale::Tag.parse("fr"), Locale.default
129
+ assert_equal Locale::Tag.parse("fr"), Locale.current[0]
130
+ Locale.default = nil
131
+ end
132
+
133
+ def test_current
134
+ Locale.set_current("yo_NG")
135
+ assert_equal Locale::Tag.parse("yo_NG"), Locale.current[0]
136
+
137
+ Locale.current = "fr"
138
+ assert_equal Locale::Tag.parse("fr"), Locale.current[0]
139
+
140
+ Locale.set_default("yo_NG")
141
+ Locale.current = "fr"
142
+ assert_equal Locale::Tag.parse("yo_NG"), Locale.default
143
+ assert_equal Locale::Tag.parse("fr"), Locale.current[0]
144
+ Locale.set_default(nil)
145
+ end
146
+
147
+ def test_clear
148
+ ENV["LC_ALL"] = "ja_JP.Shift_JIS"
149
+ ENV["LANGUAGE"] = nil
150
+
151
+ assert_equal Locale::Tag.parse("ja_JP.Shift_JIS"), Locale.current[0]
152
+ Locale.clear
153
+ ENV["LANGUAGE"] = "zh_CN.UTF-8:ja_JP"
154
+ assert_equal Locale::Tag::Posix.parse("zh_CN.UTF-8"), Locale.current[0]
155
+ assert_equal Locale::Tag::Posix.parse("ja_JP"), Locale.current[1]
156
+
157
+ end
158
+
159
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'locale/info'
4
+ require 'test/unit'
5
+
6
+ class TestLocaleInfo < Test::Unit::TestCase
7
+ def test_languages
8
+ langs = Locale::Info.three_languages
9
+ assert_equal 7600, langs.length
10
+ assert_equal "English", langs["eng"].name
11
+ assert langs["eng"].living?
12
+ assert langs["eng"].individual?
13
+
14
+ langs = Locale::Info.two_languages
15
+ assert_equal 185, langs.length
16
+ assert_equal "English", langs["en"].name
17
+ assert langs["en"].living?
18
+ assert langs["en"].individual?
19
+ end
20
+
21
+ def test_regions
22
+ regions = Locale::Info.regions
23
+ assert_equal 243, regions.length
24
+ assert_equal "United States", regions["US"].name
25
+
26
+ assert_equal "ÅLand Islands", regions['AX'].name
27
+ end
28
+ end
@@ -0,0 +1,1183 @@
1
+ require 'locale/tag'
2
+ require 'test/unit'
3
+
4
+ class TagTest < Test::Unit::TestCase
5
+
6
+ def test_simple
7
+ #ja-JP, ja-392
8
+ lang = Locale::Tag.parse("ja")
9
+ assert_equal Locale::Tag::Simple, lang.class
10
+ assert_equal "ja", lang.language
11
+ assert_equal nil, lang.region
12
+ assert_equal [Locale::Tag::Simple.parse("ja"),
13
+ Locale::Tag::Simple.parse("ja")], lang.candidates
14
+
15
+ assert_equal Locale::Tag::Simple.parse("ja"), lang.to_simple
16
+ assert_equal Locale::Tag::Common.parse("ja"), lang.to_common
17
+ assert_equal Locale::Tag::Rfc.parse("ja"), lang.to_rfc
18
+ assert_equal Locale::Tag::Cldr.parse("ja"), lang.to_cldr
19
+ assert_equal Locale::Tag::Posix.parse("ja"), lang.to_posix
20
+
21
+ lang = Locale::Tag.parse("kok")
22
+ assert_equal Locale::Tag::Simple, lang.class
23
+ assert_equal "kok", lang.language
24
+ assert_equal nil, lang.region
25
+ assert_equal [Locale::Tag::Simple.parse("kok"),
26
+ Locale::Tag::Simple.parse("kok")], lang.candidates
27
+
28
+ assert_equal Locale::Tag::Simple.parse("kok"), lang.to_simple
29
+ assert_equal Locale::Tag::Common.parse("kok"), lang.to_common
30
+ assert_equal Locale::Tag::Rfc.parse("kok"), lang.to_rfc
31
+ assert_equal Locale::Tag::Cldr.parse("kok"), lang.to_cldr
32
+ assert_equal Locale::Tag::Posix.parse("kok"), lang.to_posix
33
+
34
+ lang = Locale::Tag.parse("ja-JP")
35
+ assert_equal Locale::Tag::Simple, lang.class
36
+ assert_equal "ja", lang.language
37
+ assert_equal "JP", lang.region
38
+ assert_equal [Locale::Tag::Simple.parse("ja_JP"),
39
+ Locale::Tag::Simple.parse("ja")], lang.candidates
40
+
41
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
42
+ assert_equal Locale::Tag::Common.parse("ja_JP"), lang.to_common
43
+ assert_equal Locale::Tag::Rfc.parse("ja-JP"), lang.to_rfc
44
+ assert_equal Locale::Tag::Cldr.parse("ja-JP"), lang.to_cldr
45
+ assert_equal Locale::Tag::Posix.parse("ja_JP"), lang.to_posix
46
+
47
+ lang = Locale::Tag.parse("ja_JP")
48
+ assert_equal Locale::Tag::Simple, lang.class
49
+ assert_equal "ja", lang.language
50
+ assert_equal "JP", lang.region
51
+ assert_equal [Locale::Tag::Simple.parse("ja_JP"),
52
+ Locale::Tag::Simple.parse("ja")], lang.candidates
53
+
54
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
55
+ assert_equal Locale::Tag::Common.parse("ja_JP"), lang.to_common
56
+ assert_equal Locale::Tag::Rfc.parse("ja-JP"), lang.to_rfc
57
+ assert_equal Locale::Tag::Cldr.parse("ja-JP"), lang.to_cldr
58
+ assert_equal Locale::Tag::Posix.parse("ja_JP"), lang.to_posix
59
+
60
+ # UN_M.49(Country code)
61
+ lang = Locale::Tag.parse("ja-392")
62
+ assert_equal Locale::Tag::Simple, lang.class
63
+ assert_equal "ja", lang.language
64
+ assert_equal "392", lang.region
65
+ assert_equal [Locale::Tag::Simple.parse("ja_392"),
66
+ Locale::Tag::Simple.parse("ja")], lang.candidates
67
+
68
+ assert_equal Locale::Tag::Simple.parse("ja-392"), lang.to_simple
69
+ assert_equal Locale::Tag::Common.parse("ja-392"), lang.to_common
70
+ assert_equal Locale::Tag::Rfc.parse("ja-392"), lang.to_rfc
71
+ assert_equal Locale::Tag::Cldr.parse("ja-392"), lang.to_cldr
72
+ assert_equal Locale::Tag::Posix.parse("ja_392"), lang.to_posix
73
+
74
+ lang = Locale::Tag.parse("jpn-392")
75
+ assert_equal Locale::Tag::Simple, lang.class
76
+ assert_equal "jpn", lang.language
77
+ assert_equal "392", lang.region
78
+ assert_equal [Locale::Tag::Simple.parse("jpn-392"),
79
+ Locale::Tag::Simple.parse("jpn")], lang.candidates
80
+
81
+ assert_equal Locale::Tag::Simple.parse("jpn-392"), lang.to_simple
82
+ assert_equal Locale::Tag::Common.parse("jpn-392"), lang.to_common
83
+ assert_equal Locale::Tag::Rfc.parse("jpn-392"), lang.to_rfc
84
+ assert_equal Locale::Tag::Cldr.parse("jpn-392"), lang.to_cldr
85
+ assert_equal Locale::Tag::Posix.parse("jpn_392"), lang.to_posix
86
+
87
+ lang = Locale::Tag.parse("es-419")
88
+ assert_equal Locale::Tag::Simple, lang.class
89
+ assert_equal "es", lang.language
90
+ assert_equal "419", lang.region
91
+ assert_equal [Locale::Tag::Simple.parse("es-419"),
92
+ Locale::Tag::Simple.parse("es")], lang.candidates
93
+
94
+ assert_equal Locale::Tag::Simple.parse("es-419"), lang.to_simple
95
+ assert_equal Locale::Tag::Common.parse("es-419"), lang.to_common
96
+ assert_equal Locale::Tag::Rfc.parse("es-419"), lang.to_rfc
97
+ assert_equal Locale::Tag::Cldr.parse("es_419"), lang.to_cldr
98
+ assert_equal Locale::Tag::Posix.parse("es_419"), lang.to_posix
99
+ end
100
+
101
+ def test_simple_writer
102
+ lang = Locale::Tag.parse("ja-JP")
103
+ assert_equal Locale::Tag::Simple, lang.class
104
+ assert_equal "ja_JP", lang.to_s
105
+ assert_equal [Locale::Tag::Simple.parse("ja-JP"),
106
+ Locale::Tag::Simple.parse("ja")], lang.candidates
107
+ lang.language = "en"
108
+ assert_equal "en", lang.language
109
+ assert_equal "en_JP", lang.to_s
110
+ assert_equal [Locale::Tag::Simple.parse("en-JP"),
111
+ Locale::Tag::Simple.parse("en")], lang.candidates
112
+
113
+ lang.region = "US"
114
+ assert_equal "en", lang.language
115
+ assert_equal "US", lang.region
116
+ assert_equal "en_US", lang.to_s
117
+ assert_equal [Locale::Tag::Simple.parse("en-US"),
118
+ Locale::Tag::Simple.parse("en")], lang.candidates
119
+
120
+ end
121
+
122
+ def test_common
123
+ #lang, region, script, variants
124
+
125
+ lang = Locale::Tag.parse("az_Arab")
126
+ assert_equal Locale::Tag::Common, lang.class
127
+ assert_equal "az", lang.language
128
+ assert_equal nil, lang.region
129
+ assert_equal "Arab", lang.script
130
+ assert_equal [Locale::Tag::Common.parse("az_Arab"),
131
+ Locale::Tag::Common.parse("az_Arab"),
132
+ Locale::Tag::Common.parse("az"),
133
+ Locale::Tag::Common.parse("az"),
134
+ Locale::Tag::Common.parse("az_Arab"),
135
+ Locale::Tag::Common.parse("az_Arab"),
136
+ Locale::Tag::Common.parse("az"),
137
+ Locale::Tag::Common.parse("az"),
138
+ ], lang.candidates
139
+
140
+ assert_equal Locale::Tag::Simple.parse("az"), lang.to_simple
141
+ assert_equal Locale::Tag::Common.parse("az_Arab"), lang.to_common
142
+ assert_equal Locale::Tag::Rfc.parse("az-Arab"), lang.to_rfc
143
+ assert_equal Locale::Tag::Cldr.parse("az_Arab"), lang.to_cldr
144
+ assert_equal Locale::Tag::Posix.parse("az"), lang.to_posix
145
+
146
+ lang = Locale::Tag.parse("en_Latn_US_NYNORSK")
147
+ assert_equal Locale::Tag::Common, lang.class
148
+ assert_equal "en", lang.language
149
+ assert_equal "US", lang.region
150
+ assert_equal ["NYNORSK"], lang.variants
151
+ assert_equal [Locale::Tag::Common.parse("en_Latn_US_NYNORSK"),
152
+ Locale::Tag::Common.parse("en_Latn_US"),
153
+ Locale::Tag::Common.parse("en_US_NYNORSK"),
154
+ Locale::Tag::Common.parse("en_US"),
155
+ Locale::Tag::Common.parse("en_Latn_NYNORSK"),
156
+ Locale::Tag::Common.parse("en_Latn"),
157
+ Locale::Tag::Common.parse("en_NYNORSK"),
158
+ Locale::Tag::Common.parse("en")], lang.candidates
159
+
160
+
161
+ assert_equal Locale::Tag::Simple.parse("en-US"), lang.to_simple
162
+ assert_equal Locale::Tag::Common.parse("en_Latn_US_NYNORSK"), lang.to_common
163
+ assert_equal Locale::Tag::Rfc.parse("en-Latn-US-NYNORSK"), lang.to_rfc
164
+ assert_equal Locale::Tag::Cldr.parse("en_Latn_US_NYNORSK"), lang.to_cldr
165
+ assert_equal Locale::Tag::Posix.parse("en_US@NYNORSK"), lang.to_posix
166
+
167
+ lang = Locale::Tag.parse("uz-Cyrl")
168
+ assert_equal Locale::Tag::Common, lang.class
169
+ assert_equal "uz", lang.language
170
+ assert_equal nil, lang.region
171
+ assert_equal "Cyrl", lang.script
172
+ assert_equal [Locale::Tag::Common.parse("uz-Cyrl"),
173
+ Locale::Tag::Common.parse("uz-Cyrl"),
174
+ Locale::Tag::Common.parse("uz"),
175
+ Locale::Tag::Common.parse("uz"),
176
+ Locale::Tag::Common.parse("uz-Cyrl"),
177
+ Locale::Tag::Common.parse("uz-Cyrl"),
178
+ Locale::Tag::Common.parse("uz"),
179
+ Locale::Tag::Common.parse("uz"),
180
+ ], lang.candidates
181
+
182
+ assert_equal Locale::Tag::Simple.parse("uz"), lang.to_simple
183
+ assert_equal Locale::Tag::Common.parse("uz_Cyrl"), lang.to_common
184
+ assert_equal Locale::Tag::Rfc.parse("uz-Cyrl"), lang.to_rfc
185
+ assert_equal Locale::Tag::Cldr.parse("uz_Cyrl"), lang.to_cldr
186
+ assert_equal Locale::Tag::Posix.parse("uz"), lang.to_posix
187
+
188
+ lang = Locale::Tag.parse("ja-Kana-JP")
189
+ assert_equal Locale::Tag::Common, lang.class
190
+ assert_equal "ja", lang.language
191
+ assert_equal "JP", lang.region
192
+ assert_equal "Kana", lang.script
193
+ assert_equal [Locale::Tag::Common.parse("ja-Kana-JP"),
194
+ Locale::Tag::Common.parse("ja-Kana-JP"),
195
+ Locale::Tag::Common.parse("ja-JP"),
196
+ Locale::Tag::Common.parse("ja-JP"),
197
+ Locale::Tag::Common.parse("ja-Kana"),
198
+ Locale::Tag::Common.parse("ja-Kana"),
199
+ Locale::Tag::Common.parse("ja"),
200
+ Locale::Tag::Common.parse("ja")], lang.candidates
201
+
202
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
203
+ assert_equal Locale::Tag::Common.parse("ja_Kana_JP"), lang.to_common
204
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP"), lang.to_rfc
205
+ assert_equal Locale::Tag::Cldr.parse("ja_Kana_JP"), lang.to_cldr
206
+ assert_equal Locale::Tag::Posix.parse("ja_JP"), lang.to_posix
207
+
208
+
209
+ lang = Locale::Tag.parse("jpn-Hira-JP")
210
+ assert_equal Locale::Tag::Common, lang.class
211
+ assert_equal "jpn", lang.language
212
+ assert_equal "JP", lang.region
213
+ assert_equal "Hira", lang.script
214
+ assert_equal [Locale::Tag::Common.parse("jpn-Hira-JP"),
215
+ Locale::Tag::Common.parse("jpn-Hira-JP"),
216
+ Locale::Tag::Common.parse("jpn-JP"),
217
+ Locale::Tag::Common.parse("jpn-JP"),
218
+ Locale::Tag::Common.parse("jpn-Hira"),
219
+ Locale::Tag::Common.parse("jpn-Hira"),
220
+ Locale::Tag::Common.parse("jpn"),
221
+ Locale::Tag::Common.parse("jpn")], lang.candidates
222
+
223
+ assert_equal Locale::Tag::Simple.parse("jpn_JP"), lang.to_simple
224
+ assert_equal Locale::Tag::Common.parse("jpn_Hira_JP"), lang.to_common
225
+ assert_equal Locale::Tag::Rfc.parse("jpn-Hira-JP"), lang.to_rfc
226
+ assert_equal Locale::Tag::Cldr.parse("jpn_Hira_JP"), lang.to_cldr
227
+ assert_equal Locale::Tag::Posix.parse("jpn_JP"), lang.to_posix
228
+
229
+ lang = Locale::Tag.parse("jpn-Hira-392")
230
+ assert_equal Locale::Tag::Common, lang.class
231
+ assert_equal "jpn", lang.language
232
+ assert_equal "392", lang.region
233
+ assert_equal "Hira", lang.script
234
+ assert_equal [Locale::Tag::Common.parse("jpn_Hira_392"),
235
+ Locale::Tag::Common.parse("jpn_Hira_392"),
236
+ Locale::Tag::Common.parse("jpn_392"),
237
+ Locale::Tag::Common.parse("jpn_392"),
238
+ Locale::Tag::Common.parse("jpn_Hira"),
239
+ Locale::Tag::Common.parse("jpn_Hira"),
240
+ Locale::Tag::Common.parse("jpn"),
241
+ Locale::Tag::Common.parse("jpn")], lang.candidates
242
+
243
+
244
+ assert_equal Locale::Tag::Simple.parse("jpn_392"), lang.to_simple
245
+ assert_equal Locale::Tag::Common.parse("jpn_Hira_392"), lang.to_common
246
+ assert_equal Locale::Tag::Rfc.parse("jpn-Hira-392"), lang.to_rfc
247
+ assert_equal Locale::Tag::Cldr.parse("jpn_Hira_392"), lang.to_cldr
248
+ assert_equal Locale::Tag::Posix.parse("jpn_392"), lang.to_posix
249
+
250
+ # Variants
251
+ lang = Locale::Tag.parse("ja-osaka")
252
+ assert_equal Locale::Tag::Common, lang.class
253
+ assert_equal "ja", lang.language
254
+ assert_equal nil, lang.region
255
+ assert_equal nil, lang.script
256
+ assert_equal ["osaka"], lang.variants
257
+
258
+ assert_equal [Locale::Tag::Common.parse("ja-osaka"),
259
+ Locale::Tag::Common.parse("ja"),
260
+ Locale::Tag::Common.parse("ja-osaka"),
261
+ Locale::Tag::Common.parse("ja"),
262
+ Locale::Tag::Common.parse("ja-osaka"),
263
+ Locale::Tag::Common.parse("ja"),
264
+ Locale::Tag::Common.parse("ja-osaka"),
265
+ Locale::Tag::Common.parse("ja")
266
+ ], lang.candidates
267
+
268
+ assert_equal Locale::Tag::Simple.parse("ja"), lang.to_simple
269
+ assert_equal Locale::Tag::Common.parse("ja-osaka"), lang.to_common
270
+ assert_equal Locale::Tag::Rfc.parse("ja-osaka"), lang.to_rfc
271
+ assert_equal Locale::Tag::Cldr.parse("ja_OSAKA"), lang.to_cldr
272
+ assert_equal Locale::Tag::Posix.parse("ja@osaka"), lang.to_posix
273
+
274
+
275
+ lang = Locale::Tag.parse("ja-JP-osaka")
276
+ assert_equal Locale::Tag::Common, lang.class
277
+ assert_equal "ja", lang.language
278
+ assert_equal "JP", lang.region
279
+ assert_equal nil, lang.script
280
+ assert_equal ["osaka"], lang.variants
281
+
282
+ assert_equal [Locale::Tag::Common.parse("ja_JP_osaka"),
283
+ Locale::Tag::Common.parse("ja_JP"),
284
+ Locale::Tag::Common.parse("ja_JP_osaka"),
285
+ Locale::Tag::Common.parse("ja_JP"),
286
+ Locale::Tag::Common.parse("ja_osaka"),
287
+ Locale::Tag::Common.parse("ja"),
288
+ Locale::Tag::Common.parse("ja_osaka"),
289
+ Locale::Tag::Common.parse("ja")
290
+ ], lang.candidates
291
+
292
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
293
+ assert_equal Locale::Tag::Common.parse("ja_JP_osaka"), lang.to_common
294
+ assert_equal Locale::Tag::Rfc.parse("ja-JP-osaka"), lang.to_rfc
295
+ assert_equal Locale::Tag::Cldr.parse("ja_JP_OSAKA"), lang.to_cldr
296
+ assert_equal Locale::Tag::Posix.parse("ja_JP@osaka"), lang.to_posix
297
+
298
+ #5 length
299
+ lang = Locale::Tag.parse("ja-Kana-JP-osaka")
300
+ assert_equal Locale::Tag::Common, lang.class
301
+ assert_equal "ja", lang.language
302
+ assert_equal "JP", lang.region
303
+ assert_equal "Kana", lang.script
304
+ assert_equal ["osaka"], lang.variants
305
+
306
+ assert_equal [Locale::Tag::Common.parse("ja-Kana-JP-osaka"),
307
+ Locale::Tag::Common.parse("ja-Kana-JP"),
308
+ Locale::Tag::Common.parse("ja-JP-osaka"),
309
+ Locale::Tag::Common.parse("ja-JP"),
310
+ Locale::Tag::Common.parse("ja-Kana-osaka"),
311
+ Locale::Tag::Common.parse("ja-Kana"),
312
+ Locale::Tag::Common.parse("ja-osaka"),
313
+ Locale::Tag::Common.parse("ja")
314
+ ], lang.candidates
315
+
316
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
317
+ assert_equal Locale::Tag::Common.parse("ja_Kana-JP_osaka"), lang.to_common
318
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP-osaka"), lang.to_rfc
319
+ assert_equal Locale::Tag::Cldr.parse("ja_Kana_JP_OSAKA"), lang.to_cldr
320
+ assert_equal Locale::Tag::Posix.parse("ja_JP@osaka"), lang.to_posix
321
+
322
+ #middle length
323
+ lang = Locale::Tag.parse("ja-Kana-JP-aomori")
324
+ assert_equal Locale::Tag::Common, lang.class
325
+ assert_equal "ja", lang.language
326
+ assert_equal "JP", lang.region
327
+ assert_equal "Kana", lang.script
328
+ assert_equal ["aomori"], lang.variants
329
+
330
+ assert_equal [Locale::Tag::Common.parse("ja-Kana-JP-aomori"),
331
+ Locale::Tag::Common.parse("ja-Kana-JP"),
332
+ Locale::Tag::Common.parse("ja-JP-aomori"),
333
+ Locale::Tag::Common.parse("ja-JP"),
334
+ Locale::Tag::Common.parse("ja-Kana-aomori"),
335
+ Locale::Tag::Common.parse("ja-Kana"),
336
+ Locale::Tag::Common.parse("ja-aomori"),
337
+ Locale::Tag::Common.parse("ja")
338
+ ], lang.candidates
339
+
340
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
341
+ assert_equal Locale::Tag::Common.parse("ja_Kana-JP_aomori"), lang.to_common
342
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP-aomori"), lang.to_rfc
343
+ assert_equal Locale::Tag::Cldr.parse("ja_Kana_JP_AOMORI"), lang.to_cldr
344
+ assert_equal Locale::Tag::Posix.parse("ja_JP@aomori"), lang.to_posix
345
+
346
+ #8 length
347
+ lang = Locale::Tag.parse("ja-Kana-JP-hokuriku")
348
+ assert_equal Locale::Tag::Common, lang.class
349
+ assert_equal "ja", lang.language
350
+ assert_equal "JP", lang.region
351
+ assert_equal "Kana", lang.script
352
+ assert_equal ["hokuriku"], lang.variants
353
+
354
+ assert_equal [Locale::Tag::Common.parse("ja-Kana-JP-hokuriku"),
355
+ Locale::Tag::Common.parse("ja-Kana-JP"),
356
+ Locale::Tag::Common.parse("ja-JP-hokuriku"),
357
+ Locale::Tag::Common.parse("ja-JP"),
358
+ Locale::Tag::Common.parse("ja-Kana-hokuriku"),
359
+ Locale::Tag::Common.parse("ja-Kana"),
360
+ Locale::Tag::Common.parse("ja-hokuriku"),
361
+ Locale::Tag::Common.parse("ja")
362
+ ], lang.candidates
363
+
364
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
365
+ assert_equal Locale::Tag::Common.parse("ja_Kana-JP_hokuriku"), lang.to_common
366
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP-hokuriku"), lang.to_rfc
367
+ assert_equal Locale::Tag::Cldr.parse("ja_Kana_JP_HOKURIKU"), lang.to_cldr
368
+ assert_equal Locale::Tag::Posix.parse("ja_JP@hokuriku"), lang.to_posix
369
+
370
+ #1 digit and 3 alpha
371
+ lang = Locale::Tag.parse("ja-Kana-JP-0abc")
372
+ assert_equal Locale::Tag::Common, lang.class
373
+ assert_equal "ja", lang.language
374
+ assert_equal "JP", lang.region
375
+ assert_equal "Kana", lang.script
376
+ assert_equal ["0abc"], lang.variants
377
+
378
+ assert_equal [Locale::Tag::Common.parse("ja-Kana-JP-0abc"),
379
+ Locale::Tag::Common.parse("ja-Kana-JP"),
380
+ Locale::Tag::Common.parse("ja-JP-0abc"),
381
+ Locale::Tag::Common.parse("ja-JP"),
382
+ Locale::Tag::Common.parse("ja-Kana-0abc"),
383
+ Locale::Tag::Common.parse("ja-Kana"),
384
+ Locale::Tag::Common.parse("ja-0abc"),
385
+ Locale::Tag::Common.parse("ja")
386
+ ], lang.candidates
387
+
388
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
389
+ assert_equal Locale::Tag::Common.parse("ja_Kana-JP_0abc"), lang.to_common
390
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP-0abc"), lang.to_rfc
391
+ assert_equal Locale::Tag::Cldr.parse("ja_Kana_JP_0ABC"), lang.to_cldr
392
+ assert_equal Locale::Tag::Posix.parse("ja_JP@0abc"), lang.to_posix
393
+
394
+ #4 digits
395
+ lang = Locale::Tag.parse("de-CH-1996")
396
+ assert_equal Locale::Tag::Common, lang.class
397
+ assert_equal "de", lang.language
398
+ assert_equal "CH", lang.region
399
+ assert_equal nil, lang.script
400
+ assert_equal ["1996"], lang.variants
401
+ assert_equal [Locale::Tag::Common.parse("de_CH_1996"),
402
+ Locale::Tag::Common.parse("de_CH"),
403
+ Locale::Tag::Common.parse("de_CH_1996"),
404
+ Locale::Tag::Common.parse("de_CH"),
405
+ Locale::Tag::Common.parse("de_1996"),
406
+ Locale::Tag::Common.parse("de"),
407
+ Locale::Tag::Common.parse("de_1996"),
408
+ Locale::Tag::Common.parse("de"),
409
+ ], lang.candidates
410
+
411
+ assert_equal Locale::Tag::Simple.parse("de-CH"), lang.to_simple
412
+ assert_equal Locale::Tag::Common.parse("de-CH-1996"), lang.to_common
413
+ assert_equal Locale::Tag::Rfc.parse("de-CH-1996"), lang.to_rfc
414
+ assert_equal Locale::Tag::Cldr.parse("de_CH_1996"), lang.to_cldr
415
+ assert_equal Locale::Tag::Posix.parse("de_CH@1996"), lang.to_posix
416
+
417
+ #Plural
418
+ lang = Locale::Tag.parse("ja-Kana-JP-hokuriku-aomori")
419
+ assert_equal Locale::Tag::Common, lang.class
420
+ assert_equal "ja", lang.language
421
+ assert_equal "JP", lang.region
422
+ assert_equal "Kana", lang.script
423
+ assert_equal ["hokuriku", "aomori"], lang.variants
424
+
425
+ assert_equal [Locale::Tag::Common.parse("ja-Kana-JP-hokuriku-aomori"),
426
+ Locale::Tag::Common.parse("ja-Kana-JP"),
427
+ Locale::Tag::Common.parse("ja-JP-hokuriku-aomori"),
428
+ Locale::Tag::Common.parse("ja-JP"),
429
+ Locale::Tag::Common.parse("ja-Kana-hokuriku-aomori"),
430
+ Locale::Tag::Common.parse("ja-Kana"),
431
+ Locale::Tag::Common.parse("ja-hokuriku-aomori"),
432
+ Locale::Tag::Common.parse("ja"),
433
+ ], lang.candidates
434
+
435
+ assert_equal Locale::Tag::Simple.parse("ja-JP"), lang.to_simple
436
+ assert_equal Locale::Tag::Common.parse("ja-Kana-JP-hokuriku-aomori"), lang.to_common
437
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP-hokuriku-aomori"), lang.to_rfc
438
+ assert_equal Locale::Tag::Cldr.parse("ja-Kana-JP_HOKURIKU_AOMORI"), lang.to_cldr
439
+ assert_equal Locale::Tag::Posix.parse("ja_JP@hokuriku-aomori"), lang.to_posix
440
+
441
+ #cases
442
+ lang = Locale::Tag.parse("mn-Cyrl-MN")
443
+ assert_equal Locale::Tag::Common, lang.class
444
+ assert_equal "mn", lang.language
445
+ assert_equal "MN", lang.region
446
+ assert_equal "Cyrl", lang.script
447
+
448
+ assert_equal [Locale::Tag::Common.parse("mn-Cyrl-MN"),
449
+ Locale::Tag::Common.parse("mn-Cyrl-MN"),
450
+ Locale::Tag::Common.parse("mn-MN"),
451
+ Locale::Tag::Common.parse("mn-MN"),
452
+ Locale::Tag::Common.parse("mn-Cyrl"),
453
+ Locale::Tag::Common.parse("mn-Cyrl"),
454
+ Locale::Tag::Common.parse("mn"),
455
+ Locale::Tag::Common.parse("mn"),
456
+ ], lang.candidates
457
+
458
+ assert_equal Locale::Tag::Simple.parse("mn_MN"), lang.to_simple
459
+ assert_equal Locale::Tag::Common.parse("mn_Cyrl_MN"), lang.to_common
460
+ assert_equal Locale::Tag::Rfc.parse("mn-Cyrl-MN"), lang.to_rfc
461
+ assert_equal Locale::Tag::Cldr.parse("mn-Cyrl-MN"), lang.to_cldr
462
+ assert_equal Locale::Tag::Posix.parse("mn_MN"), lang.to_posix
463
+
464
+ lang = Locale::Tag.parse("mN-cYrL-Mn")
465
+ assert_equal Locale::Tag::Common, lang.class
466
+ assert_equal "mn", lang.language
467
+ assert_equal "MN", lang.region
468
+ assert_equal "Cyrl", lang.script
469
+
470
+ assert_equal Locale::Tag::Simple.parse("mn_MN"), lang.to_simple
471
+ assert_equal Locale::Tag::Common.parse("mn_Cyrl_MN"), lang.to_common
472
+ assert_equal Locale::Tag::Rfc.parse("mn-Cyrl-MN"), lang.to_rfc
473
+ assert_equal Locale::Tag::Cldr.parse("mn-Cyrl-MN"), lang.to_cldr
474
+ assert_equal Locale::Tag::Posix.parse("mn_MN"), lang.to_posix
475
+
476
+ lang = Locale::Tag.parse("MN-cYRL-mn")
477
+ assert_equal Locale::Tag::Common, lang.class
478
+ assert_equal "mn", lang.language
479
+ assert_equal "MN", lang.region
480
+ assert_equal "Cyrl", lang.script
481
+
482
+ assert_equal Locale::Tag::Simple.parse("mn_MN"), lang.to_simple
483
+ assert_equal Locale::Tag::Common.parse("mn_Cyrl_MN"), lang.to_common
484
+ assert_equal Locale::Tag::Rfc.parse("mn-Cyrl-MN"), lang.to_rfc
485
+ assert_equal Locale::Tag::Cldr.parse("mn-Cyrl-MN"), lang.to_cldr
486
+ assert_equal Locale::Tag::Posix.parse("mn_MN"), lang.to_posix
487
+
488
+ lang = Locale::Tag.parse("zh-Latn-CN-variant1")
489
+ assert_equal Locale::Tag::Common, lang.class
490
+ assert_equal "zh", lang.language
491
+ assert_equal "CN", lang.region
492
+ assert_equal "Latn", lang.script
493
+ assert_equal ["variant1"], lang.variants
494
+
495
+ assert_equal [Locale::Tag::Common.parse("zh-Latn-CN-variant1"),
496
+ Locale::Tag::Common.parse("zh-Latn-CN"),
497
+ Locale::Tag::Common.parse("zh-CN-variant1"),
498
+ Locale::Tag::Common.parse("zh-CN"),
499
+ Locale::Tag::Common.parse("zh-Latn-variant1"),
500
+ Locale::Tag::Common.parse("zh-Latn"),
501
+ Locale::Tag::Common.parse("zh-variant1"),
502
+ Locale::Tag::Common.parse("zh"),
503
+ ], lang.candidates
504
+
505
+ assert_equal Locale::Tag::Simple.parse("zh_CN"), lang.to_simple
506
+ assert_equal Locale::Tag::Common.parse("zh_Latn_CN-variant1"), lang.to_common
507
+ assert_equal Locale::Tag::Rfc.parse("zh-Latn-CN-variant1"), lang.to_rfc
508
+ assert_equal Locale::Tag::Cldr.parse("zh-Latn-CN_VARIANT1"), lang.to_cldr
509
+ assert_equal Locale::Tag::Posix.parse("zh_CN@variant1"), lang.to_posix
510
+
511
+ # RFC3066 compatible
512
+ lang = Locale::Tag.parse("ja-jp-mac")
513
+ assert_equal Locale::Tag::Common, lang.class
514
+ assert_equal "ja", lang.language
515
+ assert_equal "JP", lang.region
516
+ assert_equal nil, lang.script
517
+ assert_equal [Locale::Tag::Common.parse("ja_JP_mac"),
518
+ Locale::Tag::Common.parse("ja_JP"),
519
+ Locale::Tag::Common.parse("ja_JP_mac"),
520
+ Locale::Tag::Common.parse("ja_JP"),
521
+ Locale::Tag::Common.parse("ja_mac"),
522
+ Locale::Tag::Common.parse("ja"),
523
+ Locale::Tag::Common.parse("ja_mac"),
524
+ Locale::Tag::Common.parse("ja"),
525
+ ], lang.candidates
526
+
527
+ end
528
+
529
+ def test_common_writer
530
+ lang = Locale::Tag.parse("zh-Latn-CN-variant1")
531
+ lang.language = "ja"
532
+ assert_equal "ja_Latn_CN_variant1", lang.to_s
533
+ lang.script = "Hira"
534
+ assert_equal "ja_Hira_CN_variant1", lang.to_s
535
+ lang.region = "JP"
536
+ assert_equal "ja_Hira_JP_variant1", lang.to_s
537
+ lang.variants = ["variant1", "variant2"]
538
+ assert_equal "ja_Hira_JP_variant1_variant2", lang.to_s
539
+
540
+ assert_equal [Locale::Tag::Common.parse("ja-Hira-JP-variant1-variant2"),
541
+ Locale::Tag::Common.parse("ja-Hira-JP"),
542
+ Locale::Tag::Common.parse("ja-JP-variant1-variant2"),
543
+ Locale::Tag::Common.parse("ja-JP"),
544
+ Locale::Tag::Common.parse("ja-Hira-variant1-variant2"),
545
+ Locale::Tag::Common.parse("ja-Hira"),
546
+ Locale::Tag::Common.parse("ja-variant1-variant2"),
547
+ Locale::Tag::Common.parse("ja"),
548
+ ], lang.candidates
549
+
550
+ end
551
+
552
+ def test_rfc
553
+ # extension
554
+ lang = Locale::Tag.parse("ja-Kana-JP-0abc-y-aa-z-bbccdd-b-nnnnnnnn")
555
+ assert_equal Locale::Tag::Rfc, lang.class
556
+ assert_equal "ja", lang.language
557
+ assert_equal "JP", lang.region
558
+ assert_equal "Kana", lang.script
559
+ assert_equal ["0abc"], lang.variants
560
+ assert_equal ["y-aa", "z-bbccdd", "b-nnnnnnnn"], lang.extensions
561
+
562
+ assert_equal [Locale::Tag::Rfc.parse("ja-Kana-JP-0abc"),
563
+ Locale::Tag::Rfc.parse("ja-Kana-JP"),
564
+ Locale::Tag::Rfc.parse("ja-JP-0abc"),
565
+ Locale::Tag::Rfc.parse("ja-JP"),
566
+ Locale::Tag::Rfc.parse("ja-Kana-0abc"),
567
+ Locale::Tag::Rfc.parse("ja-Kana"),
568
+ Locale::Tag::Rfc.parse("ja-0abc"),
569
+ Locale::Tag::Rfc.parse("ja"),
570
+ ], lang.candidates
571
+
572
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
573
+ assert_equal Locale::Tag::Common.parse("ja-Kana-JP-0abc"), lang.to_common
574
+ assert_equal Locale::Tag::Rfc.parse("ja-Kana-JP-0abc-y-aa-z-bbccdd-b-nnnnnnnn"), lang.to_rfc
575
+ assert_equal Locale::Tag::Cldr.parse("ja_Kana_JP_0abc"), lang.to_cldr
576
+ assert_equal Locale::Tag::Posix.parse("ja_JP@0abc"), lang.to_posix
577
+
578
+ lang = Locale::Tag.parse("ja-JP-0abc-y-aa-z-bbccdd-b-xxxnnnnn")
579
+ assert_equal Locale::Tag::Rfc, lang.class
580
+ assert_equal "ja", lang.language
581
+ assert_equal "JP", lang.region
582
+ assert_equal nil, lang.script
583
+ assert_equal ["0abc"], lang.variants
584
+ assert_equal ["y-aa", "z-bbccdd", "b-xxxnnnnn"], lang.extensions
585
+
586
+ assert_equal [Locale::Tag::Rfc.parse("ja-JP-0abc"),
587
+ Locale::Tag::Rfc.parse("ja-JP"),
588
+ Locale::Tag::Rfc.parse("ja-JP-0abc"),
589
+ Locale::Tag::Rfc.parse("ja-JP"),
590
+ Locale::Tag::Rfc.parse("ja-0abc"),
591
+ Locale::Tag::Rfc.parse("ja"),
592
+ Locale::Tag::Rfc.parse("ja-0abc"),
593
+ Locale::Tag::Rfc.parse("ja"),
594
+ ], lang.candidates
595
+
596
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
597
+ assert_equal Locale::Tag::Common.parse("ja-JP-0abc"), lang.to_common
598
+ assert_equal Locale::Tag::Rfc.parse("ja-JP-0abc-y-aa-z-bbccdd-b-xxxnnnnn"), lang.to_rfc
599
+ assert_equal Locale::Tag::Cldr.parse("ja_JP_0abc"), lang.to_cldr
600
+ assert_equal Locale::Tag::Posix.parse("ja_JP@0abc"), lang.to_posix
601
+
602
+ lang = Locale::Tag.parse("ja-y-aa-z-bbccdd-b-xxnnnnn")
603
+ assert_equal Locale::Tag::Rfc, lang.class
604
+ assert_equal "ja", lang.language
605
+ assert_equal nil, lang.region
606
+ assert_equal nil, lang.script
607
+ assert_equal [], lang.variants
608
+ assert_equal ["y-aa", "z-bbccdd", "b-xxnnnnn"], lang.extensions
609
+
610
+ assert_equal [Locale::Tag::Rfc.parse("ja"),
611
+ Locale::Tag::Rfc.parse("ja"),
612
+ Locale::Tag::Rfc.parse("ja"),
613
+ Locale::Tag::Rfc.parse("ja"),
614
+ Locale::Tag::Rfc.parse("ja"),
615
+ Locale::Tag::Rfc.parse("ja"),
616
+ Locale::Tag::Rfc.parse("ja"),
617
+ Locale::Tag::Rfc.parse("ja"),
618
+ ], lang.candidates
619
+
620
+ assert_equal Locale::Tag::Simple.parse("ja"), lang.to_simple
621
+ assert_equal Locale::Tag::Common.parse("ja"), lang.to_common
622
+ assert_equal Locale::Tag::Rfc.parse("ja-y-aa-z-bbccdd-b-xxnnnnn"), lang.to_rfc
623
+ assert_equal Locale::Tag::Cldr.parse("ja"), lang.to_cldr
624
+ assert_equal Locale::Tag::Posix.parse("ja"), lang.to_posix
625
+
626
+ lang = Locale::Tag.parse("zh-Latn-CN-variant1-a-extend1")
627
+ assert_equal Locale::Tag::Rfc, lang.class
628
+ assert_equal "zh", lang.language
629
+ assert_equal "CN", lang.region
630
+ assert_equal "Latn", lang.script
631
+ assert_equal ["variant1"], lang.variants
632
+ assert_equal ["a-extend1"], lang.extensions
633
+ assert_equal nil, lang.privateuse
634
+
635
+ assert_equal [Locale::Tag::Rfc.parse("zh-Latn-CN-variant1"),
636
+ Locale::Tag::Rfc.parse("zh-Latn-CN"),
637
+ Locale::Tag::Rfc.parse("zh-CN-variant1"),
638
+ Locale::Tag::Rfc.parse("zh-CN"),
639
+ Locale::Tag::Rfc.parse("zh-Latn-variant1"),
640
+ Locale::Tag::Rfc.parse("zh-Latn"),
641
+ Locale::Tag::Rfc.parse("zh-variant1"),
642
+ Locale::Tag::Rfc.parse("zh"),
643
+ ], lang.candidates
644
+
645
+ assert_equal Locale::Tag::Simple.parse("zh_CN"), lang.to_simple
646
+ assert_equal Locale::Tag::Common.parse("zh-Latn-CN_variant1"), lang.to_common
647
+ assert_equal Locale::Tag::Rfc.parse("zh-Latn-CN-variant1-a-extend1"), lang.to_rfc
648
+ assert_equal Locale::Tag::Cldr.parse("zh_Latn_CN_VARIANT1"), lang.to_cldr
649
+ assert_equal Locale::Tag::Posix.parse("zh_CN@variant1"), lang.to_posix
650
+
651
+ #Privateuse
652
+ lang = Locale::Tag.parse("zh-Latn-CN-variant1-a-extend1-x-wadegile-private1")
653
+ assert_equal Locale::Tag::Rfc, lang.class
654
+ assert_equal "zh", lang.language
655
+ assert_equal "CN", lang.region
656
+ assert_equal "Latn", lang.script
657
+ assert_equal ["variant1"], lang.variants
658
+ assert_equal ["a-extend1"], lang.extensions
659
+ assert_equal "x-wadegile-private1", lang.privateuse
660
+
661
+ assert_equal [Locale::Tag::Rfc.parse("zh-Latn-CN-variant1"),
662
+ Locale::Tag::Rfc.parse("zh-Latn-CN"),
663
+ Locale::Tag::Rfc.parse("zh-CN-variant1"),
664
+ Locale::Tag::Rfc.parse("zh-CN"),
665
+ Locale::Tag::Rfc.parse("zh-Latn-variant1"),
666
+ Locale::Tag::Rfc.parse("zh-Latn"),
667
+ Locale::Tag::Rfc.parse("zh-variant1"),
668
+ Locale::Tag::Rfc.parse("zh"),
669
+ ], lang.candidates
670
+
671
+ assert_equal Locale::Tag::Simple.parse("zh_CN"), lang.to_simple
672
+ assert_equal Locale::Tag::Common.parse("zh-Latn-CN_variant1"), lang.to_common
673
+ assert_equal Locale::Tag::Rfc.parse("zh-Latn-CN-variant1-a-extend1-x-wadegile-private1"), lang.to_rfc
674
+ assert_equal Locale::Tag::Cldr.parse("zh_Latn_CN_VARIANT1"), lang.to_cldr
675
+ assert_equal Locale::Tag::Posix.parse("zh_CN@variant1"), lang.to_posix
676
+
677
+ #Privateuse with x-ldml (CLDR conversion)
678
+ lang = Locale::Tag.parse("en-US-x-ldml-POSIX-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar")
679
+ assert_equal Locale::Tag::Rfc, lang.class
680
+ assert_equal "en", lang.language
681
+ assert_equal "US", lang.region
682
+ assert_equal ["POSIX"], lang.variants
683
+ assert_equal ["k-calendar-islamic", "k-collatio-traditio", "k-colStren-secondar"], lang.extensions
684
+ assert_equal "x-ldml-POSIX-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar", lang.privateuse
685
+
686
+ assert_equal [Locale::Tag::Rfc.parse("en-US-POSIX"),
687
+ Locale::Tag::Rfc.parse("en-US"),
688
+ Locale::Tag::Rfc.parse("en-US-POSIX"),
689
+ Locale::Tag::Rfc.parse("en-US"),
690
+ Locale::Tag::Rfc.parse("en-POSIX"),
691
+ Locale::Tag::Rfc.parse("en"),
692
+ Locale::Tag::Rfc.parse("en-POSIX"),
693
+ Locale::Tag::Rfc.parse("en"),
694
+ ], lang.candidates
695
+
696
+ assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
697
+ assert_equal Locale::Tag::Common.parse("en-US_POSIX"), lang.to_common
698
+ assert_equal Locale::Tag::Rfc.parse("en-US-x-ldml-POSIX-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
699
+ assert_equal Locale::Tag::Cldr.parse("en_US_POSIX@calendar=islamic;collatio=traditio;colStren=secondar"), lang.to_cldr
700
+ assert_equal Locale::Tag::Posix.parse("en_US@POSIX"), lang.to_posix
701
+
702
+ lang = Locale::Tag.parse("en-US-x-ldml-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar")
703
+ assert_equal Locale::Tag::Rfc, lang.class
704
+ assert_equal "en", lang.language
705
+ assert_equal "US", lang.region
706
+ assert_equal [], lang.variants
707
+ assert_equal ["k-calendar-islamic", "k-collatio-traditio", "k-colStren-secondar"], lang.extensions
708
+ assert_equal "x-ldml-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar", lang.privateuse
709
+
710
+ assert_equal [Locale::Tag::Rfc.parse("en-US"),
711
+ Locale::Tag::Rfc.parse("en-US"),
712
+ Locale::Tag::Rfc.parse("en-US"),
713
+ Locale::Tag::Rfc.parse("en-US"),
714
+ Locale::Tag::Rfc.parse("en"),
715
+ Locale::Tag::Rfc.parse("en"),
716
+ Locale::Tag::Rfc.parse("en"),
717
+ Locale::Tag::Rfc.parse("en"),
718
+ ], lang.candidates
719
+
720
+ assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
721
+ assert_equal Locale::Tag::Common.parse("en-US"), lang.to_common
722
+ assert_equal Locale::Tag::Rfc.parse("en-US-x-ldml-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
723
+ assert_equal Locale::Tag::Cldr.parse("en_US@calendar=islamic;collatio=traditio;colStren=secondar"), lang.to_cldr
724
+ assert_equal Locale::Tag::Posix.parse("en_US"), lang.to_posix
725
+ end
726
+
727
+ def test_rfc_writer
728
+ lang = Locale::Tag.parse("zh-Latn-CN-variant1-a-extend1-x-wadegile-private1")
729
+ lang.language = "ja"
730
+ assert_equal "ja-Latn-CN-variant1-a-extend1-x-wadegile-private1", lang.to_s
731
+ lang.script = "Hira"
732
+ assert_equal "ja-Hira-CN-variant1-a-extend1-x-wadegile-private1", lang.to_s
733
+ lang.region = "JP"
734
+ assert_equal "ja-Hira-JP-variant1-a-extend1-x-wadegile-private1", lang.to_s
735
+ lang.variants = ["variant2"]
736
+ assert_equal "ja-Hira-JP-variant2-a-extend1-x-wadegile-private1", lang.to_s
737
+ lang.extensions = ["b-extend2"]
738
+ assert_equal "ja-Hira-JP-variant2-b-extend2-x-wadegile-private1", lang.to_s
739
+ lang.privateuse = "x-foooo"
740
+ assert_equal "ja-Hira-JP-variant2-b-extend2-x-foooo", lang.to_s
741
+
742
+ assert_equal [Locale::Tag::Rfc.parse("ja-Hira-JP-variant2"),
743
+ Locale::Tag::Rfc.parse("ja-Hira-JP"),
744
+ Locale::Tag::Rfc.parse("ja-JP-variant2"),
745
+ Locale::Tag::Rfc.parse("ja-JP"),
746
+ Locale::Tag::Rfc.parse("ja-Hira-variant2"),
747
+ Locale::Tag::Rfc.parse("ja-Hira"),
748
+ Locale::Tag::Rfc.parse("ja-variant2"),
749
+ Locale::Tag::Rfc.parse("ja"),
750
+ ], lang.candidates
751
+ end
752
+
753
+ def test_cldr
754
+ lang = Locale::Tag.parse("de@collation=phonebook")
755
+ assert_equal Locale::Tag::Cldr, lang.class
756
+ assert_equal "de", lang.language
757
+ assert_equal nil, lang.region
758
+ assert_equal "phonebook", lang.extensions["collation"]
759
+
760
+ assert_equal [Locale::Tag::Cldr.parse("de"),
761
+ Locale::Tag::Cldr.parse("de"),
762
+ Locale::Tag::Cldr.parse("de"),
763
+ Locale::Tag::Cldr.parse("de"),
764
+ Locale::Tag::Cldr.parse("de"),
765
+ Locale::Tag::Cldr.parse("de"),
766
+ Locale::Tag::Cldr.parse("de"),
767
+ Locale::Tag::Cldr.parse("de"),
768
+ ], lang.candidates
769
+
770
+ assert_equal Locale::Tag::Simple.parse("de"), lang.to_simple
771
+ assert_equal Locale::Tag::Common.parse("de"), lang.to_common
772
+ assert_equal Locale::Tag::Rfc.parse("de-k-collatio-phoneboo"), lang.to_rfc
773
+ assert_equal Locale::Tag::Cldr.parse("de@collation=phonebook"), lang.to_cldr
774
+ assert_equal Locale::Tag::Posix.parse("de"), lang.to_posix
775
+
776
+ lang = Locale::Tag.parse("az_Arab@collation=phonebook")
777
+ assert_equal Locale::Tag::Cldr, lang.class
778
+ assert_equal "az", lang.language
779
+ assert_equal nil, lang.region
780
+ assert_equal "Arab", lang.script
781
+ assert_equal "phonebook", lang.extensions["collation"]
782
+
783
+ assert_equal [Locale::Tag::Cldr.parse("az_Arab"),
784
+ Locale::Tag::Cldr.parse("az_Arab"),
785
+ Locale::Tag::Cldr.parse("az"),
786
+ Locale::Tag::Cldr.parse("az"),
787
+ Locale::Tag::Cldr.parse("az_Arab"),
788
+ Locale::Tag::Cldr.parse("az_Arab"),
789
+ Locale::Tag::Cldr.parse("az"),
790
+ Locale::Tag::Cldr.parse("az"),
791
+ ], lang.candidates
792
+
793
+ assert_equal Locale::Tag::Simple.parse("az"), lang.to_simple
794
+ assert_equal Locale::Tag::Common.parse("az_Arab"), lang.to_common
795
+ assert_equal Locale::Tag::Rfc.parse("az-Arab-k-collatio-phoneboo"), lang.to_rfc
796
+ assert_equal Locale::Tag::Cldr.parse("az_Arab@collation=phonebook"), lang.to_cldr
797
+ assert_equal Locale::Tag::Posix.parse("az"), lang.to_posix
798
+
799
+ lang = Locale::Tag.parse("de_DE@collation=phonebook;currency=DDM")
800
+ assert_equal Locale::Tag::Cldr, lang.class
801
+ assert_equal "de", lang.language
802
+ assert_equal "DE", lang.region
803
+ assert_equal "phonebook", lang.extensions["collation"]
804
+ assert_equal "DDM", lang.extensions["currency"]
805
+
806
+ assert_equal [Locale::Tag::Cldr.parse("de_DE"),
807
+ Locale::Tag::Cldr.parse("de_DE"),
808
+ Locale::Tag::Cldr.parse("de_DE"),
809
+ Locale::Tag::Cldr.parse("de_DE"),
810
+ Locale::Tag::Cldr.parse("de"),
811
+ Locale::Tag::Cldr.parse("de"),
812
+ Locale::Tag::Cldr.parse("de"),
813
+ Locale::Tag::Cldr.parse("de"),
814
+ ], lang.candidates
815
+
816
+ assert_equal Locale::Tag::Simple.parse("de_DE"), lang.to_simple
817
+ assert_equal Locale::Tag::Common.parse("de_DE"), lang.to_common
818
+ if RUBY_VERSION < "1.9.0" and RUBY_PLATFORM != "java"
819
+ assert_equal Locale::Tag::Rfc.parse("de-DE-k-currency-DDM-k-collatio-phoneboo"), lang.to_rfc
820
+ else
821
+ assert_equal Locale::Tag::Rfc.parse("de-DE-k-collatio-phoneboo-k-currency-DDM"), lang.to_rfc
822
+ end
823
+ assert_equal Locale::Tag::Cldr.parse("de_DE@collation=phonebook;currency=DDM"), lang.to_cldr
824
+ assert_equal Locale::Tag::Posix.parse("de_DE"), lang.to_posix
825
+
826
+ lang = Locale::Tag.parse("en_US_POSIX@calendar=islamic;collation=traditional;colStrength=secondary")
827
+ assert_equal Locale::Tag::Cldr, lang.class
828
+ assert_equal "en", lang.language
829
+ assert_equal "US", lang.region
830
+ assert_equal ["POSIX"], lang.variants
831
+ assert_equal "islamic", lang.extensions["calendar"]
832
+ assert_equal "traditional", lang.extensions["collation"]
833
+ assert_equal "secondary", lang.extensions["colStrength"]
834
+
835
+ assert_equal [Locale::Tag::Cldr.parse("en_US_POSIX"),
836
+ Locale::Tag::Cldr.parse("en_US"),
837
+ Locale::Tag::Cldr.parse("en_US_POSIX"),
838
+ Locale::Tag::Cldr.parse("en_US"),
839
+ Locale::Tag::Cldr.parse("en_POSIX"),
840
+ Locale::Tag::Cldr.parse("en"),
841
+ Locale::Tag::Cldr.parse("en_POSIX"),
842
+ Locale::Tag::Cldr.parse("en"),
843
+ ], lang.candidates
844
+
845
+ assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
846
+ assert_equal Locale::Tag::Common.parse("en_US_POSIX"), lang.to_common
847
+ if RUBY_VERSION < "1.9.0" and RUBY_PLATFORM != "java"
848
+ assert_equal Locale::Tag::Rfc.parse("en-US-POSIX-k-colStren-secondar-k-collatio-traditio-k-calendar-islamic"), lang.to_rfc
849
+ else
850
+ assert_equal Locale::Tag::Rfc.parse("en-US-POSIX-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
851
+ end
852
+ assert_equal Locale::Tag::Cldr.parse("en_US_POSIX@calendar=islamic;collation=traditional;colStrength=secondary"), lang.to_cldr
853
+ assert_equal Locale::Tag::Posix.parse("en_US@POSIX"), lang.to_posix
854
+
855
+ lang = Locale::Tag.parse("en_US@calendar=islamic;collation=traditional;colStrength=secondary")
856
+ assert_equal Locale::Tag::Cldr, lang.class
857
+ assert_equal "en", lang.language
858
+ assert_equal "US", lang.region
859
+ assert_equal [], lang.variants
860
+ assert_equal "islamic", lang.extensions["calendar"]
861
+ assert_equal "traditional", lang.extensions["collation"]
862
+ assert_equal "secondary", lang.extensions["colStrength"]
863
+
864
+ assert_equal [Locale::Tag::Cldr.parse("en_US"),
865
+ Locale::Tag::Cldr.parse("en_US"),
866
+ Locale::Tag::Cldr.parse("en_US"),
867
+ Locale::Tag::Cldr.parse("en_US"),
868
+ Locale::Tag::Cldr.parse("en"),
869
+ Locale::Tag::Cldr.parse("en"),
870
+ Locale::Tag::Cldr.parse("en"),
871
+ Locale::Tag::Cldr.parse("en"),
872
+ ], lang.candidates
873
+
874
+ assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
875
+ assert_equal Locale::Tag::Common.parse("en_US"), lang.to_common
876
+ if RUBY_VERSION < "1.9.0" and RUBY_PLATFORM != "java"
877
+ assert_equal Locale::Tag::Rfc.parse("en-US-k-colStren-secondar-k-collatio-traditio-k-calendar-islamic"), lang.to_rfc
878
+ else
879
+ assert_equal Locale::Tag::Rfc.parse("en-US-k-calendar-islamic-k-collatio-traditio-k-colStren-secondar"), lang.to_rfc
880
+ end
881
+ assert_equal Locale::Tag::Cldr.parse("en_US@calendar=islamic;collation=traditional;colStrength=secondary"), lang.to_cldr
882
+ assert_equal Locale::Tag::Posix.parse("en_US"), lang.to_posix
883
+
884
+ end
885
+
886
+ def test_cldr_writer
887
+ lang = Locale::Tag.parse("en_US@calendar=islamic;colStrength=secondary")
888
+ lang.language = "ja"
889
+ assert_equal "ja_US@calendar=islamic;colStrength=secondary", lang.to_s
890
+ lang.script = "Hira"
891
+ assert_equal "ja_Hira_US@calendar=islamic;colStrength=secondary", lang.to_s
892
+ lang.region = "JP"
893
+ assert_equal "ja_Hira_JP@calendar=islamic;colStrength=secondary", lang.to_s
894
+ lang.variants = ["POSIX"]
895
+ assert_equal "ja_Hira_JP_POSIX@calendar=islamic;colStrength=secondary", lang.to_s
896
+ lang.extensions = {:collation => "traditional"}
897
+ assert_equal "ja_Hira_JP_POSIX@collation=traditional", lang.to_s
898
+
899
+ assert_equal [Locale::Tag::Cldr.parse("ja_Hira_JP_POSIX"),
900
+ Locale::Tag::Cldr.parse("ja_Hira_JP"),
901
+ Locale::Tag::Cldr.parse("ja_JP_POSIX"),
902
+ Locale::Tag::Cldr.parse("ja_JP"),
903
+ Locale::Tag::Cldr.parse("ja_Hira_POSIX"),
904
+ Locale::Tag::Cldr.parse("ja_Hira"),
905
+ Locale::Tag::Cldr.parse("ja_POSIX"),
906
+ Locale::Tag::Cldr.parse("ja"),
907
+ ], lang.candidates
908
+ end
909
+
910
+ def test_posix
911
+ lang = Locale::Tag.parse("C")
912
+ assert_equal Locale::Tag::Posix, lang.class
913
+ assert_equal "en", lang.language
914
+ assert_equal "US", lang.region
915
+ assert_equal "C", lang.tag
916
+
917
+ assert_equal [Locale::Tag::Posix.parse("en_US"),
918
+ Locale::Tag::Posix.parse("en_US"),
919
+ Locale::Tag::Posix.parse("en_US"),
920
+ Locale::Tag::Posix.parse("en_US"),
921
+ Locale::Tag::Posix.parse("en"),
922
+ Locale::Tag::Posix.parse("en"),
923
+ Locale::Tag::Posix.parse("en"),
924
+ Locale::Tag::Posix.parse("en"),
925
+ ], lang.candidates
926
+
927
+ assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
928
+ assert_equal Locale::Tag::Common.parse("en_US"), lang.to_common
929
+ assert_equal Locale::Tag::Rfc.parse("en-US"), lang.to_rfc
930
+ assert_equal Locale::Tag::Cldr.parse("en_US"), lang.to_cldr
931
+ assert_equal Locale::Tag::Posix.parse("en_US"), lang.to_posix
932
+
933
+ lang = Locale::Tag.parse("POSIX")
934
+ assert_equal Locale::Tag::Posix, lang.class
935
+ assert_equal "en", lang.language
936
+ assert_equal "US", lang.region
937
+ assert_equal "POSIX", lang.tag
938
+
939
+ assert_equal [Locale::Tag::Posix.parse("en_US"),
940
+ Locale::Tag::Posix.parse("en_US"),
941
+ Locale::Tag::Posix.parse("en_US"),
942
+ Locale::Tag::Posix.parse("en_US"),
943
+ Locale::Tag::Posix.parse("en"),
944
+ Locale::Tag::Posix.parse("en"),
945
+ Locale::Tag::Posix.parse("en"),
946
+ Locale::Tag::Posix.parse("en"),
947
+ ], lang.candidates
948
+
949
+ assert_equal Locale::Tag::Simple.parse("en_US"), lang.to_simple
950
+ assert_equal Locale::Tag::Common.parse("en_US"), lang.to_common
951
+ assert_equal Locale::Tag::Rfc.parse("en-US"), lang.to_rfc
952
+ assert_equal Locale::Tag::Cldr.parse("en_US"), lang.to_cldr
953
+ assert_equal Locale::Tag::Posix.parse("en_US"), lang.to_posix
954
+
955
+ lang = Locale::Tag.parse("japanese.euc")
956
+ assert_equal Locale::Tag::Posix, lang.class
957
+ assert_equal "japanese", lang.language
958
+ assert_equal nil, lang.region
959
+ assert_equal "euc", lang.charset
960
+
961
+ assert_equal [Locale::Tag::Posix.parse("japanese.euc"),
962
+ Locale::Tag::Posix.parse("japanese.euc"),
963
+ Locale::Tag::Posix.parse("japanese"),
964
+ Locale::Tag::Posix.parse("japanese"),
965
+ Locale::Tag::Posix.parse("japanese.euc"),
966
+ Locale::Tag::Posix.parse("japanese.euc"),
967
+ Locale::Tag::Posix.parse("japanese"),
968
+ Locale::Tag::Posix.parse("japanese"),
969
+ ], lang.candidates
970
+
971
+ lang = Locale::Tag.parse("es.iso885915")
972
+ assert_equal Locale::Tag::Posix, lang.class
973
+ assert_equal "es", lang.language
974
+ assert_equal nil, lang.region
975
+ assert_equal "iso885915", lang.charset
976
+ assert_equal nil, lang.modifier
977
+
978
+ assert_equal [Locale::Tag::Posix.parse("es.iso885915"),
979
+ Locale::Tag::Posix.parse("es.iso885915"),
980
+ Locale::Tag::Posix.parse("es"),
981
+ Locale::Tag::Posix.parse("es"),
982
+ Locale::Tag::Posix.parse("es.iso885915"),
983
+ Locale::Tag::Posix.parse("es.iso885915"),
984
+ Locale::Tag::Posix.parse("es"),
985
+ Locale::Tag::Posix.parse("es"),
986
+ ], lang.candidates
987
+
988
+ assert_equal Locale::Tag::Simple.parse("es"), lang.to_simple
989
+ assert_equal Locale::Tag::Common.parse("es"), lang.to_common
990
+ assert_equal Locale::Tag::Rfc.parse("es"), lang.to_rfc
991
+ assert_equal Locale::Tag::Cldr.parse("es"), lang.to_cldr
992
+ assert_equal Locale::Tag::Posix.parse("es.iso885915"), lang.to_posix
993
+
994
+ lang = Locale::Tag.parse("es_ES.iso885915")
995
+ assert_equal Locale::Tag::Posix, lang.class
996
+ assert_equal "es", lang.language
997
+ assert_equal "ES", lang.region
998
+ assert_equal "iso885915", lang.charset
999
+ assert_equal nil, lang.modifier
1000
+
1001
+ assert_equal [Locale::Tag::Posix.parse("es_ES.iso885915"),
1002
+ Locale::Tag::Posix.parse("es_ES.iso885915"),
1003
+ Locale::Tag::Posix.parse("es_ES"),
1004
+ Locale::Tag::Posix.parse("es_ES"),
1005
+ Locale::Tag::Posix.parse("es.iso885915"),
1006
+ Locale::Tag::Posix.parse("es.iso885915"),
1007
+ Locale::Tag::Posix.parse("es"),
1008
+ Locale::Tag::Posix.parse("es"),
1009
+ ], lang.candidates
1010
+
1011
+ assert_equal Locale::Tag::Simple.parse("es_ES"), lang.to_simple
1012
+ assert_equal Locale::Tag::Common.parse("es_ES"), lang.to_common
1013
+ assert_equal Locale::Tag::Rfc.parse("es-ES"), lang.to_rfc
1014
+ assert_equal Locale::Tag::Cldr.parse("es_ES"), lang.to_cldr
1015
+ assert_equal Locale::Tag::Posix.parse("es_ES.iso885915"), lang.to_posix
1016
+
1017
+ lang = Locale::Tag.parse("es@euro")
1018
+ assert_equal Locale::Tag::Posix, lang.class
1019
+ assert_equal "es", lang.language
1020
+ assert_equal nil, lang.region
1021
+ assert_equal nil, lang.charset
1022
+ assert_equal "euro", lang.modifier
1023
+
1024
+ assert_equal [Locale::Tag::Posix.parse("es@euro"),
1025
+ Locale::Tag::Posix.parse("es"),
1026
+ Locale::Tag::Posix.parse("es@euro"),
1027
+ Locale::Tag::Posix.parse("es"),
1028
+ Locale::Tag::Posix.parse("es@euro"),
1029
+ Locale::Tag::Posix.parse("es"),
1030
+ Locale::Tag::Posix.parse("es@euro"),
1031
+ Locale::Tag::Posix.parse("es"),
1032
+ ], lang.candidates
1033
+
1034
+ # A modifier is converted to a variant.
1035
+ # If the modifier is less than 5 characters, it is not canonical value.
1036
+ assert_equal Locale::Tag::Simple.parse("es"), lang.to_simple
1037
+ assert_equal Locale::Tag::Common.new("es", nil, nil, ["euro"]), lang.to_common
1038
+ assert_equal Locale::Tag::Rfc.new("es", nil, nil, ["euro"]), lang.to_rfc
1039
+ assert_equal Locale::Tag::Cldr.new("es", nil, nil, ["euro"]), lang.to_cldr
1040
+ assert_equal Locale::Tag::Posix.parse("es@euro"), lang.to_posix
1041
+
1042
+ lang = Locale::Tag.parse("es_ES@euro")
1043
+ assert_equal Locale::Tag::Posix, lang.class
1044
+ assert_equal "es", lang.language
1045
+ assert_equal "ES", lang.region
1046
+ assert_equal nil, lang.charset
1047
+ assert_equal "euro", lang.modifier
1048
+
1049
+ assert_equal [Locale::Tag::Posix.parse("es_ES@euro"),
1050
+ Locale::Tag::Posix.parse("es_ES"),
1051
+ Locale::Tag::Posix.parse("es_ES@euro"),
1052
+ Locale::Tag::Posix.parse("es_ES"),
1053
+ Locale::Tag::Posix.parse("es@euro"),
1054
+ Locale::Tag::Posix.parse("es"),
1055
+ Locale::Tag::Posix.parse("es@euro"),
1056
+ Locale::Tag::Posix.parse("es"),
1057
+ ], lang.candidates
1058
+
1059
+ assert_equal Locale::Tag::Simple.parse("es_ES"), lang.to_simple
1060
+ assert_equal Locale::Tag::Common.new("es", nil, "ES", ["euro"]), lang.to_common
1061
+ assert_equal Locale::Tag::Rfc.new("es", nil, "ES", ["euro"]), lang.to_rfc
1062
+ assert_equal Locale::Tag::Cldr.new("es", nil, "ES", ["EURO"]), lang.to_cldr
1063
+ assert_equal Locale::Tag::Posix.parse("es_ES@euro"), lang.to_posix
1064
+
1065
+ lang = Locale::Tag.parse("es_ES.iso885915@euro")
1066
+ assert_equal Locale::Tag::Posix, lang.class
1067
+ assert_equal "es", lang.language
1068
+ assert_equal "ES", lang.region
1069
+ assert_equal "iso885915", lang.charset
1070
+ assert_equal "euro", lang.modifier
1071
+
1072
+ assert_equal [Locale::Tag::Posix.parse("es_ES.iso885915@euro"),
1073
+ Locale::Tag::Posix.parse("es_ES.iso885915"),
1074
+ Locale::Tag::Posix.parse("es_ES@euro"),
1075
+ Locale::Tag::Posix.parse("es_ES"),
1076
+ Locale::Tag::Posix.parse("es.iso885915@euro"),
1077
+ Locale::Tag::Posix.parse("es.iso885915"),
1078
+ Locale::Tag::Posix.parse("es@euro"),
1079
+ Locale::Tag::Posix.parse("es"),
1080
+ ], lang.candidates
1081
+
1082
+ assert_equal Locale::Tag::Simple.parse("es_ES"), lang.to_simple
1083
+ assert_equal Locale::Tag::Common.new("es", nil, "ES", ["euro"]), lang.to_common
1084
+ assert_equal Locale::Tag::Rfc.new("es", nil, "ES", ["euro"]), lang.to_rfc
1085
+ assert_equal Locale::Tag::Cldr.new("es", nil, "ES", ["EURO"]), lang.to_cldr
1086
+ assert_equal Locale::Tag::Posix.parse("es_ES.iso885915@euro"), lang.to_posix
1087
+
1088
+ lang = Locale::Tag.parse("univ.utf8")
1089
+ assert_equal Locale::Tag::Posix, lang.class
1090
+ assert_equal "univ", lang.language
1091
+ assert_equal nil, lang.region
1092
+ assert_equal "utf8", lang.charset
1093
+
1094
+ assert_equal [Locale::Tag::Posix.parse("univ.utf8"),
1095
+ Locale::Tag::Posix.parse("univ.utf8"),
1096
+ Locale::Tag::Posix.parse("univ"),
1097
+ Locale::Tag::Posix.parse("univ"),
1098
+ Locale::Tag::Posix.parse("univ.utf8"),
1099
+ Locale::Tag::Posix.parse("univ.utf8"),
1100
+ Locale::Tag::Posix.parse("univ"),
1101
+ Locale::Tag::Posix.parse("univ"),
1102
+ ], lang.candidates
1103
+
1104
+ lang = Locale::Tag.parse("ja_JP.UTF-8")
1105
+ assert_equal Locale::Tag::Posix, lang.class
1106
+ assert_equal "ja", lang.language
1107
+ assert_equal "JP", lang.region
1108
+ assert_equal "UTF-8", lang.charset
1109
+
1110
+ assert_equal [Locale::Tag::Posix.parse("ja_JP.UTF-8"),
1111
+ Locale::Tag::Posix.parse("ja_JP.UTF-8"),
1112
+ Locale::Tag::Posix.parse("ja_JP"),
1113
+ Locale::Tag::Posix.parse("ja_JP"),
1114
+ Locale::Tag::Posix.parse("ja.UTF-8"),
1115
+ Locale::Tag::Posix.parse("ja.UTF-8"),
1116
+ Locale::Tag::Posix.parse("ja"),
1117
+ Locale::Tag::Posix.parse("ja"),
1118
+ ], lang.candidates
1119
+
1120
+ assert_equal Locale::Tag::Simple.parse("ja_JP"), lang.to_simple
1121
+ assert_equal Locale::Tag::Common.parse("ja_JP"), lang.to_common
1122
+ assert_equal Locale::Tag::Rfc.parse("ja-JP"), lang.to_rfc
1123
+ assert_equal Locale::Tag::Cldr.parse("ja_JP"), lang.to_cldr
1124
+ assert_equal Locale::Tag::Posix.parse("ja_JP.UTF-8"), lang.to_posix
1125
+ end
1126
+
1127
+ def test_posix_writer
1128
+ lang = Locale::Tag.parse("es_ES.iso885915@euro")
1129
+ lang.language = "ja"
1130
+ assert_equal "ja_ES.iso885915@euro", lang.to_s
1131
+ lang.region = "JP"
1132
+ assert_equal "ja_JP.iso885915@euro", lang.to_s
1133
+ lang.charset = "EUC-JP"
1134
+ assert_equal "ja_JP.EUC-JP@euro", lang.to_s
1135
+ lang.modifier = "osaka"
1136
+ assert_equal "ja_JP.EUC-JP@osaka", lang.to_s
1137
+ assert_equal [Locale::Tag::Posix.parse("ja_JP.EUC-JP@osaka"),
1138
+ Locale::Tag::Posix.parse("ja_JP.EUC-JP"),
1139
+ Locale::Tag::Posix.parse("ja_JP@osaka"),
1140
+ Locale::Tag::Posix.parse("ja_JP"),
1141
+ Locale::Tag::Posix.parse("ja.EUC-JP@osaka"),
1142
+ Locale::Tag::Posix.parse("ja.EUC-JP"),
1143
+ Locale::Tag::Posix.parse("ja@osaka"),
1144
+ Locale::Tag::Posix.parse("ja"),
1145
+ ], lang.candidates
1146
+ end
1147
+
1148
+ def test_invaild
1149
+ lang = Locale::Tag.parse("")
1150
+ assert_equal Locale::Tag::Illegular, lang.class
1151
+ assert_equal "en", lang.language
1152
+ assert_equal nil, lang.region
1153
+
1154
+ assert_equal [Locale::Tag::Illegular.new("en"),
1155
+ ], lang.candidates
1156
+
1157
+ assert_equal Locale::Tag::Simple.parse("en"), lang.to_simple
1158
+ assert_equal Locale::Tag::Common.parse("en"), lang.to_common
1159
+ assert_equal Locale::Tag::Rfc.parse("en"), lang.to_rfc
1160
+ assert_equal Locale::Tag::Cldr.parse("en"), lang.to_cldr
1161
+ assert_equal Locale::Tag::Posix.parse("en"), lang.to_posix
1162
+
1163
+ lang = Locale::Tag.parse(nil)
1164
+ assert_equal Locale::Tag::Illegular, lang.class
1165
+ assert_equal "en", lang.language
1166
+ assert_equal nil, lang.region
1167
+
1168
+ assert_equal [Locale::Tag::Illegular.new("en"),
1169
+ ], lang.candidates
1170
+
1171
+ assert_equal Locale::Tag::Simple.parse("en"), lang.to_simple
1172
+ assert_equal Locale::Tag::Common.parse("en"), lang.to_common
1173
+ assert_equal Locale::Tag::Rfc.parse("en"), lang.to_rfc
1174
+ assert_equal Locale::Tag::Cldr.parse("en"), lang.to_cldr
1175
+ assert_equal Locale::Tag::Posix.parse("en"), lang.to_posix
1176
+ end
1177
+
1178
+ def test_raise_error
1179
+ assert_raise(RuntimeError){
1180
+ Locale::Tag::Simple.new(nil)
1181
+ }
1182
+ end
1183
+ end