lib/rantly/property.rb in rantly-1.2.0 vs lib/rantly/property.rb in rantly-2.0.0
- old
+ new
@@ -1,14 +1,14 @@
require 'rantly'
require 'pp'
require 'stringio'
class Rantly::Property
- attr_reader :failed_data, :shrunk_failed_data, :io
+ attr_reader :failed_data, :shrunk_failed_data
- VERBOSITY = ENV.fetch('RANTLY_VERBOSE'){ 1 }.to_i
- RANTLY_COUNT = ENV.fetch('RANTLY_COUNT'){ 100 }.to_i
+ VERBOSITY = ENV.fetch('RANTLY_VERBOSE') { 1 }.to_i
+ RANTLY_COUNT = ENV.fetch('RANTLY_COUNT') { 100 }.to_i
def io
@io ||= if VERBOSITY >= 1
STDOUT
else
@@ -22,50 +22,47 @@
def initialize(property)
@property = property
end
- def check(n=RANTLY_COUNT,limit=10,&assertion)
+ def check(n = RANTLY_COUNT, limit = 10, &assertion)
i = 0
test_data = nil
begin
- Rantly.singleton.generate(n,limit,@property) do |val|
+ Rantly.singleton.generate(n, limit, @property) do |val|
test_data = val
- assertion.call(val) if assertion
- io.puts "" if i % 100 == 0
- io.print "." if i % 10 == 0
+ yield(val) if assertion
+ io.puts '' if (i % 100).zero?
+ io.print '.' if (i % 10).zero?
i += 1
end
io.puts
- io.puts "success: #{i} tests"
+ io.puts "SUCCESS - #{i} successful tests"
rescue Rantly::TooManyTries => e
io.puts
- io.puts "too many tries: #{e.tries}"
- raise e
+ io.puts "FAILURE - #{i} successful tests, too many tries: #{e.tries}"
+ raise e.exception("#{i} successful tests, too many tries: #{e.tries} (limit: #{e.limit})")
rescue Exception => boom
io.puts
- io.puts "failure: #{i} tests, on:"
+ io.puts "FAILURE - #{i} successful tests, failed on:"
pretty_print test_data
@failed_data = test_data
if @failed_data.respond_to?(:shrink)
@shrunk_failed_data, @depth = shrinkify(assertion, @failed_data)
- io.puts "minimal failed data (depth #{@depth}) is:"
+ io.puts "Minimal failed data (depth #{@depth}) is:"
pretty_print @shrunk_failed_data
end
- raise $!, "failure: #{i} tests, on:\n#{test_data}\n\n#{boom}\n", $@
+ raise boom.exception("#{i} successful tests, failed on:\n#{test_data}\n\n#{boom}\n")
end
end
# Explore the failures tree
- def shrinkify(assertion, data, depth=0, iteration=0)
- io.puts "Shrinking at depth #{depth}:"
- pretty_print data
-
+ def shrinkify(assertion, data, depth = 0, iteration = 0)
min_data = data
max_depth = depth
if data.shrinkable?
- while iteration < 1024 do
+ while iteration < 1024
# We assume that data.shrink is non-destructive
shrunk_data = data.shrink
begin
assertion.call(shrunk_data)
rescue Exception
@@ -74,11 +71,11 @@
if branch_depth > max_depth
min_data = branch_data
max_depth = branch_depth
end
end
- break if !data.retry?
+ break unless data.retry?
end
end
- return min_data, max_depth, iteration
+ [min_data, max_depth, iteration]
end
end