icu 0.9.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.travis.yml +11 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +20 -0
  6. data/README.md +69 -0
  7. data/Rakefile +38 -0
  8. data/benchmark/normalization.rb +106 -0
  9. data/benchmark/normalization_phrases.txt +1031 -0
  10. data/benchmark/normalization_result.txt +45 -0
  11. data/benchmark/normalization_wikip.txt +2838 -0
  12. data/ext/icu/extconf.rb +242 -0
  13. data/ext/icu/icu.c +18 -0
  14. data/ext/icu/icu.h +78 -0
  15. data/ext/icu/icu_charset_detector.c +192 -0
  16. data/ext/icu/icu_collator.c +138 -0
  17. data/ext/icu/icu_locale.c +852 -0
  18. data/ext/icu/icu_normalizer.c +122 -0
  19. data/ext/icu/icu_number_format.c +0 -0
  20. data/ext/icu/icu_spoof_checker.c +194 -0
  21. data/ext/icu/icu_transliterator.c +159 -0
  22. data/ext/icu/internal_encoding.c +38 -0
  23. data/ext/icu/internal_ustring.c +304 -0
  24. data/ext/icu/internal_utils.c +50 -0
  25. data/ext/icu/rb_errors.c +14 -0
  26. data/icu.gemspec +22 -0
  27. data/lib/icu.rb +6 -18
  28. data/lib/icu/charset_detector.rb +5 -0
  29. data/lib/icu/collator.rb +24 -0
  30. data/lib/icu/locale.rb +19 -0
  31. data/lib/icu/transliterator.rb +8 -0
  32. data/lib/icu/version.rb +3 -0
  33. data/spec/charset_detector_spec.rb +47 -0
  34. data/spec/collator_spec.rb +73 -0
  35. data/spec/locale_spec.rb +312 -0
  36. data/spec/normalizer_spec.rb +35 -0
  37. data/spec/spec_helper.rb +8 -0
  38. data/spec/spoof_checker_spec.rb +56 -0
  39. data/spec/transliterator_spec.rb +41 -0
  40. metadata +132 -55
  41. data/COPYING +0 -674
  42. data/COPYING.LESSER +0 -165
  43. data/README +0 -81
  44. data/ext/extconf.rb +0 -31
  45. data/ext/icu.c +0 -128
  46. data/ext/icu.h +0 -34
  47. data/ext/icu_locale.c +0 -330
  48. data/ext/icu_locale_country.c +0 -99
  49. data/ext/icu_locale_language.c +0 -99
  50. data/ext/icu_numeric.c +0 -161
  51. data/ext/icu_time.c +0 -391
  52. data/test/test_locale.rb +0 -73
  53. data/test/test_numeric.rb +0 -78
  54. data/test/test_time.rb +0 -75
