mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Intercept most exit calls and raise instead
This commit is contained in:
parent
3c9c7f88be
commit
754bfd6939
4 changed files with 43 additions and 15 deletions
|
@ -7,14 +7,9 @@ Spectator.describe "GitHub Issue #29" do
|
|||
end
|
||||
end
|
||||
|
||||
# mock SomeClass do
|
||||
# inject_stub abstract def exit(code)
|
||||
# end
|
||||
|
||||
describe SomeClass do
|
||||
xit "captures exit", pending: "Mock redesign" do
|
||||
expect(subject).to receive(:exit).with(0)
|
||||
subject.goodbye
|
||||
it "captures exit" do
|
||||
expect { subject.goodbye }.to raise_error(Spectator::SystemExit)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -25,16 +20,10 @@ Spectator.describe "GitHub Issue #29" do
|
|||
end
|
||||
end
|
||||
|
||||
# mock Foo do
|
||||
# inject_stub abstract def self.exit(code)
|
||||
# end
|
||||
|
||||
subject { Foo }
|
||||
|
||||
xit "must capture exit", pending: "Mock redesign" do
|
||||
expect(subject).to receive(:exit).with(0)
|
||||
|
||||
subject.test
|
||||
it "must capture exit" do
|
||||
expect { subject.test }.to raise_error(Spectator::SystemExit)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
13
spec/spectator/system_exit_spec.cr
Normal file
13
spec/spectator/system_exit_spec.cr
Normal file
|
@ -0,0 +1,13 @@
|
|||
require "../spec_helper"
|
||||
|
||||
Spectator.describe Spectator::SystemExit do
|
||||
it "is raised when an attempt is made to exit the application" do
|
||||
expect { exit }.to raise_error(described_class)
|
||||
end
|
||||
|
||||
it "has the status code passed to an exit call" do
|
||||
exit 5
|
||||
rescue error : Spectator::SystemExit
|
||||
expect(error.status).to eq(5)
|
||||
end
|
||||
end
|
|
@ -51,6 +51,7 @@ require "./runner_events"
|
|||
require "./runner"
|
||||
require "./spec_builder"
|
||||
require "./spec"
|
||||
require "./system_exit"
|
||||
require "./tag_node_filter"
|
||||
require "./test_context"
|
||||
require "./value"
|
||||
|
|
25
src/spectator/system_exit.cr
Normal file
25
src/spectator/system_exit.cr
Normal file
|
@ -0,0 +1,25 @@
|
|||
module Spectator
|
||||
# Indicates a call to exit the application was performed.
|
||||
class SystemExit < Exception
|
||||
# Status code passed to the exit call.
|
||||
getter status : Int32
|
||||
|
||||
# Creates the exception.
|
||||
def initialize(message : String? = nil, cause : Exception? = nil, @status : Int32 = 0)
|
||||
super(message, cause)
|
||||
end
|
||||
end
|
||||
|
||||
# Allow Spectator to exit normally when needed.
|
||||
private def self.exit(status = 0) : NoReturn
|
||||
::Crystal::System::Process.exit(status)
|
||||
end
|
||||
end
|
||||
|
||||
class Process
|
||||
# Replace the typically used exit method with a method that raises.
|
||||
# This allows tests to catch attempts to exit the application.
|
||||
def self.exit(status = 0) : NoReturn
|
||||
raise ::Spectator::SystemExit.new(status: status)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue