summaryrefslogtreecommitdiff
path: root/spec/ruby/library/scanf/string
diff options
context:
space:
mode:
authorBenoit Daloze <eregontp@gmail.com>2019-09-29 16:03:58 +0200
committerBenoit Daloze <eregontp@gmail.com>2019-09-29 16:03:58 +0200
commit1c938a72aa9378f982dbc55327e86150c47b8707 (patch)
tree34a0bb0a45396c26eed111877a810c3aa793bff5 /spec/ruby/library/scanf/string
parent31bb66a19df26409c9d47afcf37919c9a065516a (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.rb10
-rw-r--r--spec/ruby/library/scanf/string/scanf_spec.rb56
-rw-r--r--spec/ruby/library/scanf/string/shared/block_scanf.rb25
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