thedarkone-i18n 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/CHANGELOG.textile +57 -0
  2. data/README.textile +43 -9
  3. data/Rakefile +21 -0
  4. data/VERSION +1 -0
  5. data/lib/i18n.rb +87 -16
  6. data/lib/i18n/backend/base.rb +251 -0
  7. data/lib/i18n/backend/cache.rb +71 -0
  8. data/lib/i18n/backend/chain.rb +64 -0
  9. data/lib/i18n/backend/fallbacks.rb +53 -0
  10. data/lib/i18n/backend/fast.rb +53 -22
  11. data/lib/i18n/backend/fast/interpolation_compiler.rb +84 -0
  12. data/lib/i18n/backend/gettext.rb +65 -0
  13. data/lib/i18n/backend/lazy_reloading.rb +60 -0
  14. data/lib/i18n/backend/pluralization.rb +56 -0
  15. data/lib/i18n/backend/simple.rb +17 -240
  16. data/lib/i18n/exceptions.rb +13 -5
  17. data/lib/i18n/gettext.rb +25 -0
  18. data/lib/i18n/helpers/gettext.rb +35 -0
  19. data/lib/i18n/locale/fallbacks.rb +100 -0
  20. data/lib/i18n/locale/tag.rb +27 -0
  21. data/lib/i18n/locale/tag/parents.rb +24 -0
  22. data/lib/i18n/locale/tag/rfc4646.rb +78 -0
  23. data/lib/i18n/locale/tag/simple.rb +44 -0
  24. data/test/all.rb +5 -7
  25. data/test/api/basics.rb +15 -0
  26. data/test/api/interpolation.rb +85 -0
  27. data/test/api/lambda.rb +52 -0
  28. data/test/api/link.rb +47 -0
  29. data/test/api/localization/date.rb +65 -0
  30. data/test/api/localization/date_time.rb +63 -0
  31. data/test/api/localization/lambda.rb +26 -0
  32. data/test/api/localization/time.rb +63 -0
  33. data/test/api/pluralization.rb +37 -0
  34. data/test/api/translation.rb +51 -0
  35. data/test/backend/cache/cache_test.rb +57 -0
  36. data/test/backend/chain/api_test.rb +80 -0
  37. data/test/backend/chain/chain_test.rb +64 -0
  38. data/test/backend/fallbacks/api_test.rb +79 -0
  39. data/test/backend/fallbacks/fallbacks_test.rb +29 -0
  40. data/test/backend/fast/all.rb +5 -0
  41. data/test/backend/fast/api_test.rb +91 -0
  42. data/test/backend/fast/interpolation_compiler_test.rb +84 -0
  43. data/test/backend/fast/lookup_test.rb +24 -0
  44. data/test/backend/fast/setup.rb +22 -0
  45. data/test/backend/fast/translations_test.rb +89 -0
  46. data/test/backend/lazy_reloading/reloading_test.rb +67 -0
  47. data/test/backend/pluralization/api_test.rb +81 -0
  48. data/test/backend/pluralization/pluralization_test.rb +39 -0
  49. data/test/backend/simple/all.rb +5 -0
  50. data/test/backend/simple/api_test.rb +90 -0
  51. data/test/backend/simple/lookup_test.rb +24 -0
  52. data/test/backend/simple/setup.rb +151 -0
  53. data/test/backend/simple/translations_test.rb +89 -0
  54. data/test/fixtures/locales/de.po +61 -0
  55. data/test/fixtures/locales/en.rb +3 -0
  56. data/test/fixtures/locales/en.yml +3 -0
  57. data/test/fixtures/locales/plurals.rb +112 -0
  58. data/test/gettext/api_test.rb +78 -0
  59. data/test/gettext/backend_test.rb +35 -0
  60. data/test/i18n_exceptions_test.rb +6 -25
  61. data/test/i18n_load_path_test.rb +23 -0
  62. data/test/i18n_test.rb +56 -18
  63. data/test/locale/fallbacks_test.rb +128 -0
  64. data/test/locale/tag/rfc4646_test.rb +147 -0
  65. data/test/locale/tag/simple_test.rb +35 -0
  66. data/test/test_helper.rb +72 -0
  67. data/test/with_options.rb +34 -0
  68. metadata +109 -19
  69. data/i18n.gemspec +0 -31
  70. data/lib/i18n/backend/fast/pluralization_compiler.rb +0 -50
  71. data/test/backend_test.rb +0 -633
  72. data/test/fast_backend_test.rb +0 -34
  73. data/test/locale/en.rb +0 -1
  74. data/test/locale/en.yml +0 -3
  75. data/test/pluralization_compiler_test.rb +0 -35
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
4
+
5
+ class I18nLoadPathTest < Test::Unit::TestCase
6
+ # include Tests::Backend::Simple::Setup::Base
7
+
8
+ def setup
9
+ I18n.locale = :en
10
+ I18n.backend = I18n::Backend::Simple.new
11
+ backend_store_translations(:en, :foo => {:bar => 'bar', :baz => 'baz'})
12
+ end
13
+
14
+ def test_nested_load_paths_do_not_break_locale_loading
15
+ I18n.load_path = [[locales_dir + '/en.yml']]
16
+ assert_equal "baz", I18n.t(:'foo.bar')
17
+ end
18
+
19
+ def test_adding_arrays_of_filenames_to_load_path_do_not_break_locale_loading
20
+ I18n.load_path << Dir[locales_dir + '/*.{rb,yml}']
21
+ assert_equal "baz", I18n.t(:'foo.bar')
22
+ end
23
+ end
data/test/i18n_test.rb CHANGED
@@ -1,10 +1,6 @@
1
- $:.unshift "lib"
1
+ # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'test/unit'
5
- require 'mocha'
6
- require 'i18n'
7
- require 'active_support'
3
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
8
4
 
