summaryrefslogtreecommitdiff
path: root/spec/ruby/library/scanf/io
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/library/scanf/io')
-rw-r--r--spec/ruby/library/scanf/io/block_scanf_spec.rb7
-rw-r--r--spec/ruby/library/scanf/io/fixtures/date.txt4
-rw-r--r--spec/ruby/library/scanf/io/fixtures/helloworld.txt1
-rw-r--r--spec/ruby/library/scanf/io/scanf_spec.rb35
-rw-r--r--spec/ruby/library/scanf/io/shared/block_scanf.rb28
5 files changed, 75 insertions, 0 deletions
diff --git a/spec/ruby/library/scanf/io/block_scanf_spec.rb b/spec/ruby/library/scanf/io/block_scanf_spec.rb
new file mode 100644
index 0000000000..0f6188f91c
--- /dev/null
+++ b/spec/ruby/library/scanf/io/block_scanf_spec.rb
@@ -0,0 +1,7 @@
+require File.expand_path('../../../../spec_helper', __FILE__)
+require File.expand_path('../shared/block_scanf.rb', __FILE__)
+require 'scanf'
+
+describe "IO#block_scanf" do
+ it_behaves_like(:scanf_io_block_scanf, :block_scanf)
+end
diff --git a/spec/ruby/library/scanf/io/fixtures/date.txt b/spec/ruby/library/scanf/io/fixtures/date.txt
new file mode 100644
index 0000000000..a1bd635c0c
--- /dev/null
+++ b/spec/ruby/library/scanf/io/fixtures/date.txt
@@ -0,0 +1,4 @@
+Beethoven 1770
+Bach 1685
+Handel 1685
+
diff --git a/spec/ruby/library/scanf/io/fixtures/helloworld.txt b/spec/ruby/library/scanf/io/fixtures/helloworld.txt
new file mode 100644
index 0000000000..3b18e512db
--- /dev/null
+++ b/spec/ruby/library/scanf/io/fixtures/helloworld.txt
@@ -0,0 +1 @@
+hello world
diff --git a/spec/ruby/library/scanf/io/scanf_spec.rb b/spec/ruby/library/scanf/io/scanf_spec.rb
new file mode 100644
index 0000000000..27c3142678
--- /dev/null
+++ b/spec/ruby/library/scanf/io/scanf_spec.rb
@@ -0,0 +1,35 @@
+require File.expand_path('../../../../spec_helper', __FILE__)
+require File.expand_path('../shared/block_scanf.rb', __FILE__)
+require 'scanf'
+
+describe "IO#scanf" do
+ before :each do
+ @hw = File.open(File.dirname(__FILE__) + '/fixtures/helloworld.txt', 'r')
+ @data = File.open(File.dirname(__FILE__) + '/fixtures/date.txt', 'r')
+ end
+
+ after :each do
+ @hw.close unless @hw.closed?
+ @data.close unless @data.closed?
+ end
+
+ it "returns an array containing the input converted in the specified type" do
+ @hw.scanf("%s%s").should == ["hello", "world"]
+ @data.scanf("%s%d").should == ["Beethoven", 1770]
+ end
+
+ it "returns an array containing the input converted in the specified type with given maximum field width" do
+ @hw.scanf("%2s").should == ["he"]
+ @data.scanf("%2c").should == ["Be"]
+ end
+
+ it "returns an empty array when a wrong specifier is passed" do
+ @hw.scanf("%a").should == []
+ @hw.scanf("%1").should == []
+ @data.scanf("abc").should == []
+ end
+end
+
+describe "IO#scanf with block" do
+ it_behaves_like(:scanf_io_block_scanf, :scanf)
+end
diff --git a/spec/ruby/library/scanf/io/shared/block_scanf.rb b/spec/ruby/library/scanf/io/shared/block_scanf.rb
new file mode 100644
index 0000000000..8c5bffb93b
--- /dev/null
+++ b/spec/ruby/library/scanf/io/shared/block_scanf.rb
@@ -0,0 +1,28 @@
+require 'scanf'
+
+describe :scanf_io_block_scanf, shared: true do
+ before :each do
+ @data= File.open(File.dirname(__FILE__) + '/../fixtures/date.txt', 'r')
+ end
+
+ after :each do
+ @data.close unless @data.closed?
+ end
+
+ it "passes each match to the block as an array" do
+ res = @data.send(@method, "%s%d") { |name, year| "#{name} was born in #{year}." }
+ res.should == ["Beethoven was born in 1770.", "Bach was born in 1685.", "Handel was born in 1685."]
+ end
+
+ it "keeps scanning the input and cycling back to the beginning of the input string" do
+ a = []
+ @data.send(@method, "%s"){|w| a << w}
+ a.should == [["Beethoven"], ["1770"], ["Bach"], ["1685"], ["Handel"], ["1685"]]
+ end
+
+ it "returns an empty array when a wrong specifier is passed" do
+ a = []
+ @data.send(@method, "%z"){|w| a << w}
+ a.empty?.should be_true
+ end
+end