From 2070d7816bee7de32290a39ef78a68bdcdcd4fee Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Sun, 14 Oct 2018 14:28:05 -0600 Subject: [PATCH] Root example group specialization --- src/spectator/dsl/builder.cr | 8 +++----- src/spectator/dsl/root_example_group_builder.cr | 15 +++++++++++++++ src/spectator/includes.cr | 1 + src/spectator/root_example_group.cr | 13 +++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 src/spectator/dsl/root_example_group_builder.cr create mode 100644 src/spectator/root_example_group.cr diff --git a/src/spectator/dsl/builder.cr b/src/spectator/dsl/builder.cr index d567851..95c71bd 100644 --- a/src/spectator/dsl/builder.cr +++ b/src/spectator/dsl/builder.cr @@ -2,11 +2,9 @@ module Spectator::DSL module Builder extend self - @@group_stack = [::Spectator::DSL::ExampleGroupBuilder.new("ROOT")] + @@group_stack = Array(ExampleGroupBuilder).new(1, root_group) - private def root_group - @@group_stack.first - end + private class_getter root_group = RootExampleGroupBuilder.new() private def current_group @@group_stack.last @@ -57,7 +55,7 @@ module Spectator::DSL end protected def build : ExampleGroup - root_group.build(nil, Internals::SampleValues.empty) + root_group.build(Internals::SampleValues.empty) end end end diff --git a/src/spectator/dsl/root_example_group_builder.cr b/src/spectator/dsl/root_example_group_builder.cr new file mode 100644 index 0000000..8dfa78b --- /dev/null +++ b/src/spectator/dsl/root_example_group_builder.cr @@ -0,0 +1,15 @@ +module Spectator::DSL + class RootExampleGroupBuilder < ExampleGroupBuilder + def initialize + super("ROOT") + end + + def build(sample_values : Internals::SampleValues) : ExampleGroup + RootExampleGroup.new(build_hooks).tap do |group| + group.children = @children.map do |child| + child.build(group, sample_values).as(ExampleGroup::Child) + end + end + end + end +end diff --git a/src/spectator/includes.cr b/src/spectator/includes.cr index d133de5..e2b9e32 100644 --- a/src/spectator/includes.cr +++ b/src/spectator/includes.cr @@ -18,6 +18,7 @@ require "./pending_example" require "./example_hooks" require "./example_group" +require "./root_example_group" require "./expectation_failed" require "./test_results" diff --git a/src/spectator/root_example_group.cr b/src/spectator/root_example_group.cr new file mode 100644 index 0000000..b588b35 --- /dev/null +++ b/src/spectator/root_example_group.cr @@ -0,0 +1,13 @@ +require "./example_group" + +module Spectator + class RootExampleGroup < ExampleGroup + def initialize(hooks) + super("ROOT", nil, hooks) + end + + def to_s(io) + # ... + end + end +end