9
5
  class I18nTest < Test::Unit::TestCase
10
6
  def setup
@@ -23,19 +19,19 @@ class I18nTest < Test::Unit::TestCase
23
19
  end
24
20
 
25
21
  def test_can_set_backend
26
- assert_nothing_raised{ I18n.backend = self }
22
+ assert_nothing_raised { I18n.backend = self }
27
23
  assert_equal self, I18n.backend
28
24
  I18n.backend = I18n::Backend::Simple.new
29
25
  end
30
26
 
31
27
  def test_uses_en_us_as_default_locale_by_default
32
- assert_equal 'en', I18n.default_locale
28
+ assert_equal :en, I18n.default_locale
33
29
  end
34
30
 
35
31
  def test_can_set_default_locale
36
- assert_nothing_raised{ I18n.default_locale = 'de' }
37
- assert_equal 'de', I18n.default_locale
38
- I18n.default_locale = 'en'
32
+ assert_nothing_raised { I18n.default_locale = 'de' }
33
+ assert_equal :de, I18n.default_locale
34
+ I18n.default_locale = :en
39
35
  end
40
36
 
41
37
  def test_uses_default_locale_as_locale_by_default
@@ -43,14 +39,35 @@ class I18nTest < Test::Unit::TestCase
43
39
  end
44
40
 
45
41
  def test_can_set_locale_to_thread_current
