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