diff --git a/src/spectator/dsl/groups.cr b/src/spectator/dsl/groups.cr index 60571bf..dbf6d60 100644 --- a/src/spectator/dsl/groups.cr +++ b/src/spectator/dsl/groups.cr @@ -25,5 +25,26 @@ module Spectator macro describe(what, &block) context({{what}}) {{block}} end + + macro sample(what, &block) + {% block_arg = block.args.empty? ? :value.id : block.args.first.id %} + class Sample%sample < {{@type.id}} + def %collection + {{what}} + end + end + + class Context%sample < {{@type.id}} + ::Spectator::SpecBuilder.start_sample_group({{what.stringify}}) + + def {{block_arg}} + 1 + end + + {{block.body}} + + ::Spectator::SpecBuilder.end_group + end + end end end diff --git a/src/spectator/spec_builder/sample_example_group_builder.cr b/src/spectator/spec_builder/sample_example_group_builder.cr new file mode 100644 index 0000000..17a100e --- /dev/null +++ b/src/spectator/spec_builder/sample_example_group_builder.cr @@ -0,0 +1,26 @@ +require "./nested_example_group_builder" + +module Spectator::SpecBuilder + class SampleExampleGroupBuilder < NestedExampleGroupBuilder + def initialize(@what : String) + end + + def build(parent_group) + context = TestContext.new(parent_group.context, build_hooks) + NestedExampleGroup.new(@what, parent_group, context).tap do |group| + group.children = [:TODO].map do |element| + build_sub_group(group, element).as(ExampleComponent) + end + end + end + + private def build_sub_group(parent_group, element) + context = TestContext.new(parent_group.context, ExampleHooks.empty) + NestedExampleGroup.new("TODO", parent_group, context).tap do |group| + group.children = children.map do |child| + child.build(group).as(ExampleComponent) + end + end + end + end +end