ffi-icu 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0a7c36403ec9b6c70045c537a2f31cc9fc62f065
4
- data.tar.gz: dce1b25080ad24cd6325a4d4b50e81b7938fc4f6
2
+ SHA256:
3
+ metadata.gz: 3e1817bf83d85197ea62937c274ff98c71984ef4a432a6f76fc3cca764bf45dc
4
+ data.tar.gz: 2a21f2177dc151831fe89782be8cfe53d2f13a6d1038961eb1efe5c3970a27a0
5
5
  SHA512:
6
- metadata.gz: 01a065f767fba3fcc658838d2891782538f244246c912c9f483f440b896d7e52620128097b00bbe92f1edf6e0a26a205010ac6b02b3c15923d37903c613ff5f5
7
- data.tar.gz: 941fd743b77fbbabd24254f3f23f0d18093c7614877b0a50d532211cae728f3173b2f7d744943e7e6364950ecc9f12a0770fddda150732d0a96c85880053df56
6
+ metadata.gz: 6fb2d659678226632c485ea24de6e79f7d20ccf7b80b03833f680bb295ae07736957f3a9037ac1d3639b432f6974c279b580767d08315ad005c57cc6be79ed8b
7
+ data.tar.gz: 9c49ddef23ae27f88d4eaffbaf0cf42b670e7f07939b7c19b6255a4ac157faae25e8eb5bc973764e767b3b32d40226c4b1cc95772c629fbe4b678d4cff5ebccb
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
@@ -1,7 +1,13 @@
1
+ language: ruby
2
+ os: linux
3
+ dist: xenial
4
+
1
5
  rvm:
2
- - 2.4.6
3
- - 2.5.5
4
- - 2.6.3
6
+ - 2.5
7
+ - 2.6
8
+ - 2.7
5
9
  - ruby-head
10
+
6
11
  before_script:
7
12
  - sudo apt-get install -y libicu-dev
