From 688c08b087098b7861959bf03128a85cb51ee280 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Sat, 7 Nov 2020 22:04:37 -0700 Subject: [PATCH] Initial work on hooks rework --- src/spectator/dsl/hooks.cr | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/spectator/dsl/hooks.cr b/src/spectator/dsl/hooks.cr index bd65db3..c6c6154 100644 --- a/src/spectator/dsl/hooks.cr +++ b/src/spectator/dsl/hooks.cr @@ -1,5 +1,39 @@ -module Spectator - module DSL +module Spectator::DSL + # DSL methods for adding custom logic to key times of the spec execution. + module Hooks + # Defines code to run before any and all examples in an example group. + macro before_all(&block) + {% raise "Cannot use 'before_all' inside of a test block" if @def %} + + def self.%hook : Nil + {{block.body}} + end + + ::Spectator::DSL::Builder.add_hook( + :before + ) { {{@type.name}.%hook } + end + + macro before_each(&block) + {% raise "Cannot use 'before_each' inside of a test block" if @def %} + + def %hook : Nil + {{block.body}} + end + + ::Spectator::DSL::Builder.add_context_hook( + :before, + {{@type.name}} + ) { |context| context.as({{@type.name}).%hook } + end + + macro after_all(&block) + end + + macro after_each(&block) + end + end + macro before_each(&block) def %hook({{block.args.splat}}) : Nil {{block.body}}