From 8b8981494da207ab27a4231e4e1728a93e4076f0 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Wed, 19 Sep 2018 23:00:17 -0600 Subject: [PATCH] Trying to get exaples to map to their given values --- src/spectator/dsl/structure_dsl.cr | 35 +++++++++++++++++++++++++++- src/spectator/given_example_group.cr | 14 +++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/spectator/dsl/structure_dsl.cr b/src/spectator/dsl/structure_dsl.cr index 3719dca..ff11170 100644 --- a/src/spectator/dsl/structure_dsl.cr +++ b/src/spectator/dsl/structure_dsl.cr @@ -30,8 +30,41 @@ module Spectator module Given%given include {{@type.id}} + def %collection + {{collection}} + end + + def %first + %collection.first + end + + def %group + ::Spectator::Definitions::GROUPS[\{{@type.symbolize}}].as( + GivenExampleGroup(typeof(%first))) + end + + def %value + %group.value_for(self) + end + + def %dup + if (value = %value).responds_to?(:clone) + value.clone + else + value.dup + end + end + + @%wrapper : ValueWrapper? + def {{block.args.empty? ? "value".id : block.args.first}} - nil # TODO + if (wrapper = @%wrapper) + wrapper.unsafe_as(TypedValueWrapper(typeof(%value))).value + else + %dup.tap do |value| + @%wrapper = TypedValueWrapper(typeof(%value)).new(value) + end + end end _given_collection Collection%collection, %to_a do diff --git a/src/spectator/given_example_group.cr b/src/spectator/given_example_group.cr index 424b2f8..fb61b5d 100644 --- a/src/spectator/given_example_group.cr +++ b/src/spectator/given_example_group.cr @@ -2,14 +2,24 @@ require "./example_group" module Spectator class GivenExampleGroup(T) < ExampleGroup + @mapping = {} of Example => T + def initialize(what, @collection : Array(T), parent = nil) super(what, parent) end protected def add_examples(array : Array(Example)) - @collection.each do |item| - super(array) + @collection.each do |value| + examples = super.all_examples + examples.each do |example| + @mapping[example] = value + end + array.concat(examples) end end + + def value_for(example : Example) : T + @mapping[example] + end end end