13
+
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ffi-icu
1
+ ffi-icu [![Build Status](https://travis-ci.org/erickguan/ffi-icu.svg?branch=master)](https://travis-ci.org/erickguan/ffi-icu)
2
2
  =======
3
3
 
4
4
  Simple FFI wrappers for ICU. Checkout the renovated [ICU gem](https://github.com/fantasticfears/icu4r) instead which supports various of encoding and distributed with packaged source. FFI-ICU needs some love with ICU gem's transcoding method.
@@ -47,7 +47,6 @@ or
47
47
  Why not just use rchardet?
48
48
 
49
49
  * speed
50
- * 1.9 support
51
50
 
52
51
  Locale Sensitive Collation
53
52
  --------------------------
@@ -130,15 +129,15 @@ Platforms:
130
129
 
131
130
  Rubies:
132
131
 
133
- - 2.4.6
134
- - 2.5.5
135
- - 2.6.3
132
+ - 2.5
133
+ - 2.6
134
+ - 2.7
136
135
  - ruby-head
137
136
 
138
137
  TODO:
139
138
  =====
140
139
 
141
- * Any other useful part of ICU?
140
+ * Any other useful part of ICU?
142
141
  * Windows?!
143
142
 
144
143
  Note on Patches/Pull Requests
@@ -21,7 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.summary = %q{Simple Ruby FFI wrappers for things I need from ICU.}
22
22
 
23
23
  s.add_runtime_dependency "ffi", "~> 1.0", ">= 1.0.9"
24
- s.add_development_dependency 'rspec', '~> 2.5', '>= 2.5.0'
25
- s.add_development_dependency "rake", ["~> 0.9.2"]
24
+ s.add_development_dependency 'rspec', '~> 3.9'
25
+ s.add_development_dependency "rake", [">= 12.3.3"]
26
26
  end
27
-
@@ -18,15 +18,6 @@ module ICU
18
18
  os
19
19
  end
20
20
  end
21
-
22
- def self.ruby19?
23
- RUBY_VERSION >= '1.9'
24
- end
25
- end
26
-
27
- unless ICU.ruby19?
28
- require 'jcode'
29
- $KCODE = 'u'
30
21
  end
31
22
 
32
23
  require "ffi-icu/core_ext/string"
@@ -39,7 +39,12 @@ module ICU
39
39
  [find_lib("libicui18n.#{FFI::Platform::LIBSUFFIX}.??"),
40
40
  find_lib("libicutu.#{FFI::Platform::LIBSUFFIX}.??")]
41
41
  when :osx
42
- [find_lib("libicucore.#{FFI::Platform::LIBSUFFIX}")]
42
+ # See https://developer.apple.com/documentation/macos-release-notes/macos-big-sur-11_0_1-release-notes (62986286)
43
+ if Gem::Version.new(`sw_vers -productVersion`) >= Gem::Version.new('11')
44
+ ["libicucore.#{FFI::Platform::LIBSUFFIX}"]
45
+ else
46
+ [find_lib("libicucore.#{FFI::Platform::LIBSUFFIX}")]
47
+ end
43
48
  when :linux
44
49
  [find_lib("libicui18n.#{FFI::Platform::LIBSUFFIX}.??"),
45
50
  find_lib("libicutu.#{FFI::Platform::LIBSUFFIX}.??")]
@@ -1,3 +1,3 @@
1
1
  module ICU
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,75 +1,76 @@
1
1
  # encoding: utf-8
2
2
 
3
- require "spec_helper"
4
-
5
3
  module ICU
6
4
  describe BreakIterator do
7
5
 
8
6
  it "should return available locales" do
9
7
  locales = ICU::BreakIterator.available_locales
10
- locales.should be_kind_of(Array)
11
- locales.should_not be_empty
12
- locales.should include("en_US")
8
+ expect(locales).to be_an(Array)
9
+ expect(locales).to_not be_empty
10
+ expect(locales).to include("en_US")
13
11
  end
14
12
 
15
13
  it "finds all word boundaries in an English string" do
16
14
  iterator = BreakIterator.new :word, "en_US"
17
15
  iterator.text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
18
- iterator.to_a.should == [0, 5, 6, 11, 12, 17, 18, 21, 22, 26, 27, 28, 39, 40, 51, 52, 56, 57, 58, 61, 62, 64, 65, 72, 73, 79, 80, 90, 91, 93, 94, 100, 101, 103, 104, 110, 111, 116, 117, 123, 124]
16
+ expect(iterator.to_a).to eq(
17
+ [0, 5, 6, 11, 12, 17, 18, 21, 22, 26, 27, 28, 39, 40, 51, 52, 56, 57, 58, 61, 62, 64, 65, 72, 73, 79, 80, 90, 91, 93, 94, 100, 101, 103, 104, 110, 111, 116, 117, 123, 124]
18
+ )
19
19
  end
20
20
 
21
21
  it "returns each substring" do
22
22
  iterator = BreakIterator.new :word, "en_US"
23
23
  iterator.text = "Lorem ipsum dolor sit amet."
24
24
 
25
- iterator.substrings.should == ["Lorem", " ", "ipsum", " ", "dolor", " ", "sit", " ", "amet", "."]
25
+ expect(iterator.substrings).to eq(["Lorem", " ", "ipsum", " ", "dolor", " ", "sit", " ", "amet", "."])
26
26
  end
27
27
 
28
28
  it "returns the substrings of a non-ASCII string" do
29
29
  iterator = BreakIterator.new :word, "th_TH"
30
30
  iterator.text = "รู้อะไรไม่สู้รู้วิชา รู้รักษาตัวรอดเป็นยอดดี"
31
31
 
32
- iterator.substrings.should == ["รู้", "อะไร", "ไม่สู้", "รู้", "วิชา", " ", "รู้", "รักษา", "ตัว", "รอด", "เป็น", "ยอดดี"]
32
+ expect(iterator.substrings).to eq(
33
+ ["รู้", "อะไร", "ไม่สู้", "รู้", "วิชา", " ", "รู้", "รักษา", "ตัว", "รอด", "เป็น", "ยอดดี"]
34
+ )
33
35
  end
34
36
 
35
37
  it "finds all word boundaries in a non-ASCII string" do
36
38
  iterator = BreakIterator.new :word, "th_TH"
37
39
  iterator.text = "การทดลอง"
38
- iterator.to_a.should == [0, 3, 8]
40
+ expect(iterator.to_a).to eq([0, 3, 8])
39
41
  end
40
42
 
41
43
  it "finds all sentence boundaries in an English string" do
42
44
  iterator = BreakIterator.new :sentence, "en_US"
43
45
  iterator.text = "This is a sentence. This is another sentence, with a comma in it."
44
- iterator.to_a.should == [0, 20, 65]
46
+ expect(iterator.to_a).to eq([0, 20, 65])
45
47
  end
46
48
 
47
49
  it "can navigate back and forward" do
48
50
  iterator = BreakIterator.new :word, "en_US"
49
51
  iterator.text = "Lorem ipsum dolor sit amet."
50
52
 
51
- iterator.first.should == 0
53
+ expect(iterator.first).to eq(0)
52
54
  iterator.next
53
- iterator.current.should == 5
54
- iterator.last.should == 27
55
+ expect(iterator.current).to eq(5)
56
+ expect(iterator.last).to eq(27)
55
57
  end
56
58
 
57
59
  it "fetches info about given offset" do
58
60
  iterator = BreakIterator.new :word, "en_US"
59
61
  iterator.text = "Lorem ipsum dolor sit amet."
60
62
 
61
- iterator.following(3).should == 5
62
- iterator.preceding(6).should == 5
63
+ expect(iterator.following(3)).to eq(5)
64
+ expect(iterator.preceding(6)).to eq(5)
63
65
 
64
- iterator.should be_boundary(5)
65
- iterator.should_not be_boundary(10)
66
+ expect(iterator).to be_boundary(5)
67
+ expect(iterator).to_not be_boundary(10)
66
68
  end
67
69
 
68
70
  it "returns an Enumerator if no block was given" do
69
71
  iterator = BreakIterator.new :word, "nb"
70
- expected = ICU.ruby19? ? Enumerator : Enumerable::Enumerator
71
72
 
72
- iterator.each.should be_kind_of(expected)
73
+ expect(iterator.each).to be_kind_of(Enumerator)
73
74
  end
74
75
 
75
76
  end # BreakIterator
@@ -1,29 +1,27 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'spec_helper'
4
-
5
3
  describe ICU::CharDet::Detector do
6
4
 
7
5
  let(:detector) { ICU::CharDet::Detector.new }
8
6
 
9
7
  it "should recognize UTF-8" do
10
8
  m = detector.detect("æåø")
11
- m.name.should == "UTF-8"
12
- m.language.should be_kind_of(String)
9
+ expect(m.name).to eq("UTF-8")
10
+ expect(m.language).to be_a(String)
13
11
  end
14
12
 
15
13
  it "has a list of detectable charsets" do
16
14
  cs = detector.detectable_charsets
17
- cs.should be_kind_of(Array)
18
- cs.should_not be_empty
15
+ expect(cs).to be_an(Array)
16
+ expect(cs).to_not be_empty
19
17
 
20
- cs.first.should be_kind_of(String)
18
+ expect(cs.first).to be_a(String)
21
19
  end
22
20
 
23
21
  it "should disable / enable the input filter" do
24
- detector.input_filter_enabled?.should be_false
22
+ expect(detector.input_filter_enabled?).to be_falsey
25
23
  detector.input_filter_enabled = true
26
- detector.input_filter_enabled?.should be_true
24
+ expect(detector.input_filter_enabled?).to be_truthy
27
25
  end
28
26
 
29
27
  it "should should set declared encoding" do
@@ -31,14 +29,14 @@ describe ICU::CharDet::Detector do
31
29
  end
32
30
 
33
31
  it "should detect several matching encodings" do
34
- detector.detect_all("foo bar").should be_instance_of(Array)
32
+ expect(detector.detect_all("foo bar")).to be_an(Array)
35
33
  end
36
34
 
37
35
  it "should support null bytes" do
38
36
  # Create a utf-16 string and then force it to binary (ascii) to mimic data from net/http
39
37
  string = "foo".encode("UTF-16").force_encoding("binary")
40
38
  m = detector.detect(string)
41
- m.name.should == "UTF-16BE"
42
- m.language.should be_kind_of(String)
39
+ expect(m.name).to eq("UTF-16BE")
40
+ expect(m.language).to be_a(String)
43
41
  end
44
42
  end
@@ -1,12 +1,10 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module ICU
6
4
  module Collation
7
5
  describe "Collation" do
8
6
  it "should collate an array of strings" do
9
- Collation.collate("nb", %w[æ å ø]).should == %w[æ ø å]
7
+ expect(Collation.collate("nb", %w[æ å ø])).to eq(%w[æ ø å])
10
8
  end
11
9
  end
12
10
 
@@ -14,51 +12,50 @@ module ICU
14
12
  let(:collator) { Collator.new("nb") }
15
13
 
16
14
  it "should collate an array of strings" do
17
- collator.collate(%w[å ø æ]).should == %w[æ ø å]
15
+ expect(collator.collate(%w[å ø æ])).to eq(%w[æ ø å])
18
16
  end
19
17
 
20
18
  it "raises an error if argument does not respond to :sort" do
21
- lambda { collator.collate(1) }.should raise_error(ArgumentError)
19
+ expect { collator.collate(1) }.to raise_error(ArgumentError)
22
20
  end
23
21
 
24
22
  it "should return available locales" do
25
23
  locales = ICU::Collation.available_locales
26
- locales.should be_kind_of(Array)
27
- locales.should_not be_empty
28
- locales.should include("nb")
24
+ expect(locales).to be_an(Array)
25
+ expect(locales).to_not be_empty
26
+ expect(locales).to include("nb")
29
27
  end
30
28
 
31
29
  it "should return the locale of the collator" do
32
- l = collator.locale
33
- l.should == "nb"
30
+ expect(collator.locale).to eq('nb')
34
31
  end
35
32
 
36
33
  it "should compare two strings" do
37
- collator.compare("blåbærsyltetøy", "blah").should == 1
38
- collator.compare("blah", "blah").should == 0
39
- collator.compare("ba", "bl").should == -1
34
+ expect(collator.compare("blåbærsyltetøy", "blah")).to eq(1)
35
+ expect(collator.compare("blah", "blah")).to eq(0)
36
+ expect(collator.compare("ba", "bl")).to eq(-1)
40
37
  end
41
38
 
42
39
  it "should know if a string is greater than another" do
43
- collator.should be_greater("z", "a")
44
- collator.should_not be_greater("a", "z")
40
+ expect(collator).to be_greater("z", "a")
41
+ expect(collator).to_not be_greater("a", "z")
45
42
  end
46
43
 
47
44
  it "should know if a string is greater or equal to another" do
48
- collator.should be_greater_or_equal("z", "a")
49
- collator.should be_greater_or_equal("z", "z")
50
- collator.should_not be_greater_or_equal("a", "z")
45
+ expect(collator).to be_greater_or_equal("z", "a")
46
+ expect(collator).to be_greater_or_equal("z", "z")
47
+ expect(collator).to_not be_greater_or_equal("a", "z")
51
48
  end
52
49
 
53
50
  it "should know if a string is equal to another" do
54
- collator.should be_equal("a", "a")
55
- collator.should_not be_equal("a", "b")
51
+ expect(collator).to be_equal("a", "a")
52
+ expect(collator).to_not be_equal("a", "b")
56
53
  end
57
54
 
58
55
  it "should return rules" do
59
- collator.rules.should_not be_empty
56
+ expect(collator.rules).to_not be_empty
60
57
  # ö sorts before Ö
61
- collator.rules.include?('ö<<<Ö').should be_true
58
+ expect(collator.rules).to include('ö<<<Ö')
62
59
  end
63
60
 
64
61
  end
@@ -1,14 +1,19 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module ICU
6
4
  module Lib
7
5
  describe VersionInfo do
8
- its(:to_a) { should be_an Array }
9
- its(:to_s) do
10
- should be_a String
11
- should match /^[0-9.]+$/
6
+ describe '.to_a' do
7
+ subject { described_class.new.to_a }
8
+
9
+ it { is_expected.to be_an(Array) }
10
+ end
11
+
12
+ describe '.to_s' do
13
+ subject { described_class.new.to_s }
14
+
15
+ it { is_expected.to be_a(String) }
16
+ it { is_expected.to match(/^[0-9.]+$/) }
12
17
  end
13
18
  end
14
19
  end
@@ -1,7 +1,5 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module ICU
6
4
  describe Lib do
7
5
  describe 'error checking' do
@@ -9,8 +7,8 @@ module ICU
9
7
 
10
8
  context 'upon success' do
11
9
  it 'returns the block result' do
12
- Lib.check_error { |status| return_value }.should == return_value
13
- Lib.check_error { |status| status.write_int(0); return_value }.should == return_value
10
+ expect(Lib.check_error { |status| return_value }).to eq(return_value)
11
+ expect(Lib.check_error { |status| status.write_int(0); return_value }).to eq(return_value)
14
12
  end
15
13
  end
16
14
 
@@ -28,8 +26,9 @@ module ICU
28
26
  before(:each) { $VERBOSE = true }
29
27
 
30
28
  it 'prints to STDERR and returns the block result' do
31
- $stderr.should_receive(:puts) { |message| message.should match /U_.*_WARNING/ }
32
- Lib.check_error { |status| status.write_int(-127); return_value }.should == return_value
29
+ expect($stderr).to receive(:puts) { |message| expect(message).to match /U_.*_WARNING/ }
30
+ error_check = Lib.check_error { |status| status.write_int(-127); return_value }
31
+ expect(error_check).to eq(return_value)
33
32
  end
34
33
  end
35
34
 
@@ -37,8 +36,9 @@ module ICU
37
36
  before(:each) { $VERBOSE = false }
38
37
 
39
38
  it 'returns the block result' do
40
- $stderr.should_not_receive(:puts)
41
- Lib.check_error { |status| status.write_int(-127); return_value }.should == return_value
39
+ expect($stderr).to_not receive(:puts)
40
+ error_check = Lib.check_error { |status| status.write_int(-127); return_value }
41
+ expect(error_check).to eq(return_value)
42
42
  end
43
43
  end
44
44
  end
@@ -49,15 +49,15 @@ module ICU
49
49
  subject { Lib.cldr_version }
50
50
 
51
51
  it { should be_a Lib::VersionInfo }
52
- it('is populated') { subject.to_a.should_not == [0,0,0,0] }
52
+ it('is populated') { expect(subject.to_a).to_not eq([0,0,0,0]) }
53
53
  end
54
54
  end
55
55
 
56
56
  describe 'ICU version' do
57
57
  subject { Lib.version }
58
58
 
59
- it { should be_a Lib::VersionInfo }
60
- it('is populated') { subject.to_a.should_not == [0,0,0,0] }
59
+ it { is_expected.to be_a Lib::VersionInfo }
60
+ it('is populated') { expect(subject.to_a).to_not eq([0,0,0,0]) }
61
61
  end
62
62
  end
63
63
  end
@@ -1,31 +1,38 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require 'spec_helper'
4
-
5
3
  module ICU
6
4
  describe Locale do
7
5
  describe 'the available locales' do
8
6
  subject { Locale.available }
9
7
 
10
- it { should be_an Array }
11
- it { should_not be_empty }
12
- its(:first) { should be_a Locale }
8
+ it { is_expected.to be_an Array }
9
+ it { is_expected.to_not be_empty }
10
+
11
+ it 'should be an array of available Locales' do
12
+ expect(subject.first).to be_a(Locale)
13
+ end
13
14
  end
14
15
 
15
16
  describe 'the available ISO 639 country codes' do
16
17
  subject { Locale.iso_countries }
17
18
 
18
- it { should be_an Array }
19
- it { should_not be_empty }
20
- its(:first) { should be_a String }
19
+ it { is_expected.to be_an Array }
20
+ it { is_expected.to_not be_empty }
21
+
22
+ it 'should be an array of Strings' do
23
+ expect(subject.first).to be_a(String)
24
+ end
21
25
  end
22
26
 
23
27
  describe 'the available ISO 639 language codes' do
24
28
  subject { Locale.iso_languages }
25
29
 
26
- it { should be_an Array }
27
- it { should_not be_empty }
28
- its(:first) { should be_a String }
30
+ it { is_expected.to be_an Array }
31
+ it { is_expected.to_not be_empty }
32
+
33
+ it 'should be an array of Strings' do
34
+ expect(subject.first).to be_a(String)
35
+ end
29
36
  end
30
37
 
31
38
  describe 'the default' do
@@ -37,44 +44,49 @@ module ICU
37
44
  locales.respond_to?(:sample) ? locales.sample : locales.choice
38
45
  end
39
46
 
40
- it { should be_a Locale }
47
+ it { is_expected.to be_a Locale }
41
48
 
42
49
  it 'can be assigned using Locale' do
43
- (Locale.default = locale).should == locale
44
- Locale.default.should == locale
50
+ expect(Locale.default = locale).to eq(locale)
51
+ expect(Locale.default).to eq(locale)
45
52
  end
46
53
 
47
54
  it 'can be assigned using string' do
48
55
  string = locale.to_s
49
56
 
50
- (Locale.default = string).should == string
51
- Locale.default.should == Locale.new(string)
57
+ expect(Locale.default = string).to eq(string)
58
+ expect(Locale.default).to eq(Locale.new(string))
52
59
  end
53
60
 
54
61
  it 'can be assigned using symbol' do
55
62
  symbol = locale.to_s.to_sym
56
63
 
57
- (Locale.default = symbol).should == symbol
58
- Locale.default.should == Locale.new(symbol)
64
+ expect(Locale.default = symbol).to eq(symbol)
65
+ expect(Locale.default).to eq(Locale.new(symbol))
59
66
  end
60
67
  end
61
68
 
62
69
  if Gem::Version.new('4.2') <= Gem::Version.new(Lib.version)
63
70
  describe 'BCP 47 language tags' do
64
71
  it 'converts a language tag to a locale' do
65
- Locale.for_language_tag('en-us').should == Locale.new('en_US')
66
- Locale.for_language_tag('nan-Hant-tw').should == Locale.new('nan_Hant_TW')
72
+ expect(Locale.for_language_tag('en-us')).to eq(Locale.new('en_US'))
73
+ expect(Locale.for_language_tag('nan-Hant-tw')).to eq(Locale.new('nan_Hant_TW'))
67
74
  end
68
75
 
69
76
  it 'returns a language tag for a locale' do
70
77
  if Gem::Version.new('4.4') <= Gem::Version.new(Lib.version)
71
- Locale.new('en_US').to_language_tag.should == 'en-US'
72
- Locale.new('zh_TW').to_language_tag.should == 'zh-TW'
73
- Locale.new('zh_Hans_CH_PINYIN').to_language_tag.should == 'zh-Hans-CH-u-co-pinyin'
78
+ expect(Locale.new('en_US').to_language_tag).to eq('en-US')
79
+ expect(Locale.new('zh_TW').to_language_tag).to eq('zh-TW')
80
+ # Support for this "magic" transform was dropped with https://unicode-org.atlassian.net/browse/ICU-20187, so don't test it
81
+ if Gem::Version.new(Lib.version) < Gem::Version.new('64')
82
+ expect(Locale.new('zh_Hans_CH_PINYIN').to_language_tag).to eq('zh-Hans-CH-u-co-pinyin')
83
+ else
84
+ expect(Locale.new('zh_Hans_CH@collation=pinyin').to_language_tag).to eq('zh-Hans-CH-u-co-pinyin')
85
+ end
74
86
  else
75
- Locale.new('en_US').to_language_tag.should == 'en-us'
76
- Locale.new('zh_TW').to_language_tag.should == 'zh-tw'
77
- Locale.new('zh_Hans_CH_PINYIN').to_language_tag.should == 'zh-hans-ch-u-co-pinyin'
87
+ expect(Locale.new('en_US').to_language_tag).to eq('en-us')
88
+ expect(Locale.new('zh_TW').to_language_tag).to eq('zh-tw')
89
+ expect(Locale.new('zh_Hans_CH_PINYIN').to_language_tag).to eq('zh-hans-ch-u-co-pinyin')
78
90
  end
79
91
  end
80
92
  end
@@ -82,13 +94,13 @@ module ICU
82
94
 
83
95
  describe 'Win32 locale IDs' do
84
96
  it 'converts an LCID to a locale' do
85
- Locale.for_lcid(1033).should == Locale.new('en_US')
86
- Locale.for_lcid(1036).should == Locale.new('fr_FR')
97
+ expect(Locale.for_lcid(1033)).to eq(Locale.new('en_US'))
98
+ expect(Locale.for_lcid(1036)).to eq(Locale.new('fr_FR'))
87
99
  end
88
100
 
89
101
  it 'returns an LCID for a locale' do
90
- Locale.new('en_US').lcid.should == 1033
91
- Locale.new('es_US').lcid.should == 21514
102
+ expect(Locale.new('en_US').lcid).to eq(1033)
103
+ expect(Locale.new('es_US').lcid).to eq(21514)
92
104
  end
93
105
  end
94
106
 
@@ -97,39 +109,39 @@ module ICU
97
109
 
98
110
  context 'in a specific locale' do
99
111
  it 'returns the country' do
100
- Locale.new('de_DE').display_country('en').should == 'Germany'
101
- Locale.new('en_US').display_country('fr').should == 'États-Unis'
112
+ expect(Locale.new('de_DE').display_country('en')).to eq('Germany')
113
+ expect(Locale.new('en_US').display_country('fr')).to eq('États-Unis')
102
114
  end
103
115
 
104
116
  it 'returns the language' do
105
- Locale.new('fr_FR').display_language('de').should == 'Französisch'
106
- Locale.new('zh_CH').display_language('en').should == 'Chinese'
117
+ expect(Locale.new('fr_FR').display_language('de')).to eq('Französisch')
118
+ expect(Locale.new('zh_CH').display_language('en')).to eq('Chinese')
107
119
  end
108
120
 
109
121
  it 'returns the name' do
110
- Locale.new('en_US').display_name('de').should == 'Englisch (Vereinigte Staaten)'
111
- Locale.new('zh_CH').display_name('fr').should == 'chinois (Suisse)'
122
+ expect(Locale.new('en_US').display_name('de')).to eq('Englisch (Vereinigte Staaten)')
123
+ expect(Locale.new('zh_CH').display_name('fr')).to eq('chinois (Suisse)')
112
124
  end
113
125
 
114
126
  it 'returns the script' do
115
- Locale.new('ja_Hira_JP').display_script('en').should == 'Hiragana'
116
- Locale.new('ja_Hira_JP').display_script('ru').should == 'хирагана'
127
+ expect(Locale.new('ja_Hira_JP').display_script('en')).to eq('Hiragana')
128
+ expect(Locale.new('ja_Hira_JP').display_script('ru')).to eq('хирагана')
117
129
  end
118
130
 
119
131
  it 'returns the variant' do
120
- Locale.new('be_BY_TARASK').display_variant('de').should == 'Taraskievica-Orthographie'
121
- Locale.new('zh_CH_POSIX').display_variant('en').should == 'Computer'
132
+ expect(Locale.new('be_BY_TARASK').display_variant('de')).to eq('Taraskievica-Orthographie')
133
+ expect(Locale.new('zh_CH_POSIX').display_variant('en')).to eq('Computer')
122
134
  end
123
135
 
124
136
  # If memory set for 'read_uchar_buffer' is set too low it will throw an out
125
137
  # of bounds memory error, which results in a Segmentation fault error.
126
138
  it 'insures memory sizes is set correctly' do
127
139
  # Currently, testing the longest known locales. May need to be update in the future.
128
- Locale.new('en_VI').display_country('ccp').should_not be_nil
129
- Locale.new('yue_Hant').display_language('ccp').should_not be_nil
130
- Locale.new('en_VI').display_name('ccp').should_not be_nil
131
- Locale.new('yue_Hant').display_script('ccp').should_not be_nil
132
- Locale.new('en_US_POSIX').display_variant('sl').should_not be_nil
140
+ expect(Locale.new('en_VI').display_country('ccp')).to_not be_nil
141
+ expect(Locale.new('yue_Hant').display_language('ccp')).to_not be_nil
142
+ expect(Locale.new('en_VI').display_name('ccp')).to_not be_nil
143
+ expect(Locale.new('yue_Hant').display_script('ccp')).to_not be_nil
144
+ expect(Locale.new('en_US_POSIX').display_variant('sl')).to_not be_nil
133
145
  end
134
146
  end
135
147
 
@@ -137,23 +149,23 @@ module ICU
137
149
  let(:locale) { Locale.new('de_DE') }
138
150
 
139
151
  it 'returns the country' do
140
- locale.display_country.should == locale.display_country(Locale.default)
152
+ expect(locale.display_country).to eq(locale.display_country(Locale.default))
141
153
  end
142
154
 
143
155
  it 'returns the language' do
144
- locale.display_language.should == locale.display_language(Locale.default)
156
+ expect(locale.display_language).to eq(locale.display_language(Locale.default))
145
157
  end
146
158
 
147
159
  it 'returns the name' do
148
- locale.display_name.should == locale.display_name(Locale.default)
160
+ expect(locale.display_name).to eq(locale.display_name(Locale.default))
149
161
  end
150
162
 
151
163
  it 'returns the script' do
152
- locale.display_script.should == locale.display_script(Locale.default)
164
+ expect(locale.display_script).to eq(locale.display_script(Locale.default))
153
165
  end
154
166
 
155
167
  it 'returns the variant' do
156
- locale.display_variant.should == locale.display_variant(Locale.default)
168
+ expect(locale.display_variant).to eq(locale.display_variant(Locale.default))
157
169
  end
158
170
  end
159
171
  end
@@ -161,26 +173,26 @@ module ICU
161
173
  describe 'formatting' do
162
174
  let(:locale) { Locale.new('de-de.utf8@collation = phonebook') }
163
175
 
164
- it('is formatted') { locale.name.should == 'de_DE.utf8@collation=phonebook' }
165
- it('is formatted without keywords') { locale.base_name.should == 'de_DE.utf8' }
166
- it('is formatted for ICU') { locale.canonical.should == 'de_DE@collation=phonebook' }
176
+ it('is formatted') { expect(locale.name).to eq('de_DE.utf8@collation=phonebook') }
177
+ it('is formatted without keywords') { expect(locale.base_name).to eq('de_DE.utf8') }
178
+ it('is formatted for ICU') { expect(locale.canonical).to eq('de_DE@collation=phonebook') }
167
179
  end
168
180
 
169
181
  it 'truncates a properly formatted locale, returning the "parent"' do
170
- Locale.new('es-mx').parent.should == ''
171
- Locale.new('es_MX').parent.should == 'es'
172
- Locale.new('zh_Hans_CH_PINYIN').parent.should == 'zh_Hans_CH'
182
+ expect(Locale.new('es-mx').parent).to eq('')
183
+ expect(Locale.new('es_MX').parent).to eq('es')
184
+ expect(Locale.new('zh_Hans_CH_PINYIN').parent).to eq('zh_Hans_CH')
173
185
  end
174
186
 
175
187
  describe 'ISO codes' do
176
188
  it 'returns the ISO 3166 alpha-3 country code' do
177
- Locale.new('en_US').iso_country.should == 'USA'
178
- Locale.new('zh_CN').iso_country.should == 'CHN'
189
+ expect(Locale.new('en_US').iso_country).to eq('USA')
190
+ expect(Locale.new('zh_CN').iso_country).to eq('CHN')
179
191
  end
180
192
 
181
193
  it 'returns the ISO 639 three-letter language code' do
182
- Locale.new('en_US').iso_language.should == 'eng'
183
- Locale.new('zh_CN').iso_language.should == 'zho'
194
+ expect(Locale.new('en_US').iso_language).to eq('eng')
195
+ expect(Locale.new('zh_CN').iso_language).to eq('zho')
184
196
  end
185
197
  end
186
198
 
@@ -197,64 +209,64 @@ module ICU
197
209
  let(:locale) { Locale.new('de_DE@currency=EUR') }
198
210
 
199
211
  it 'returns the list of keywords' do
200
- locale.keywords.should == ['currency']
212
+ expect(locale.keywords).to eq(['currency'])
201
213
  end
202
214
  end
203
215
 
204
216
  it 'can be read' do
205
- Locale.new('en_US@calendar=chinese').keyword('calendar').should == 'chinese'
206
- Locale.new('en_US@calendar=chinese').keyword(:calendar).should == 'chinese'
207
- Locale.new('en_US@some=thing').keyword('missing').should == ''
217
+ expect(Locale.new('en_US@calendar=chinese').keyword('calendar')).to eq('chinese')
218
+ expect(Locale.new('en_US@calendar=chinese').keyword(:calendar)).to eq('chinese')
219
+ expect(Locale.new('en_US@some=thing').keyword('missing')).to eq('')
208
220
  end
209
221
 
210
222
  it 'can be added' do
211
- Locale.new('de_DE').with_keyword('currency', 'EUR').should == Locale.new('de_DE@currency=EUR')
212
- Locale.new('de_DE').with_keyword(:currency, :EUR).should == Locale.new('de_DE@currency=EUR')
223
+ expect(Locale.new('de_DE').with_keyword('currency', 'EUR')).to eq(Locale.new('de_DE@currency=EUR'))
224
+ expect(Locale.new('de_DE').with_keyword(:currency, :EUR)).to eq(Locale.new('de_DE@currency=EUR'))
213
225
  end
214
226
 
215
227
  it 'can be added using hash' do
216
- Locale.new('fr').with_keywords(:a => :b, :c => :d).should == Locale.new('fr@a=b;c=d')
228
+ expect(Locale.new('fr').with_keywords(:a => :b, :c => :d)).to eq(Locale.new('fr@a=b;c=d'))
217
229
  end
218
230
 
219
231
  it 'can be removed' do
220
- Locale.new('en_US@some=thing').with_keyword(:some, nil).should == Locale.new('en_US')
221
- Locale.new('en_US@some=thing').with_keyword(:some, '').should == Locale.new('en_US')
232
+ expect(Locale.new('en_US@some=thing').with_keyword(:some, nil)).to eq(Locale.new('en_US'))
233
+ expect(Locale.new('en_US@some=thing').with_keyword(:some, '')).to eq(Locale.new('en_US'))
222
234
  end
223
235
  end
224
236
 
225
237
  describe 'orientation' do
226
238
  it 'returns the character orientation' do
227
- Locale.new('ar').character_orientation.should == :rtl
228
- Locale.new('en').character_orientation.should == :ltr
229
- Locale.new('fa').character_orientation.should == :rtl
239
+ expect(Locale.new('ar').character_orientation).to eq(:rtl)
240
+ expect(Locale.new('en').character_orientation).to eq(:ltr)
241
+ expect(Locale.new('fa').character_orientation).to eq(:rtl)
230
242
  end
231
243
 
232
244
  it 'returns the line orientation' do
233
- Locale.new('ar').line_orientation.should == :ttb
234
- Locale.new('en').line_orientation.should == :ttb
235
- Locale.new('fa').line_orientation.should == :ttb
245
+ expect(Locale.new('ar').line_orientation).to eq(:ttb)
246
+ expect(Locale.new('en').line_orientation).to eq(:ttb)
247
+ expect(Locale.new('fa').line_orientation).to eq(:ttb)
236
248
  end
237
249
  end
238
250
 
239
251
  describe 'subtags' do
240
252
  let(:locale) { Locale.new('zh-hans-ch-pinyin') }
241
253
 
242
- it('returns the country code') { locale.country.should == 'CH' }
243
- it('returns the language code') { locale.language.should == 'zh' }
244
- it('returns the script code') { locale.script.should == 'Hans' }
245
- it('returns the variant code') { locale.variant.should == 'PINYIN' }
254
+ it('returns the country code') { expect(locale.country).to eq('CH') }
255
+ it('returns the language code') { expect(locale.language).to eq('zh') }
256
+ it('returns the script code') { expect(locale.script).to eq('Hans') }
257
+ it('returns the variant code') { expect(locale.variant).to eq('PINYIN') }
246
258
 
247
259
  describe 'likely subtags according to UTS #35' do
248
260
  it 'adds likely subtags' do
249
- Locale.new('en').with_likely_subtags.should == Locale.new('en_Latn_US')
250
- Locale.new('sr').with_likely_subtags.should == Locale.new('sr_Cyrl_RS')
251
- Locale.new('zh_TW').with_likely_subtags.should == Locale.new('zh_Hant_TW')
261
+ expect(Locale.new('en').with_likely_subtags).to eq(Locale.new('en_Latn_US'))
262
+ expect(Locale.new('sr').with_likely_subtags).to eq(Locale.new('sr_Cyrl_RS'))
263
+ expect(Locale.new('zh_TW').with_likely_subtags).to eq(Locale.new('zh_Hant_TW'))
252
264
  end
253
265
 
254
266
  it 'removes likely subtags' do
255
- Locale.new('en_US').with_minimized_subtags.should == Locale.new('en')
256
- Locale.new('sr_RS').with_minimized_subtags.should == Locale.new('sr')
257
- Locale.new('zh_Hant_TW').with_minimized_subtags.should == Locale.new('zh_TW')
267
+ expect(Locale.new('en_US').with_minimized_subtags).to eq(Locale.new('en'))
268
+ expect(Locale.new('sr_RS').with_minimized_subtags).to eq(Locale.new('sr'))
269
+ expect(Locale.new('zh_Hant_TW').with_minimized_subtags).to eq(Locale.new('zh_TW'))
258
270
  end
259
271
  end
260
272
  end