46
- assert_nothing_raised{ I18n.locale = 'de' }
47
- assert_equal 'de', I18n.locale
48
- assert_equal 'de', Thread.current[:locale]
49
- I18n.locale = 'en'
42
+ assert_nothing_raised { I18n.locale = 'de' }
43
+ assert_equal :de, I18n.locale
44
+ assert_equal :de, Thread.current[:locale]
45
+ I18n.locale = :en
46
+ end
47
+
48
+ def test_defaults_to_dot_as_separator
49
+ assert_equal '.', I18n.default_separator
50
+ end
51
+
52
+ def test_can_set_default_separator
53
+ assert_nothing_raised { I18n.default_separator = "\001" }
54
+ I18n.default_separator = '.' # revert it
55
+ end
56
+
57
+ def test_normalize_keys
58
+ assert_equal [:en, :foo, :bar], I18n.send(:normalize_translation_keys, :en, :bar, :foo)
59
+ assert_equal [:en, :foo, :bar, :baz, :buz], I18n.send(:normalize_translation_keys, :en, :'baz.buz', :'foo.bar')
60
+ assert_equal [:en, :foo, :bar, :baz, :buz], I18n.send(:normalize_translation_keys, :en, 'baz.buz', 'foo.bar')
61
+ assert_equal [:en, :foo, :bar, :baz, :buz], I18n.send(:normalize_translation_keys, :en, %w(baz buz), %w(foo bar))
62
+ assert_equal [:en, :foo, :bar, :baz, :buz], I18n.send(:normalize_translation_keys, :en, [:baz, :buz], [:foo, :bar])
63
+ end
64
+
65
+ def test_uses_passed_separator_to_normalize_keys
66
+ assert_equal [:en, :foo, :bar, :baz, :buz], I18n.send(:normalize_translation_keys, :en, :'baz|buz', :'foo|bar', '|')
50
67
  end
51
68
 
52
69
  def test_can_set_exception_handler
53
- assert_nothing_raised{ I18n.exception_handler = :custom_exception_handler }
70
+ assert_nothing_raised { I18n.exception_handler = :custom_exception_handler }
54
71
  I18n.exception_handler = :default_exception_handler # revert it
55
72
  end
56
73
 
@@ -72,7 +89,7 @@ class I18nTest < Test::Unit::TestCase
72
89
  end
73
90
 
74
91
  def test_translate_given_no_locale_uses_i18n_locale
75
- I18n.backend.expects(:translate).with 'en', :foo, nil
92
+ I18n.backend.expects(:translate).with :en, :foo, {}
76
93
  I18n.translate :foo
77
94
  end
78
95
 
@@ -85,7 +102,7 @@ class I18nTest < Test::Unit::TestCase
85
102
  end
86
103
 
87
104
  def test_translate_with_array_as_scope_works
88
- assert_equal ".", I18n.t(:separator, :scope => ['currency.format'])
105
+ assert_equal ".", I18n.t(:separator, :scope => %w(currency format))
89
106
  end
90
107
 
91
108
  def test_translate_with_array_containing_dot_separated_strings_as_scope_works
@@ -122,4 +139,25 @@ class I18nTest < Test::Unit::TestCase
122
139
  def test_localize_object_raises_argument_error
123
140
  assert_raises(I18n::ArgumentError) { I18n.l Object.new }
124
141
  end
142
+
143
+ def test_proc_exception_handler
144
+ I18n.exception_handler = Proc.new { |exception, locale, key, options|
145
+ "No exception here! [Proc handler]"
146
+ }
147
+ assert_equal "No exception here! [Proc handler]", I18n.translate(:test_proc_handler)
148
+ ensure
149
+ I18n.exception_handler = :default_exception_handler
150
+ end
151
+
152
+ def test_class_exception_handler
153
+ I18n.exception_handler = Class.new do
154
+ def call(exception, locale, key, options)
155
+ "No exception here! [Class handler]"
156
+ end
157
+ end.new
158
+ assert_equal "No exception here! [Class handler]", I18n.translate(:test_class_handler)
159
+ ensure
160
+ I18n.exception_handler = :default_exception_handler
161
+ end
162
+
125
163
  end
