lib/tryouts/drill/response.rb in tryouts-0.6.2 vs lib/tryouts/drill/response.rb in tryouts-0.6.3

- old
+ new

@@ -17,33 +17,89 @@ return false if reality.nil? ## I don't think this check is necessary or useful ##return false unless reality.error.nil? && reality.trace.nil? return true if reality.output == true and dream.nil? - - case dream.format - when :class - reality.output.class == dream.output - when :exception - reality.etype == dream.output - when :regex - !reality.output.match(dream.output).nil? - when :size - reality.output.size == dream.output - when :gt - reality.output > dream.output - when :gte - reality.output >= dream.output - when :lt - reality.output < dream.output - when :lte - reality.output <= dream.output - else - reality.output == dream.output + + begin + case dream.format + when :exception + reality.etype == dream.output + when :match + reality.output.respond_to?(:match) && + !reality.output.match(dream.output).nil? + when :gt + reality.output > dream.output + when :gte + reality.output >= dream.output + when :lt + reality.output < dream.output + when :lte + reality.output <= dream.output + when :ne + reality.output != dream.output + when :respond_to?, :kind_of?, :is_a? + reality.output.send(dream.format, dream.output) + else + + if dream.format.nil? + reality.output == dream.output + elsif reality.output.respond_to?(dream.format) + reality.output.send(dream.format) == dream.output + else + false + end + + end + rescue => ex + puts ex.message, ex.backtrace if Tryouts.debug? + reality.error, reality.trace, reality.etype = ex.message, ex.backtrace, ex.class + return false end + end + + def Response.compare_string(dream, reality) + return "[noreality]" if reality.nil? + if reality.output == true and dream.nil? + return "#{reality.output.inspect} == true" + end + + begin + case dream.format + when :exception + "#{reality.etype} == #{dream.output}" + when :match + "#{reality.output.inspect}.match(#{dream.output.inspect})" + when :gt, :gte, :lt, :lte, :ne + op = {:gt=>'>',:gte=>'>=', :lt=>'<', :lte => '<=', :ne => '!='}.find { |i| i[0] == dream.format } + "#{reality.output.inspect} #{op[1]} #{dream.output.inspect}" + when :respond_to? + "#{reality.output.class}.respond_to? #{dream.output.inspect}" + when :kind_of? + "#{reality.output.class}.kind_of? #{dream.output.inspect}" + when :is_a? + "#{reality.output.class}.is_a? #{dream.output.inspect}" + else + + if dream.format.nil? + "#{reality.output.inspect} == #{dream.output.inspect}" + elsif reality.output.respond_to?(dream.format) + "#{reality.output.inspect}.#{dream.format} == #{dream.output.inspect}" + else + "#{reality.output.inspect}.respond_to?(#{dream.format.inspect}) == false" + end + + end + rescue => ex + puts ex.message, ex.backtrace if Tryouts.debug? + reality.error, reality.trace, reality.etype = ex.message, ex.backtrace, ex.class + return "" + end + end + end # = Dream # @@ -69,12 +125,28 @@ lines.pop if lines.last.strip == "" lines end def ==(reality) - Response.compare(self, reality) + return @answer unless @answer.nil? + @answer = Response.compare(self, reality) end + + def test_to_string(reality) + return @test_string unless @test_string.nil? + @test_string = Response.compare_string(self, reality) + end + + def comparison_value + return @ret unless @ret.nil? + @ret = case @format + when :respond_to?, :is_a?, :kind_of? + true + else + @output + end + end end # = Reality # # Contains the actual response of a Drill @@ -90,9 +162,28 @@ @stash = Tryouts::HASH_TYPE.new end def ==(dream) Response.compare(dream, self) + end + + def comparison_value(dream) + case dream.format + when :exception + @etype + when :respond_to?, :is_a?, :kind_of? + @output.send(dream.format, dream.output) + when nil + @output + else + if @output.nil? + @output + elsif @output.respond_to?(dream.format) + @output.send(dream.format) + else + @output + end + end end end end \ No newline at end of file