From 5cb7e3156507e000c747aab0b981e9ee2bb636c5 Mon Sep 17 00:00:00 2001 From: Christian Neukirchen Date: Thu, 31 May 2007 14:17:40 +0200 Subject: Import test-suite darcs-hash:20070531121740-4fc50-b6b4850987e9d2a4b368d1b096837585b1e7a181.gz --- test/spec_bacon.rb | 260 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 test/spec_bacon.rb (limited to 'test') diff --git a/test/spec_bacon.rb b/test/spec_bacon.rb new file mode 100644 index 0000000..f599a7b --- /dev/null +++ b/test/spec_bacon.rb @@ -0,0 +1,260 @@ +$: << File.dirname(__FILE__) + '/../lib/' +require 'bacon' + +# Hooray for meta-testing. +module MetaTests + def succeed + lambda { |block| + block.should.not.raise Bacon::Error + true + } + end + + def fail + lambda { |block| + block.should.raise Bacon::Error + true + } + end + + def equal_string(x) + lambda { |s| + x == s.to_s + } + end +end + +describe "Bacon" do + extend MetaTests + + it "should have should.satisfy" do + lambda { should.satisfy { 1 == 1 } }.should succeed + lambda { should.satisfy { 1 } }.should succeed + + lambda { should.satisfy { 1 == 2 } }.should fail + lambda { should.satisfy { false } }.should fail + lambda { should.satisfy { false } }.should fail + + lambda { 1.should.satisfy { |n| n % 2 == 0 } }.should fail + lambda { 2.should.satisfy { |n| n % 2 == 0 } }.should succeed + end + + it "should have should.equal" do + lambda { "string1".should == "string1" }.should succeed + lambda { "string1".should == "string2" }.should fail + lambda { "1".should == 1 }.should fail + + lambda { "string1".should.equal "string1" }.should succeed + lambda { "string1".should.equal "string2" }.should fail + lambda { "1".should.equal 1 }.should fail + end + + it "should have should.raise" do + lambda { lambda { raise "Error" }.should.raise }.should succeed + lambda { lambda { raise "Error" }.should.raise RuntimeError }.should succeed + lambda { lambda { raise "Error" }.should.not.raise }.should fail + lambda { lambda { raise "Error" }.should.not.raise(RuntimeError) }.should fail + + lambda { lambda { 1 + 1 }.should.raise }.should fail + lambda { + lambda { raise "Error" }.should.raise(Interrupt) + }.should.raise + end + + it "should have should.raise with a block" do + lambda { should.raise { raise "Error" } }.should succeed + lambda { should.raise(RuntimeError) { raise "Error" } }.should succeed + lambda { should.not.raise { raise "Error" } }.should fail + lambda { should.not.raise(RuntimeError) { raise "Error" } }.should fail + + lambda { should.raise { 1 + 1 } }.should fail + lambda { + should.raise(Interrupt) { raise "Error" } + }.should.raise + end + + it "should have a should.raise should return the exception" do + ex = lambda { raise "foo!" }.should.raise + ex.should.be.kind_of RuntimeError + ex.message.should =~ /foo/ + end + + it "should have should.be.an.instance_of" do + lambda { "string".should.be.instance_of String }.should succeed + lambda { "string".should.be.instance_of Hash }.should fail + + lambda { "string".should.be.an.instance_of String }.should succeed + lambda { "string".should.be.an.instance_of Hash }.should fail + end + + it "should have should.be.nil" do + lambda { nil.should.be.nil }.should succeed + lambda { nil.should.not.be.nil }.should fail + lambda { "foo".should.be.nil }.should fail + lambda { "foo".should.not.be.nil }.should succeed + end + + it "should have should.include" do + lambda { [1,2,3].should.include 2 }.should succeed + lambda { [1,2,3].should.include 4 }.should fail + + lambda { {1=>2, 3=>4}.should.include 1 }.should succeed + lambda { {1=>2, 3=>4}.should.include 2 }.should fail + end + + it "should have should.be.a.kind_of" do + lambda { Array.should.be.kind_of Module }.should succeed + lambda { "string".should.be.kind_of Object }.should succeed + lambda { 1.should.be.kind_of Comparable }.should succeed + + lambda { Array.should.be.a.kind_of Module }.should succeed + + lambda { "string".should.be.a.kind_of Class }.should fail + end + + it "should have should.match" do + lambda { "string".should.match(/strin./) }.should succeed + lambda { "string".should =~ /strin./ }.should succeed + + lambda { "string".should.match(/slin./) }.should fail + lambda { "string".should =~ /slin./ }.should fail + end + + it "should have should.not.raise" do + lambda { lambda { 1 + 1 }.should.not.raise }.should succeed + lambda { lambda { 1 + 1 }.should.not.raise(Interrupt) }.should succeed + + lambda { + lambda { + lambda { + Kernel.raise ZeroDivisionError.new("ArgumentError") + }.should.not.raise(RuntimeError, Comparable) + }.should.raise ZeroDivisionError + }.should succeed + + lambda { lambda { raise "Error" }.should.not.raise }.should fail + end + + it "should have should.not.satisfy" do + lambda { should.not.satisfy { 1 == 2 } }.should succeed + lambda { should.not.satisfy { 1 == 1 } }.should fail + end + + it "should have should.not.equal" do + lambda { "string1".should.not == "string2" }.should succeed + lambda { "string1".should.not == "string1" }.should fail + end + + it "should have should.not.match" do + lambda { "string".should.not.match(/sling/) }.should succeed + lambda { "string".should.not.match(/string/) }.should fail +# lambda { "string".should.not.match("strin") }.should fail + + lambda { "string".should.not =~ /sling/ }.should succeed + lambda { "string".should.not =~ /string/ }.should fail +# lambda { "string".should.not =~ "strin" }.should fail + end + + it "should have should.respond_to" do + lambda { "foo".should.respond_to :to_s }.should succeed + lambda { 5.should.respond_to :to_str }.should fail + lambda { :foo.should.respond_to :nx }.should fail + end + + it "should have should.be.close" do + lambda { 1.4.should.be.close 1.4, 0 }.should succeed + lambda { 0.4.should.be.close 0.5, 0.1 }.should succeed + + lambda { 0.4.should.be.close 0.5, 0.05 }.should fail + lambda { 0.4.should.be.close Object.new, 0.1 }.should fail + lambda { 0.4.should.be.close 0.5, -0.1 }.should fail + end + + it "should support multiple negation" do + lambda { 1.should.equal 1 }.should succeed + lambda { 1.should.not.equal 1 }.should fail + lambda { 1.should.not.not.equal 1 }.should succeed + lambda { 1.should.not.not.not.equal 1 }.should fail + + lambda { 1.should.equal 2 }.should fail + lambda { 1.should.not.equal 2 }.should succeed + lambda { 1.should.not.not.equal 2 }.should fail + lambda { 1.should.not.not.not.equal 2 }.should succeed + end + + it "should have should." do + lambda { [].should.be.empty }.should succeed + lambda { [1,2,3].should.not.be.empty }.should succeed + + lambda { [].should.not.be.empty }.should fail + lambda { [1,2,3].should.be.empty }.should fail + + lambda { {1=>2, 3=>4}.should.has_key 1 }.should succeed + lambda { {1=>2, 3=>4}.should.not.has_key 2 }.should succeed + + lambda { nil.should.bla }.should.raise(NoMethodError) + lambda { nil.should.not.bla }.should.raise(NoMethodError) + end + + it "should have should (>, >=, <, <=, ===)" do + lambda { 2.should.be > 1 }.should succeed + lambda { 1.should.be > 2 }.should fail + + lambda { 1.should.be < 2 }.should succeed + lambda { 2.should.be < 1 }.should fail + + lambda { 2.should.be >= 1 }.should succeed + lambda { 2.should.be >= 2 }.should succeed + lambda { 2.should.be >= 2.1 }.should fail + + lambda { 2.should.be <= 1 }.should fail + lambda { 2.should.be <= 2 }.should succeed + lambda { 2.should.be <= 2.1 }.should succeed + + lambda { Array.should === [1,2,3] }.should succeed + lambda { Integer.should === [1,2,3] }.should fail + + lambda { /foo/.should === "foobar" }.should succeed + lambda { "foobar".should === /foo/ }.should fail + end + + it "should allow for custom shoulds" do + lambda { (1+1).should equal_string("2") }.should succeed + lambda { (1+2).should equal_string("2") }.should fail + + lambda { (1+1).should.be equal_string("2") }.should succeed + lambda { (1+2).should.be equal_string("2") }.should fail + + lambda { (1+1).should.not equal_string("2") }.should fail + lambda { (1+2).should.not equal_string("2") }.should succeed + lambda { (1+2).should.not.not equal_string("2") }.should fail + + lambda { (1+1).should.not.be equal_string("2") }.should fail + lambda { (1+2).should.not.be equal_string("2") }.should succeed + end +end + +describe "before/after" do + before do + @a = 1 + @b = 2 + end + + before do + @a = 2 + end + + after do + @a.should.equal 2 + @a = 3 + end + + after do + @a.should.equal 3 + end + + it "should run in the right order" do + @a.should.equal 2 + @b.should.equal 2 + end +end -- cgit 1.4.1