@@ -0,0 +1,128 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../test_helper.rb'
4
+ require 'i18n/locale/fallbacks'
5
+ require 'i18n/locale/tag'
6
+
7
+ include I18n::Locale
8
+
9
+ class I18nFallbacksDefaultsTest < Test::Unit::TestCase
10
+ def teardown
11
+ I18n.default_locale = :en
12
+ end
13
+
14
+ test "defaults reflect the I18n.default_locale if no default has been set manually" do
15
+ I18n.default_locale = :'en-US'
16
+ I18n.fallbacks = Fallbacks.new
17
+ assert_equal [:'en-US', :en], I18n.fallbacks.defaults
18
+ end
19
+
20
+ test "defaults reflect a manually passed default locale if any" do
21
+ I18n.fallbacks = Fallbacks.new(:'fi-FI')
22
+ assert_equal [:'fi-FI', :fi], I18n.fallbacks.defaults
23
+ I18n.default_locale = :'de-DE'
24
+ assert_equal [:'fi-FI', :fi], I18n.fallbacks.defaults
25
+ end
26
+
27
+ test "defaults allows to set multiple defaults" do
28
+ I18n.fallbacks = Fallbacks.new(:'fi-FI', :'se-FI')
29
+ assert_equal [:'fi-FI', :fi, :'se-FI', :se], I18n.fallbacks.defaults
30
+ end
31
+ end
32
+
33
+ class I18nFallbacksComputationTest < Test::Unit::TestCase
34
+ def setup
35
+ @fallbacks = Fallbacks.new(:'en-US')
36
+ end
37
+
38
+ test "with no mappings defined it returns [:es, :en-US] for :es" do
39
+ assert_equal [:es, :"en-US", :en], @fallbacks[:es]
40
+ end
41
+
42
+ test "with no mappings defined it returns [:es-ES, :es, :en-US] for :es-ES" do
43
+ assert_equal [:"es-ES", :es, :"en-US", :en], @fallbacks[:"es-ES"]
44
+ end
45
+
46
+ test "with no mappings defined it returns [:es-MX, :es, :en-US] for :es-MX" do
47
+ assert_equal [:"es-MX", :es, :"en-US", :en], @fallbacks[:"es-MX"]
48
+ end
49
+
50
+ test "with no mappings defined it returns [:es-Latn-ES, :es-Latn, :es, :en-US] for :es-Latn-ES" do
51
+ assert_equal [:"es-Latn-ES", :"es-Latn", :es, :"en-US", :en], @fallbacks[:'es-Latn-ES']
52
+ end
53
+
54
+ test "with no mappings defined it returns [:en, :en-US] for :en" do
55
+ assert_equal [:en, :"en-US"], @fallbacks[:en]
56
+ end
57
+
58
+ test "with no mappings defined it returns [:en-US, :en] for :en-US (special case: locale == default)" do
59
+ assert_equal [:"en-US", :en], @fallbacks[:"en-US"]
60
+ end
61
+
62
+ # Most people who speak Catalan also live in Spain, so it is safe to assume
63
+ # that they also speak Spanish as spoken in Spain.
64
+ test "with a Catalan mapping defined it returns [:ca, :es-ES, :es, :en-US] for :ca" do
65
+ @fallbacks.map(:ca => :"es-ES")
66
+ assert_equal [:ca, :"es-ES", :es, :"en-US", :en], @fallbacks[:ca]
67
+ end
68
+
69
+ test "with a Catalan mapping defined it returns [:ca-ES, :ca, :es-ES, :es, :en-US] for :ca-ES" do
70
+ @fallbacks.map(:ca => :"es-ES")
71
+ assert_equal [:"ca-ES", :ca, :"es-ES", :es, :"en-US", :en], @fallbacks[:"ca-ES"]
72
+ end
73
+
74
+ # People who speak Arabic as spoken in Palestine often times also speak
75
+ # Hebrew as spoken in Israel. However it is in no way safe to assume that
76
+ # everybody who speaks Arabic also speaks Hebrew.
77
+
78
+ test "with a Hebrew mapping defined it returns [:ar, :en-US] for :ar" do
79
+ @fallbacks.map(:"ar-PS" => :"he-IL")
80
+ assert_equal [:ar, :"en-US", :en], @fallbacks[:ar]
81
+ end
82
+
83
+ test "with a Hebrew mapping defined it returns [:ar-EG, :ar, :en-US] for :ar-EG" do
84
+ @fallbacks.map(:"ar-PS" => :"he-IL")
85
+ assert_equal [:"ar-EG", :ar, :"en-US", :en], @fallbacks[:"ar-EG"]
86
+ end
87
+
88
+ test "with a Hebrew mapping defined it returns [:ar-PS, :ar, :he-IL, :he, :en-US] for :ar-PS" do
89
+ @fallbacks.map(:"ar-PS" => :"he-IL")
90
+ assert_equal [:"ar-PS", :ar, :"he-IL", :he, :"en-US", :en], @fallbacks[:"ar-PS"]
91
+ end
92
+
93
+ # Sami people live in several scandinavian countries. In Finnland many people
94
+ # know Swedish and Finnish. Thus, it can be assumed that Sami living in
95
+ # Finnland also speak Swedish and Finnish.
96
+
97
+ test "with a Sami mapping defined it returns [:sms-FI, :sms, :se-FI, :se, :fi-FI, :fi, :en-US] for :sms-FI" do
98
+ @fallbacks.map(:sms => [:"se-FI", :"fi-FI"])
99
+ assert_equal [:"sms-FI", :sms, :"se-FI", :se, :"fi-FI", :fi, :"en-US", :en], @fallbacks[:"sms-FI"]
100
+ end
101
+
102
+ # Austrian people understand German as spoken in Germany
103
+
104
+ test "with a German mapping defined it returns [:de, :en-US] for de" do
105
+ @fallbacks.map(:"de-AT" => :"de-DE")
106
+ assert_equal [:de, :"en-US", :en], @fallbacks[:"de"]
107
+ end
108
+
109
+ test "with a German mapping defined it returns [:de-DE, :de, :en-US] for de-DE" do
110
+ @fallbacks.map(:"de-AT" => :"de-DE")
111
+ assert_equal [:"de-DE", :de, :"en-US", :en], @fallbacks[:"de-DE"]
112
+ end
113
+
114
+ test "with a German mapping defined it returns [:de-AT, :de, :de-DE, :en-US] for de-AT" do
115
+ @fallbacks.map(:"de-AT" => :"de-DE")
116
+ assert_equal [:"de-AT", :de, :"de-DE", :"en-US", :en], @fallbacks[:"de-AT"]
117
+ end
118
+
119
+ # Mapping :de => :en, :he => :en
120
+
121
+ test "with a mapping :de => :en, :he => :en defined it returns [:de, :en] for :de" do
122
+ assert_equal [:de, :"en-US", :en], @fallbacks[:de]
123
+ end
124
+
125
+ test "with a mapping :de => :en, :he => :en defined it [:he, :en] for :de" do
126
+ assert_equal [:he, :"en-US", :en], @fallbacks[:he]
127
+ end
128
+ end
@@ -0,0 +1,147 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../../test_helper.rb'
4
+ require 'i18n/locale/tag'
5
+ require 'i18n/locale/tag/rfc4646'
6
+
7
+ # Rfc4646::Parser
8
+
9
+ class I18nLocaleTagRfc4646ParserTest < Test::Unit::TestCase
10
+ include I18n::Locale
11
+
12
+ test "Rfc4646::Parser given a valid tag 'de' returns an array of subtags" do
13
+ assert_equal ['de', nil, nil, nil, nil, nil, nil], Tag::Rfc4646::Parser.match('de')
14
+ end
15
+
16
+ test "Rfc4646::Parser given a valid tag 'de' returns an array of subtags" do
17
+ assert_equal ['de', nil, 'DE', nil, nil, nil, nil], Tag::Rfc4646::Parser.match('de-DE')
18
+ end
19
+
20
+ test "Rfc4646::Parser given a valid lowercase tag 'de-latn-de-variant-x-phonebk' returns an array of subtags" do
21
+ assert_equal ['de', 'latn', 'de', 'variant', nil, 'x-phonebk', nil], Tag::Rfc4646::Parser.match('de-latn-de-variant-x-phonebk')
22
+ end
23
+
24
+ test "Rfc4646::Parser given a valid uppercase tag 'DE-LATN-DE-VARIANT-X-PHONEBK' returns an array of subtags" do
25
+ assert_equal ['DE', 'LATN', 'DE', 'VARIANT', nil, 'X-PHONEBK', nil], Tag::Rfc4646::Parser.match('DE-LATN-DE-VARIANT-X-PHONEBK')
26
+ end
27
+
28
+ test "Rfc4646::Parser given an invalid tag 'a-DE' it returns false" do
29
+ assert_equal false, Tag::Rfc4646::Parser.match('a-DE')
30
+ end
31
+
32
+ test "Rfc4646::Parser given an invalid tag 'de-419-DE' it returns false" do
33
+ assert_equal false, Tag::Rfc4646::Parser.match('de-419-DE')
34
+ end
35
+ end
36
+
37
+ # Tag for the locale 'de-Latn-DE-Variant-a-ext-x-phonebk-i-klingon'
38
+
39
+ class I18nLocaleTagSubtagsTest < Test::Unit::TestCase
40
+ include I18n::Locale
41
+
42
+ def setup
43
+ subtags = %w(de Latn DE variant a-ext x-phonebk i-klingon)
44
+ @tag = Tag::Rfc4646.new *subtags
45
+ end
46
+
47
+ test "returns 'de' as the language subtag in lowercase" do
48
+ assert_equal 'de', @tag.language
49
+ end
50
+
51
+ test "returns 'Latn' as the script subtag in titlecase" do
52
+ assert_equal 'Latn', @tag.script
53
+ end
54
+
55
+ test "returns 'DE' as the region subtag in uppercase" do
56
+ assert_equal 'DE', @tag.region
57
+ end
58
+
59
+ test "returns 'variant' as the variant subtag in lowercase" do
60
+ assert_equal 'variant', @tag.variant
61
+ end
62
+
63
+ test "returns 'a-ext' as the extension subtag" do
64
+ assert_equal 'a-ext', @tag.extension
65
+ end
66
+
67
+ test "returns 'x-phonebk' as the privateuse subtag" do
68
+ assert_equal 'x-phonebk', @tag.privateuse
69
+ end
70
+
71
+ test "returns 'i-klingon' as the grandfathered subtag" do
72
+ assert_equal 'i-klingon', @tag.grandfathered
73
+ end
74
+
75
+ test "returns a formatted tag string from #to_s" do
76
+ assert_equal 'de-Latn-DE-variant-a-ext-x-phonebk-i-klingon', @tag.to_s
77
+ end
78
+
79
+ test "returns an array containing the formatted subtags from #to_a" do
80
+ assert_equal %w(de Latn DE variant a-ext x-phonebk i-klingon), @tag.to_a
81
+ end
82
+ end
83
+
84
+ # Tag inheritance
85
+
86
+ class I18nLocaleTagSubtagsTest < Test::Unit::TestCase
87
+ test "#parent returns 'de-Latn-DE-variant-a-ext-x-phonebk' as the parent of 'de-Latn-DE-variant-a-ext-x-phonebk-i-klingon'" do
88
+ tag = Tag::Rfc4646.new *%w(de Latn DE variant a-ext x-phonebk i-klingon)
89
+ assert_equal 'de-Latn-DE-variant-a-ext-x-phonebk', tag.parent.to_s
90
+ end
91
+
92
+ test "#parent returns 'de-Latn-DE-variant-a-ext' as the parent of 'de-Latn-DE-variant-a-ext-x-phonebk'" do
93
+ tag = Tag::Rfc4646.new *%w(de Latn DE variant a-ext x-phonebk)
94
+ assert_equal 'de-Latn-DE-variant-a-ext', tag.parent.to_s
95
+ end
96
+
97
+ test "#parent returns 'de-Latn-DE-variant' as the parent of 'de-Latn-DE-variant-a-ext'" do
98
+ tag = Tag::Rfc4646.new *%w(de Latn DE variant a-ext)
99
+ assert_equal 'de-Latn-DE-variant', tag.parent.to_s
100
+ end
101
+
102
+ test "#parent returns 'de-Latn-DE' as the parent of 'de-Latn-DE-variant'" do
103
+ tag = Tag::Rfc4646.new *%w(de Latn DE variant)
104
+ assert_equal 'de-Latn-DE', tag.parent.to_s
105
+ end
106
+
107
+ test "#parent returns 'de-Latn' as the parent of 'de-Latn-DE'" do
108
+ tag = Tag::Rfc4646.new *%w(de Latn DE)
109
+ assert_equal 'de-Latn', tag.parent.to_s
110
+ end
111
+
112
+ test "#parent returns 'de' as the parent of 'de-Latn'" do
113
+ tag = Tag::Rfc4646.new *%w(de Latn)
114
+ assert_equal 'de', tag.parent.to_s
115
+ end
116
+
117
+ # TODO RFC4647 says: "If no language tag matches the request, the "default" value is returned."
118
+ # where should we set the default language?
119
+ # test "#parent returns '' as the parent of 'de'" do
120
+ # tag = Tag::Rfc4646.new *%w(de)
121
+ # assert_equal '', tag.parent.to_s
122
+ # end
123
+
124
+ test "#parent returns an array of 5 parents for 'de-Latn-DE-variant-a-ext-x-phonebk-i-klingon'" do
125
+ parents = %w(de-Latn-DE-variant-a-ext-x-phonebk-i-klingon
126
+ de-Latn-DE-variant-a-ext-x-phonebk
127
+ de-Latn-DE-variant-a-ext
128
+ de-Latn-DE-variant
129
+ de-Latn-DE
130
+ de-Latn
131
+ de)
132
+ tag = Tag::Rfc4646.new *%w(de Latn DE variant a-ext x-phonebk i-klingon)
133
+ assert_equal parents, tag.self_and_parents.map{|tag| tag.to_s}
134
+ end
135
+
136
+ test "returns an array of 5 parents for 'de-Latn-DE-variant-a-ext-x-phonebk-i-klingon'" do
137
+ parents = %w(de-Latn-DE-variant-a-ext-x-phonebk-i-klingon
138
+ de-Latn-DE-variant-a-ext-x-phonebk
139
+ de-Latn-DE-variant-a-ext
140
+ de-Latn-DE-variant
141
+ de-Latn-DE
142
+ de-Latn
143
+ de)
144
+ tag = Tag::Rfc4646.new *%w(de Latn DE variant a-ext x-phonebk i-klingon)
145
+ assert_equal parents, tag.self_and_parents.map{|tag| tag.to_s}
146
+ end
147
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../../test_helper.rb'
4
+ require 'i18n/locale/tag'
5
+ require 'i18n/locale/tag/simple'
6
+
7
+ class I18nLocaleTagSimpleTest < Test::Unit::TestCase
8
+ include I18n::Locale
9
+
10
+ test "returns 'de' as the language subtag in lowercase" do
11
+ assert_equal %w(de Latn DE), Tag::Simple.new('de-Latn-DE').subtags
12
+ end
13
+
14
+ test "returns a formatted tag string from #to_s" do
15
+ assert_equal 'de-Latn-DE', Tag::Simple.new('de-Latn-DE').to_s
16
+ end
17
+
18
+ test "returns an array containing the formatted subtags from #to_a" do
19
+ assert_equal %w(de Latn DE), Tag::Simple.new('de-Latn-DE').to_a
20
+ end
21
+
22
+ # Tag inheritance
23
+
24
+ test "#parent returns 'de-Latn' as the parent of 'de-Latn-DE'" do
25
+ assert_equal 'de-Latn', Tag::Simple.new('de-Latn-DE').parent.to_s
26
+ end
27
+
28
+ test "#parent returns 'de' as the parent of 'de-Latn'" do
29
+ assert_equal 'de', Tag::Simple.new('de-Latn').parent.to_s
30
+ end
31
+
32
+ test "#self_and_parents returns an array of 3 tags for 'de-Latn-DE'" do
33
+ assert_equal %w(de-Latn-DE de-Latn de), Tag::Simple.new('de-Latn-DE').self_and_parents.map { |tag| tag.to_s}
34
+ end
35
+ end