Files
RubyMotion/test/helpers/bacon.rb

177 lines
4.3 KiB
Ruby

BITS = RUBY_ARCH.include?('64') ? 64 : 32
if defined?(UIView)
IOS_VERSION = Motion::Util::Version.new(ENV['deployment_target'])
OSX_VERSION = nil
elsif defined?(NSView)
IOS_VERSION = nil
OSX_VERSION = Motion::Util::Version.new(ENV['deployment_target'])
end
unless IOS_VERSION || OSX_VERSION
NSLog("ERROR: Unable to determin iOS and OS X deployment target version!")
exit(1)
end
# Adapted from https://github.com/irrationalfab/PrettyBacon
module PrettyBacon
def self.color(color, string)
case color
when :red
"\e[31m#{string}\e[0m"
when :green
"\e[32m#{string}\e[0m"
when :yellow
"\e[33m#{string}\e[0m"
when :none
string
else
"\e[0m#{string}\e[0m"
end
end
end
module Bacon
class Context
# Add support for disabled specs
#
def xit(description, &block)
if ENV['run-disabled']
it(description, &block)
else
Counter[:disabled] += 1
#Bacon.handle_requirement_begin(description, true)
#Bacon.handle_requirement_end(nil)
it(description) { Bacon.running_disabled_spec = true; true.should == true }
end
end
alias_method :__it_before_conditionally, :it
def it(*args, &block)
if args.last.is_a?(Hash)
options = args.pop
if options.has_key?(:if) && !options[:if]
return xit(*args, &block)
elsif options.has_key?(:unless) && options[:unless]
return xit(*args, &block)
end
end
__it_before_conditionally(*args, &block)
end
def bits
BITS
end
def sdk_version
IOS_VERSION || OSX_VERSION
end
def ios?
!IOS_VERSION.nil?
end
def osx?
!OSX_VERSION.nil?
end
def osx_32bit?
osx? && bits == 32
end
def capture_warning
$last_rb_warn = nil
ENV['RM_CAPTURE_WARNINGS'] = '1'
yield
$last_rb_warn
ensure
ENV.delete('RM_CAPTURE_WARNINGS')
end
end
# Overrides the SpecDoxzRtput to provide colored output by default
#
# Based on https://github.com/zen-cms/Zen-Core and subsequently modified
# which is available under the MIT License. Thanks YorickPeterse!
#
module PrettySpecDoxOutput
def handle_specification_begin(name)
if @needs_first_put
@needs_first_put = false
puts
end
@specs_depth = @specs_depth || 0
puts spaces + name
@specs_depth += 1
end
def handle_specification_end
@specs_depth -= 1
puts if @specs_depth.zero?
end
attr_accessor :running_disabled_spec
#def handle_requirement_begin(description, disabled = false)
def handle_requirement_begin(description)
self.running_disabled_spec = false
@start_time = Time.now.to_f
@description = description
end
def handle_requirement_end(error)
elapsed_time = ((Time.now.to_f - @start_time) * 1000).round
if !error.empty?
puts PrettyBacon.color(:red, "#{spaces}- #{@description} [FAILED]")
#elsif @disabled
elsif Bacon.running_disabled_spec
puts PrettyBacon.color(:yellow, "#{spaces}- #{@description} [DISABLED]")
else
time_color = case elapsed_time
when 0..200
:none
when 200..500
:yellow
else
:red
end
if elapsed_time <= 1
elapsed_time_string = ''
elsif elapsed_time >= 1000
elapsed_time_string = "(#{'%.1f' % (elapsed_time/1000.0)} s)"
else
elapsed_time_string = "(#{elapsed_time} ms)"
end
elapsed_time_string = PrettyBacon.color(time_color, " #{elapsed_time_string}") unless elapsed_time_string == ''
puts PrettyBacon.color(:green, "#{spaces}") + "#{@description}" + elapsed_time_string
end
end
#:nodoc:
def handle_summary
print ErrorLog if Backtraces
unless Counter[:disabled].zero?
puts PrettyBacon.color(:yellow, "#{Counter[:disabled]} disabled specifications\n")
end
puts "%d specifications (%d requirements), %d failures, %d errors" %
Counter.values_at(:specifications, :requirements, :failed, :errors)
end
#:nodoc:
def spaces
return ' ' * (@specs_depth || 0)
end
end
module TapOutput
attr_accessor :running_disabled_spec
end
Outputs['pretty_spec_dox'] = PrettySpecDoxOutput
end