From 2aa7a75eea13e284cb2efb520506479c2c79a5cf Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Fri, 7 Dec 2018 22:05:23 -0700 Subject: [PATCH] Implement remaining hook error tests --- spec/runnable_example_spec.cr | 319 ++++++++++++++++++++-------------- 1 file changed, 191 insertions(+), 128 deletions(-) diff --git a/spec/runnable_example_spec.cr b/spec/runnable_example_spec.cr index 6827805..86bf6e5 100644 --- a/spec/runnable_example_spec.cr +++ b/spec/runnable_example_spec.cr @@ -179,134 +179,6 @@ describe Spectator::RunnableExample do calls.should eq(%i[a b]) end end - - context "when an error is raised in a before_all hook" do - it "raises the exception" do - hooks = new_hooks(before_all: ->{ raise "oops"; nil }) - expect_raises(Exception) do - run_example(PassingExample, hooks) - end - end - - it "doesn't run the test code" do - called = false - hooks = new_hooks(before_all: ->{ raise "oops"; nil }) - expect_raises(Exception) do - run_example(hooks) do - called = true - end - end - called.should be_false - end - - it "doesn't run any additional before_all hooks" do - called = false - hooks = new_hooks(before_all: [ - ->{ raise "oops"; nil }, - ->{ called = true; nil }, - ]) - expect_raises(Exception) do - run_example(PassingExample, hooks) - end - called.should be_false - end - - it "doesn't run any additional hooks" do - called = :none - hooks = new_hooks( - before_all: ->{ raise "oops"; nil }, - before_each: ->{ called = :before_each; nil }, - after_all: ->{ called = :after_all; nil }, - after_each: ->{ called = :after_each; nil }, - around_each: ->(proc : ->) { called = :around_each; proc.call }) - expect_raises(Exception) do - run_example(PassingExample, hooks) - end - called.should eq(:none) - end - end - - context "when an error is raised in a before_each hook" do - pending "returns an errored result" do - end - - pending "passes along the exception" do - end - - pending "doesn't run the test code" do - end - - pending "doesn't run any additional before_each hooks" do - end - - pending "doesn't run any around_each or after_each hooks" do - end - end - - context "when an error is raised in an after_all hook" do - it "raises the exception" do - hooks = new_hooks(before_all: ->{ raise "oops"; nil }) - expect_raises(Exception) do - run_example(PassingExample, hooks) - end - end - - it "doesn't run any additional after_all hooks" do - called = false - hooks = new_hooks(before_all: [ - ->{ raise "oops"; nil }, - ->{ called = true; nil }, - ]) - expect_raises(Exception) do - run_example(PassingExample, hooks) - end - called.should be_false - end - end - - context "when an error is raised in an after_each hook" do - pending "returns an errored result" do - end - - pending "passes along the exception" do - end - - pending "doesn't run any additional after_each hooks" do - end - - pending "doesn't run any after_all hooks" do - end - - context "with a failing result" do - pending "returns the original failure" do - end - end - - context "with an errored result" do - pending "returns the original error" do - end - end - end - - context "when an error is raised in an around_each hook" do - pending "raises the exception" do - end - - pending "doesn't run the test code" do - end - - pending "returns an errored result" do - end - - pending "passes along the exception" do - end - - pending "doesn't run any additional around_each hooks" do - end - - pending "doesn't run any after_each or after_all hooks" do - end - end end context "with a failing test" do @@ -628,6 +500,197 @@ describe Spectator::RunnableExample do end end end + + context "when an error is raised in a before_all hook" do + it "raises the exception" do + hooks = new_hooks(before_all: ->{ raise "oops"; nil }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + end + + it "doesn't run the test code" do + called = false + hooks = new_hooks(before_all: ->{ raise "oops"; nil }) + expect_raises(Exception) do + run_example(hooks) do + called = true + end + end + called.should be_false + end + + it "doesn't run any additional before_all hooks" do + called = false + hooks = new_hooks(before_all: [ + ->{ raise "oops"; nil }, + ->{ called = true; nil }, + ]) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should be_false + end + + it "doesn't run any additional hooks" do + called = :none + hooks = new_hooks( + before_all: ->{ raise "oops"; nil }, + before_each: ->{ called = :before_each; nil }, + after_all: ->{ called = :after_all; nil }, + after_each: ->{ called = :after_each; nil }, + around_each: ->(proc : ->) { called = :around_each; proc.call }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should eq(:none) + end + end + + context "when an error is raised in a before_each hook" do + it "raises the exception" do + hooks = new_hooks(before_each: ->{ raise "oops"; nil }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + end + + it "doesn't run the test code" do + called = false + hooks = new_hooks(before_each: ->{ raise "oops"; nil }) + expect_raises(Exception) do + run_example(hooks) do + called = true + end + end + called.should be_false + end + + it "doesn't run any additional before_each hooks" do + called = false + hooks = new_hooks(before_each: [ + ->{ raise "oops"; nil }, + ->{ called = true; nil }, + ]) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should be_false + end + + it "doesn't run any additional hooks" do + called = :none + hooks = new_hooks( + before_each: ->{ raise "oops"; nil }, + after_all: ->{ called = :after_all; nil }, + after_each: ->{ called = :after_each; nil }, + around_each: ->(proc : ->) { called = :around_each; proc.call }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should eq(:none) + end + end + + context "when an error is raised in an after_all hook" do + it "raises the exception" do + hooks = new_hooks(before_all: ->{ raise "oops"; nil }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + end + + it "doesn't run any additional after_all hooks" do + called = false + hooks = new_hooks(before_all: [ + ->{ raise "oops"; nil }, + ->{ called = true; nil }, + ]) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should be_false + end + end + + context "when an error is raised in an after_each hook" do + it "raises the exception" do + hooks = new_hooks(after_each: ->{ raise "oops"; nil }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + end + + it "doesn't run any additional after_each hooks" do + called = false + hooks = new_hooks(after_each: [ + ->{ raise "oops"; nil }, + ->{ called = true; nil }, + ]) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should be_false + end + + it "doesn't run any additional hooks" do + called = :none + hooks = new_hooks( + before_all: ->{ nil }, + before_each: ->{ nil }, + after_all: ->{ called = :after_all; nil }, + after_each: ->{ raise "oops"; nil }, + around_each: ->(proc : ->) { called = :around_each; proc.call }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should eq(:none) + end + end + + context "when an error is raised in an around_each hook" do + it "raises the exception" do + hooks = new_hooks(around_each: ->(proc : ->) { raise "oops"; proc.call }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + end + + it "doesn't run the test code" do + called = false + hooks = new_hooks(around_each: ->(proc : ->) { raise "oops"; proc.call }) + expect_raises(Exception) do + run_example(hooks) do + called = true + end + end + called.should be_false + end + + it "doesn't run any additional around_each hooks" do + called = false + hooks = new_hooks(around_each: [ + ->(proc : ->) { raise "oops"; proc.call }, + ->(proc : ->) { called = true; proc.call }, + ]) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should be_false + end + + it "doesn't run any additional hooks" do + called = :none + hooks = new_hooks( + after_all: ->{ called = :after_all; nil }, + after_each: ->{ called = :after_each; nil }, + around_each: ->(proc : ->) { raise "oops"; proc.call }) + expect_raises(Exception) do + run_example(PassingExample, hooks) + end + called.should eq(:none) + end + end end describe "#finished?" do