@@ -1,73 +0,0 @@
1
- require 'test/unit'
2
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu'))
3
-
4
- class TestLocale < Test::Unit::TestCase
5
- def setup
6
- ICU::Locale.default = 'en_US'
7
- end
8
-
9
- def test_default
10
- ICU::Locale.default = 'es_ES'
11
- assert_equal('es_ES', ICU::Locale.default.locale_id)
12
- ICU::Locale.default = ICU::Locale.get('en_US')
13
- assert_equal('en_US', ICU::Locale.default.locale_id)
14
- assert_raise(ArgumentError) { ICU::Locale.default = 'worg locale' }
15
- end
16
-
17
- def test_get
18
- assert_equal(ICU::Locale.get('es_ES').object_id, ICU::Locale.get('es_ES').object_id)
19
- assert_equal(ICU::Locale.get('en_US').object_id, ICU::Locale.get('en_US').object_id)
20
- assert_raise(ArgumentError) { ICU::Locale.get('worg locale') }
21
- end
22
-
23
- def test_parent
24
- locale = ICU::Locale.get('es_ES').parent
25
- assert_equal('es', locale.locale_id)
26
- locale = locale.parent
27
- assert_equal(nil, locale)
28
-
29
- assert_equal(nil, ICU::Locale.get('es_ES').parent.parent)
30
- end
31
-
32
- def test_country
33
- country = ICU::Locale.get('es_ES').country
34
- assert_equal(ICU::Locale::Country.get('ES').object_id, country.object_id)
35
- assert_equal('ES', country.code)
36
- assert_equal('Spain', country.name)
37
- assert_equal('España', country.name('es_ES'))
38
- assert_equal('España', country.name(ICU::Locale.get('es_ES')))
39
- assert_nil(ICU::Locale.get('es').country)
40
- assert_raise(ArgumentError) { ICU::Locale::Country.get('worg country') }
41
- end
42
-
43
- def test_language
44
- language = ICU::Locale.get('es_ES').language
45
- assert_equal(ICU::Locale::Language.get('es').object_id, language.object_id)
46
- assert_equal('es', language.code)
47
- assert_equal('Spanish', language.name)
48
- assert_equal('español', language.name('es_ES'))
49
- assert_equal('español', language.name(ICU::Locale.get('es_ES')))
50
- assert_nil(ICU::Locale.get('_ES').language)
51
- assert_raise(ArgumentError) { ICU::Locale::Language.get('worg language') }
52
- end
53
-
54
- def test_available
55
- assert_equal(["Afrikaans", "af"], ICU::Locale.available[0])
56
- assert_equal(["afrikaans (Afrique du Sud)", "af_ZA"], ICU::Locale.available(:locale => 'fr_FR')[1])
57
- assert_equal(["albanski (Albanija)", "sq_AL"], ICU::Locale.available(:locale => ICU::Locale.get('hr_HR'))[3])
58
-
59
- assert_equal([["English (United States)", "en_US"], ["Spanish (Spain)", "es_ES"]], ICU::Locale.available(:allowed => ['es_ES', 'en_US']))
60
- assert_equal(["English", "en"], ICU::Locale.available(:languages => ['es', 'en'])[0])
61
- assert_equal(["Basque (Spain)", "eu_ES"], ICU::Locale.available(:countries => ['ES', 'US'])[0])
62
- assert_equal(
63
- [["Spanish (Spain)", "es_ES"], ["Spanish (United States)", "es_US"]],
64
- ICU::Locale.available(:allowed => ['es_ES', 'ca_ES', 'en_US', 'en_GB', 'es_US'], :languages => ['es'], :countries => ['ES', 'US'])
65
- )
66
-
67
- assert_equal(["Albanian", [["Albanian", "sq"], ["Albanian (Albania)", "sq_AL"]]], ICU::Locale.available(:group => true)[1])
68
- end
69
-
70
- def test_determine
71
- assert_equal('es_ES', ICU::Locale.determine_from_http('es_ES,us_US'))
72
- end
73
- end
@@ -1,78 +0,0 @@
1
- require 'test/unit'
2
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu'))
3
-
4
- class TestNumeric < Test::Unit::TestCase
5
- def setup
6
- ICU::Locale.default = 'en_US'
7
- end
8
-
9
- def test_types
10
- assert_raise(TypeError) { 13243412.233.localize(false) }
11
- assert_raise(TypeError) { 13243412.233.localize(:currency, false) }
12
- assert_raise(TypeError) { 13243412.233.localize(:currency, :locale => false) }
13
- assert_raise(TypeError) { 13243412.233.localize(:currency, :round_increment => false) }
14
- assert_raise(TypeError) { 13243412.233.localize(:currency, :round_mode => false) }
15
- assert_raise(TypeError) { 13243412.233.localize(:currency, :precision => false) }
16
- end
17
-
18
- def test_limits
19
- # Fixnum
20
- assert_equal('1,073,741,823', 1073741823.localize)
21
- assert_equal('-1,073,741,823', -1073741823.localize)
22
- # Bignum
23
- assert_equal('9,223,372,036,854,775,807', 9223372036854775807.localize)
24
- assert_equal('-9,223,372,036,854,775,807', -9223372036854775807.localize)
25
- assert_raise(RangeError) { 9223372036854775808.localize }
26
- # Float
27
- assert_equal('13,243,412.233', 13243412.233.localize)
28
- assert_equal('-13,243,412.233', -13243412.233.localize)
29
- end
30
-
31
- def test_decimal
32
- assert_equal('3,490,835,234.656', 3490835234.6556.localize)
33
- assert_equal('3.490.835.234,656', 3490835234.6556.localize(:decimal, :locale => 'es_ES'))
34
- assert_equal('٣٤٩٠٨٣٥٢٣٤٫٦٥٦', 3490835234.6556.localize(:decimal, :locale => ICU::Locale.get('ar_SY')))
35
- end
36
-
37
- def test_currency
38
- assert_equal('$1,073,741,823.32', 1073741823.323.localize(:currency))
39
- assert_equal('($1,073,741,823.32)', -1073741823.323.localize(:currency))
40
- assert_equal('€1,073,741,823.32', 1073741823.323.localize(:currency, :currency => 'EUR'))
41
-
42
- assert_equal('1.073.741.823,32 €', 1073741823.323.localize(:currency, :locale => 'es_ES'))
43
- assert_equal('-1.073.741.823,32 €', -1073741823.323.localize(:currency, :locale => 'es_ES'))
44
- assert_equal('1.073.741.823,32 US$', 1073741823.323.localize(:currency, :locale => 'es_ES', :currency => 'USD'))
45
-
46
- assert_equal('1,073,741,823.32 ₪', 1073741823.323.localize(:currency, :locale => 'he_IL'))
47
- assert_equal('-1,073,741,823.32 ₪', -1073741823.323.localize(:currency, :locale => 'he_IL'))
48
- assert_equal('1,073,741,823.32 $', 1073741823.323.localize(:currency, :locale => 'he_IL', :currency => 'USD'))
49
- end
50
-
51
- def test_rounding
52
- assert_equal('$2,314.30', 2314.3289.localize(:currency, :round_increment => 0.1))
53
- assert_equal('$2,314.40', 2314.3289.localize(:currency, :round_increment => 0.1, :round_mode => :ceil))
54
- end
55
-
56
- def test_precision
57
- assert_equal('$2,314.3290', 2314.32896.localize(:currency, :precision => 4))
58
- assert_equal('$1,234.674', 1234.67433.localize(:currency, :precision => 3))
59
- end
60
-
61
- def test_percent
62
- assert_equal('12%', 0.12.localize(:percent))
63
- assert_equal('1,200%', 12.localize(:percent))
64
- end
65
-
66
- def test_scientific
67
- assert_equal('4.3289E4', 43289.localize(:scientific))
68
- assert_equal('1.1239087212E0', 1.1239087212.localize(:scientific))
69
- end
70
-
71
- def test_spellout
72
- assert_equal('forty-three thousand two hundred and eighty-nine', 43289.localize(:spellout))
73
- assert_equal('one point one two three nine', 1.1239.localize(:spellout))
74
-
75
- assert_equal('cuarenta y tres mil doscientos ochenta y nueve', 43289.localize(:spellout, :locale => 'es_ES'))
76
- assert_equal('uno punto uno dos tres nueve', 1.1239.localize(:spellout, :locale => 'es_ES'))
77
- end
78
- end
@@ -1,75 +0,0 @@
1
- require 'test/unit'
2
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'icu'))
3
-
4
- class TestTime < Test::Unit::TestCase
5
- def setup
6
- ICU::Locale.default = 'en_US'
7
- end
8
-
9
- def test_localize_zone
10
- Time.default_zone = 'Europe/Paris'
11
- assert_equal('10:31:34 AM CEDT', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
12
- assert_equal('8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full, :zone => 'GMT'))
13
- assert_equal('3:31:34 AM GMT-05:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full, :zone => 'GMT-05:00'))
14
- end
15
-
16
- def test_localize_style
17
- assert_equal('Monday, May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :full))
18
- assert_equal('May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :long))
19
- assert_equal('May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :medium))
20
- assert_equal('5/8/06 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :short))
21
- assert_equal('8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false))
22
- assert_equal('May 8, 2006 8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :full))
23
- assert_equal('May 8, 2006 8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :long))
24
- assert_equal('May 8, 2006 8:31:34 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :medium))
25
- assert_equal('May 8, 2006 8:31 AM', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => :short))
26
- assert_equal('May 8, 2006', Time.utc(2006, 5, 8, 8, 31, 34).localize(:time => false))
27
- end
28
-
29
- def test_localize_locale
30
- assert_equal('lunes 8 de mayo de 2006 8:31:34', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :full, :locale => 'es_ES'))
31
- assert_equal('08:31:34 8 מאי 2006', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :long, :locale => ICU::Locale.get('he_IL')))
32
- assert_equal('2006. svibnja 08 08:31:34', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => :long, :locale => 'hr_HR'))
33
- end
34
-
35
- def test_zones
36
- assert_instance_of(Array, Time.zones)
37
- assert_equal(["Africa/Ceuta", "Atlantic/Canary", "Europe/Madrid"], Time.zones(:countries => ['ES']))
38
- assert_equal(
39
- [["Central European Standard Time", "ECT"], ["Central European Standard Time", "Europe/Paris"], ["Greenwich Mean Time", "Europe/London"], ["Greenwich Mean Time", "Europe/Belfast"], ["Greenwich Mean Time", "GB"], ["Greenwich Mean Time", "GB-Eire"]],
40
- Time.zones(:countries => ['FR', 'GB'], :type => :standard)
41
- )
42
- assert_equal([["Spain", ["Africa/Ceuta", "Atlantic/Canary", "Europe/Madrid"]]], Time.zones(:countries => ['ES'], :group => true))
43
- end
44
-
45
- def test_default_zone
46
- Time.default_zone = 'Europe/Paris'
47
- assert_equal('Europe/Paris', Time.default_zone)
48
- assert_equal('10:31:34 AM CEDT', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
49
- Time.default_zone = 'UTC'
50
- assert_equal('UTC', Time.default_zone)
51
- assert_equal('8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
52
- Time.default_zone = 'worg time zone'
53
- assert_equal('GMT', Time.default_zone)
54
- assert_equal('8:31:34 AM GMT+00:00', Time.utc(2006, 5, 8, 8, 31, 34).localize(:date => false, :time => :full))
55
- end
56
-
57
- def test_pattern
58
- assert_equal("EEEE d' de 'MMMM' de 'yyyy H:mm:ss", Time.pattern(:date => :full, :locale => 'es_ES'))
59
- assert_equal('yyyy. MMMM dd HH:mm:ss', Time.pattern(:date => :long, :locale => ICU::Locale.get('hr_HR')))
60
- assert_equal('HH:mm:ss dd/MM/yyyy', Time.pattern(:date => :medium, :locale => 'he_IL'))
61
- assert_equal('M/d/yy h:mm:ss a', Time.pattern(:date => :short))
62
- assert_equal('h:mm:ss a', Time.pattern(:date => false))
63
- assert_equal("dd/MM/yyyy HH'H'mm''ss\" z", Time.pattern(:time => :full, :locale => 'es_ES'))
64
- assert_equal('yyyy.MM.dd HH:mm:ss z', Time.pattern(:time => :long, :locale => 'hr_HR'))
65
- assert_equal('HH:mm:ss dd/MM/yyyy', Time.pattern(:time => :medium, :locale => 'he_IL'))
66
- assert_equal('MMM d, yyyy h:mm a', Time.pattern(:time => :short))
67
- assert_equal('MMM d, yyyy', Time.pattern(:time => false))
68
- end
69
-
70
- def test_week_start
71
- assert_equal(1, Time.week_start)
72
- assert_equal(2, Time.week_start(:locale => 'hr_HR'))
73
- assert_equal(2, Time.week_start(:locale => ICU::Locale.get('hr_HR')))
74
- end
75
- end