diff options
author | Benoit Daloze <eregontp@gmail.com> | 2019-09-29 16:03:58 +0200 |
---|---|---|
committer | Benoit Daloze <eregontp@gmail.com> | 2019-09-29 16:03:58 +0200 |
commit | 1c938a72aa9378f982dbc55327e86150c47b8707 (patch) | |
tree | 34a0bb0a45396c26eed111877a810c3aa793bff5 /spec/ruby/library/scanf/string | |
parent | 31bb66a19df26409c9d47afcf37919c9a065516a (diff) |
Update to ruby/spec@519df35
Diffstat (limited to 'spec/ruby/library/scanf/string')
-rw-r--r-- | spec/ruby/library/scanf/string/block_scanf_spec.rb | 10 | ||||
-rw-r--r-- | spec/ruby/library/scanf/string/scanf_spec.rb | 56 | ||||
-rw-r--r-- | spec/ruby/library/scanf/string/shared/block_scanf.rb | 25 |
3 files changed, 91 insertions, 0 deletions
diff --git a/spec/ruby/library/scanf/string/block_scanf_spec.rb b/spec/ruby/library/scanf/string/block_scanf_spec.rb new file mode 100644 index 0000000000..277e1fa1d7 --- /dev/null +++ b/spec/ruby/library/scanf/string/block_scanf_spec.rb @@ -0,0 +1,10 @@ +require_relative '../../../spec_helper' + +ruby_version_is ''...'2.7' do + require_relative 'shared/block_scanf' + require 'scanf' + + describe "String#block_scanf" do + it_behaves_like :scanf_string_block_scanf, :block_scanf + end +end diff --git a/spec/ruby/library/scanf/string/scanf_spec.rb b/spec/ruby/library/scanf/string/scanf_spec.rb new file mode 100644 index 0000000000..c8897db675 --- /dev/null +++ b/spec/ruby/library/scanf/string/scanf_spec.rb @@ -0,0 +1,56 @@ +require_relative '../../../spec_helper' + +ruby_version_is ''...'2.7' do + require_relative 'shared/block_scanf' + require 'scanf' + + describe "String#scanf" do + it "returns an array containing the input converted in the specified type" do + "hello world".scanf("%s").should == ["hello"] + "hello world".scanf("%s%d").should == ["hello"] + "hello world".scanf("%s%c").should == ["hello", " "] + "hello world".scanf("%c%s").should == ["h", "ello"] + "hello world".scanf("%s%s").should == ["hello", "world"] + "hello world".scanf("%c").should == ["h"] + "123".scanf("%s").should == ["123"] + "123".scanf("%c").should == ["1"] + "123".scanf("%d").should == [123] + "123".scanf("%u").should == [123] + "123".scanf("%o").should == [83] + "123".scanf("%x").should == [291] + "123".scanf("%i").should == [123] + "0123".scanf("%i").should == [83] + "123".scanf("%f").should == [123.0] + "0X123".scanf("%i").should == [291] + "0x123".scanf("%i").should == [291] + end + + it "returns an array containing the input converted in the specified type with given maximum field width" do + "hello world".scanf("%2s").should == ["he"] + "hello world".scanf("%2c").should == ["he"] + "123".scanf("%2s").should == ["12"] + "123".scanf("%2c").should == ["12"] + "123".scanf("%2d").should == [12] + "123".scanf("%2u").should == [12] + "123".scanf("%2o").should == [10] + "123".scanf("%2x").should == [18] + "123".scanf("%2i").should == [12] + "0123".scanf("%2i").should == [1] + "123".scanf("%2f").should == [12.0] + "0X123".scanf("%2i").should == [0] + "0X123".scanf("%3i").should == [1] + "0X123".scanf("%4i").should == [18] + end + + it "returns an empty array when a wrong specifier is passed" do + "hello world".scanf("%a").should == [] + "123".scanf("%1").should == [] + "123".scanf("abc").should == [] + "123".scanf(:d).should == [] + end + end + + describe "String#scanf with block" do + it_behaves_like :scanf_string_block_scanf, :scanf + end +end diff --git a/spec/ruby/library/scanf/string/shared/block_scanf.rb b/spec/ruby/library/scanf/string/shared/block_scanf.rb new file mode 100644 index 0000000000..25ab3f442a --- /dev/null +++ b/spec/ruby/library/scanf/string/shared/block_scanf.rb @@ -0,0 +1,25 @@ +require 'scanf' + +describe :scanf_string_block_scanf, shared: true do + it "passes each match to the block as an array" do + a = [] + "hello world".send(@method, "%s%s"){|w| a << w} + a.should == [["hello", "world"]] + end + + it "keeps scanning the input and cycling back to the beginning of the input string" do + a = [] + "hello world".send(@method, "%s"){|w| a << w} + a.should == [["hello"], ["world"]] + + string = "123 abc 456 def 789 ghi" + s = string.send(@method, "%d%s"){|num,str| [num * 2, str.upcase]} + s.should == [[246, "ABC"], [912, "DEF"], [1578, "GHI"]] + end + + it "returns an empty array when a wrong specifier is passed" do + a = [] + "hello world".send(@method, "%z"){|w| a << w} + a.empty?.should be_true + end +end |