class Oktest::AssertionObject
Constants
- NOT_YET
Attributes
actual[R]
bool[R]
location[R]
Public Class Methods
new(actual, bool, location)
click to toggle source
# File lib/oktest.rb, line 45 def initialize(actual, bool, location) @actual = actual @bool = bool @location = location end
report_not_yet()
click to toggle source
# File lib/oktest.rb, line 58 def self.report_not_yet() #; [!3nksf] reports if 'ok{}' called but assertion not performed. return if NOT_YET.empty? NOT_YET.each_value do |ass| s = ass.location ? " (at #{ass.location})" : nil $stderr.write "** warning: ok() is called but not tested yet#{s}.\n" end #; [!f92q4] clears remained objects. NOT_YET.clear() end
Public Instance Methods
!=(expected)
click to toggle source
# File lib/oktest.rb, line 102 def !=(expected) # Ruby >= 1.9 __done() #; [!90tfb] raises assertion error when failed. #; [!l6afg] is avaialbe with NOT. __assert(@bool == (@actual != expected)) { op = @bool ? '!=' : '==' "$<actual> #{op} $<expected>: failed.\n"\ " $<actual>: #{@actual.inspect}\n"\ " $<expected>: #{expected.inspect}" } #; [!iakbb] returns self when passed. self end
!~(expected)
click to toggle source
# File lib/oktest.rb, line 200 def !~(expected) # Ruby >= 1.9 __done() #; [!58udu] raises assertion error when failed. #; [!iuf5j] is avaialbe with NOT. __assert_match(@actual !~ expected, '!~', '=~', expected) #; [!xywdr] returns self when passed. self end
<(expected)
click to toggle source
# File lib/oktest.rb, line 160 def <(expected) __done() #; [!ukqa0] raises assertion error when failed. #; [!gwvdl] is avaialbe with NOT. __assert_op(@actual < expected, '<', '>=', expected) #; [!vkwcc] returns self when passed. self end
<=(expected)
click to toggle source
# File lib/oktest.rb, line 169 def <=(expected) __done() #; [!ordwe] raises assertion error when failed. #; [!mcb9w] is avaialbe with NOT. __assert_op(@actual <= expected, '<=', '>', expected) #; [!yk7t2] returns self when passed. self end
==(expected)
click to toggle source
# File lib/oktest.rb, line 80 def ==(expected) __done() #; [!1iun4] raises assertion error when failed. #; [!eyslp] is avaialbe with NOT. __assert(@bool == (@actual == expected)) { if @bool && ! (@actual == expected) \ && @actual.is_a?(String) && expected.is_a?(String) \ && (@actual =~ /\n/ || expected =~ /\n/) #; [!3xnqv] shows context diff when both actual and expected are text. diff = Util.unified_diff(expected, @actual, "--- $<expected>\n+++ $<actual>\n") "$<actual> == $<expected>: failed.\n#{diff}" else op = @bool ? '==' : '!=' "$<actual> #{op} $<expected>: failed.\n"\ " $<actual>: #{@actual.inspect}\n"\ " $<expected>: #{expected.inspect}" end } #; [!c6p0e] returns self when passed. self end
===(expected)
click to toggle source
# File lib/oktest.rb, line 116 def ===(expected) __done() #; [!mjh4d] raises error when combination of 'not_ok()' and matcher object. if @bool == false && @actual.is_a?(Matcher) raise OktestError, "negative `===` is not available with matcher object." end #; [!42f6a] raises assertion error when failed. #; [!vhvyu] is avaialbe with NOT. __assert(@bool == (@actual === expected)) { s = "$<actual> === $<expected>" s = "!(#{s})" unless @bool "#{s}: failed.\n"\ " $<actual>: #{@actual.inspect}\n"\ " $<expected>: #{expected.inspect}" } #; [!uh8bm] returns self when passed. self end
=~(expected)
click to toggle source
# File lib/oktest.rb, line 191 def =~(expected) __done() #; [!xkldu] raises assertion error when failed. #; [!2aa6f] is avaialbe with NOT. __assert_match(@actual =~ expected, '=~', '!~', expected) #; [!acypf] returns self when passed. self end
>(expected)
click to toggle source
# File lib/oktest.rb, line 142 def >(expected) __done() #; [!vjjuq] raises assertion error when failed. #; [!73a0t] is avaialbe with NOT. __assert_op(@actual > expected, '>', '<=', expected) #; [!3j7ty] returns self when passed. self end
>=(expected)
click to toggle source
# File lib/oktest.rb, line 151 def >=(expected) __done() #; [!isdfc] raises assertion error when failed. #; [!3dgmh] is avaialbe with NOT. __assert_op(@actual >= expected, '>=', '<', expected) #; [!75iqw] returns self when passed. self end
NOT()
click to toggle source
# File lib/oktest.rb, line 73 def NOT() #; [!63dde] toggles internal boolean. @bool = ! @bool #; [!g775v] returns self. self end
__assert(result) { || ... }
click to toggle source
# File lib/oktest.rb, line 69 def __assert(result) raise FAIL_EXCEPTION, yield unless result end
attr(name, expected)
click to toggle source
# File lib/oktest.rb, line 416 def attr(name, expected) __done() #; [!79tgn] raises assertion error when failed. #; [!cqnu3] is available with NOT. val = @actual.__send__(name) __assert(@bool == (expected == val)) { op = @bool ? '==' : '!=' "$<actual>.#{name} #{op} $<expected>: failed.\n"\ " $<actual>.#{name}: #{val.inspect}\n"\ " $<expected>: #{expected.inspect}"\ } #; [!lz3lb] returns self when passed. self end
attrs(**keyvals)
click to toggle source
# File lib/oktest.rb, line 431 def attrs(**keyvals) __done() #; [!7ta0s] raises assertion error when failed. #; [!s0pnk] is available with NOT. keyvals.each {|name, expected| attr(name, expected) } #; [!rtq9f] returns self when passed. self end
dir_exist?()
click to toggle source
# File lib/oktest.rb, line 523 def dir_exist? __done() #; [!vfh7a] raises assertion error when failed. #; [!qtllp] is available with NOT. __assert_fs(File.directory?(@actual), "File.directory?($<actual>)") #; [!8qe7u] returns self when passed. self end
falsy?()
click to toggle source
# File lib/oktest.rb, line 493 def falsy? __done() #; [!7o48g] raises assertion error when failed. #; [!i44q6] is available with NOT. __assert(@bool == (!!@actual == false)) { op = @bool ? '==' : '!=' "!!$<actual> #{op} false: failed.\n"\ " $<actual>: #{@actual.inspect}" } #; [!w1vm6] returns self when passed. self end
file_exist?()
click to toggle source
# File lib/oktest.rb, line 514 def file_exist? __done() #; [!69bs0] raises assertion error when failed. #; [!r1mze] is available with NOT. __assert_fs(File.file?(@actual) , "File.file?($<actual>)") #; [!6bcpp] returns self when passed. self end
in?(expected)
click to toggle source
# File lib/oktest.rb, line 402 def in?(expected) __done() #; [!9rm8g] raises assertion error when failed. #; [!singl] is available with NOT. __assert(@bool == !! expected.include?(@actual)) { eq = @bool ? '' : ' == false' "$<expected>.include?($<actual>)#{eq}: failed.\n"\ " $<actual>: #{@actual.inspect}\n"\ " $<expected>: #{expected.inspect}" } #; [!jzoxg] returns self when passed. self end
in_delta?(expected, delta)
click to toggle source
# File lib/oktest.rb, line 209 def in_delta?(expected, delta) __done() #; [!f3zui] raises assertion error when failed. #; [!t7liw] is avaialbe with NOT. __assert(@bool == !!((@actual - expected).abs < delta)) { eq = @bool ? '' : ' == false' "($<actual> - $<expected>).abs < #{delta}#{eq}: failed.\n"\ " $<actual>: #{@actual.inspect}\n"\ " $<expected>: #{expected.inspect}\n"\ " ($<actual> - $<expected>).abs: #{(@actual - expected).abs.inspect}" } #; [!m0791] returns self when passed. self end
keyval(key, expected)
click to toggle source
# File lib/oktest.rb, line 440 def keyval(key, expected) __done() #; [!vtrlz] raises assertion error when failed. #; [!mmpwz] is available with NOT. val = @actual[key] __assert(@bool == (expected == val)) { op = @bool ? '==' : '!=' "$<actual>[#{key.inspect}] #{op} $<expected>: failed.\n"\ " $<actual>[#{key.inspect}]: #{val.inspect}\n"\ " $<expected>: #{expected.inspect}"\ } #; [!byebv] returns self when passed. self end
Also aliased as: item
keyvals(keyvals={})
click to toggle source
# File lib/oktest.rb, line 456 def keyvals(keyvals={}) # never use keyword args! __done() #; [!fyvmn] raises assertion error when failed. #; [!js2j2] is available with NOT. keyvals.each {|name, expected| keyval(name, expected) } #; [!vtw22] returns self when passed. self end
Also aliased as: items
length(n)
click to toggle source
# File lib/oktest.rb, line 466 def length(n) __done() #; [!1y787] raises assertion error when failed. #; [!kryx2] is available with NOT. __assert(@bool == (@actual.length == n)) { op = @bool ? '==' : '!=' "$<actual>.length #{op} #{n}: failed.\n"\ " $<actual>.length: #{@actual.length}\n"\ " $<actual>: #{actual.inspect}" } #; [!l9vnv] returns self when passed. self end
method_missing(method_name, *args)
click to toggle source
Calls superclass method
# File lib/oktest.rb, line 238 def method_missing(method_name, *args) __done() #; [!yjnxb] enables to handle boolean methods. #; [!ttow6] raises NoMethodError when not a boolean method. method_name.to_s =~ /\?\z/ or super begin ret = @actual.__send__(method_name, *args) rescue NoMethodError, TypeError => exc #; [!f0ekh] skip top of backtrace when NoMethodError raised. while !exc.backtrace.empty? && exc.backtrace[0].start_with?(__FILE__) exc.backtrace.shift() end raise end #; [!cun59] fails when boolean method failed returned false. #; [!4objh] is available with NOT. if ret == true || ret == false __assert(@bool == ret) { args = args.empty? ? '' : "(#{args.collect {|x| x.inspect }.join(', ')})" eq = @bool ? '' : ' == false' "$<actual>.#{method_name}#{args}#{eq}: failed.\n"\ " $<actual>: #{@actual.inspect}" } #; [!sljta] raises TypeError when boolean method returned non-boolean value. else raise TypeError, "ok(): #{@actual.class}##{method_name}() expected to return true or false, but got #{ret.inspect}." end #; [!7bbrv] returns self when passed. self end
not_exist?()
click to toggle source
# File lib/oktest.rb, line 541 def not_exist? __done() #; [!ja84s] raises assertion error when failed. #; [!to5z3] is available with NOT. __assert(@bool == ! File.exist?(@actual)) { "File.exist?($<actual>)#{@bool ? ' == false' : ''}: failed.\n"\ " $<actual>: #{@actual.inspect}" } #; [!1ujag] returns self when passed. self end
raise!(errcls=nil, errmsg=nil, &b)
click to toggle source
# File lib/oktest.rb, line 270 def raise!(errcls=nil, errmsg=nil, &b) #; [!8k6ee] compares error class by '.is_a?' instead of '=='. return raise?(errcls, errmsg, _subclass: true, &b) end
raise?(errcls=nil, errmsg=nil, _subclass: false) { |exc| ... }
click to toggle source
# File lib/oktest.rb, line 275 def raise?(errcls=nil, errmsg=nil, _subclass: false, &b) __done() #; [!2rnni] 1st argument can be error message string or rexp. if errmsg.nil? && ! errcls.nil? && ! (errcls.is_a?(Class) && errcls <= Exception) errmsg = errcls errcls = RuntimeError end # proc_obj = @actual exc = nil #; [!dpv5g] when `ok{}` called... if @bool begin proc_obj.call rescue Exception => exc #; [!4c6x3] not check exception class when nil specified as errcls. if errcls.nil? nil #; [!yps62] assertion passes when expected exception raised. #; [!lq6jv] compares error class with '==' operator, not '.is_a?'. elsif exc.class == errcls # not `exc.is_a?(errcls)` nil #; [!hwg0z] compares error class with '.is_a?' if '_subclass: true' specified. elsif _subclass && exc.class < errcls nil #; [!4n3ed] reraises if exception is not matched to specified error class. else #__assert(false) { "Expected #{errcls} to be raised but got #{exc.class}." } raise end else #; [!wbwdo] raises assertion error when nothing raised. __assert(false) { "Expected #{errcls} to be raised but nothing raised." } end #; [!tpxlv] accepts string or regexp as error message. if errmsg __assert(errmsg === exc.message) { op = errmsg.is_a?(Regexp) ? '=~' : '==' "$<error_message> #{op} #{errmsg.inspect}: failed.\n"\ " $<error_message>: #{exc.message.inspect}" } end #; [!dq97o] if block given, call it with exception object. yield exc if block_given?() #; [!qkr3h] when `ok{}.NOT` called... else #; [!cownv] not support error message. ! errmsg or raise ArgumentError, "#{errmsg.inspect}: NOT.raise?() can't take errmsg." #; [!spzy2] is available with NOT. begin proc_obj.call rescue Exception => exc #; [!36032] re-raises exception when errcls is nil. if errcls.nil? #__assert(false) { "Nothing should be raised but got #{exc.inspect}." } raise #; [!61vtv] assertion fails when specified exception raised. #; [!smprc] compares error class with '==' operator, not '.is_a?'. elsif exc.class == errcls # not `exc.is_a?(errcls)` __assert(false) { "#{errcls.inspect} should not be raised but got #{exc.inspect}." } #; [!34nd8] compares error class with '.is_a?' if '_subclass: true' specified. elsif _subclass && exc.class < errcls __assert(false) { "#{errcls.inspect} should not be raised but got #{exc.inspect}." } #; [!shxne] reraises exception if different from specified error class. else raise end else #; [!a1a40] assertion passes when nothing raised. nil end end #; [!vnc6b] sets exception object into '#exc' attribute. (class << proc_obj; self; end).class_eval { attr_accessor :exc } proc_obj.exc = exc #; [!y1b28] returns self when passed. self end
same?(expected)
click to toggle source
# File lib/oktest.rb, line 224 def same?(expected) __done() #; [!ozbf4] raises assertion error when failed. #; [!dwtig] is avaialbe with NOT. __assert(@bool == !! @actual.equal?(expected)) { eq = @bool ? '' : ' == false' "$<actual>.equal?($<expected>)#{eq}: failed.\n"\ " $<actual>: #{@actual.inspect}\n"\ " $<expected>: #{expected.inspect}\n" } #; [!yk7zo] returns self when passed. self end
symlink_exist?()
click to toggle source
# File lib/oktest.rb, line 532 def symlink_exist? __done() #; [!qwngl] raises assertion error when failed. #; [!cgpbt] is available with NOT. __assert_fs(File.symlink?(@actual), "File.symlink?($<actual>)") #; [!ugfi3] returns self when passed. self end
throw?(expected)
click to toggle source
# File lib/oktest.rb, line 355 def throw?(expected) __done() proc_obj = @actual if @bool #; [!w7935] raises ArgumentError when arg of 'thrown?()' is nil. expected != nil or raise ArgumentError, "throw?(#{expected.inspect}): expected tag required." # begin proc_obj.call rescue UncaughtThrowError => exc #; [!lglzr] assertion passes when expected symbol thrown. if exc.tag.equal?(expected) nil #; [!gf9nx] assertion fails when thrown tag is equal to but not same as expected. elsif exc.tag == expected __assert(false) { "Thrown tag #{exc.tag.inspect} is equal to but not same as expected.\n"\ " (`#{exc.tag.inspect}.equal?(#{expected.inspect})` should be true but not.)" } #; [!flgwy] assertion fails when thrown tag is different from expectd. else __assert(false) { "#{expected.inspect} should be thrown but actually #{exc.tag.inspect} thrown." } end else #; [!9ik3x] assertion fails when nothing thrown. __assert(false) { "#{expected.inspect} should be thrown but nothing thrown." } end else #; [!m03vq] raises ArgumentError when non-nil arg passed to 'NOT.thrown?()'. expected == nil or raise ArgumentError, "NOT.throw?(#{expected.inspect}): argument should be nil." #; [!kxizg] assertion fails when something thrown in 'NOT.throw?()'. begin proc_obj.call rescue UncaughtThrowError => exc __assert(false) { "Nothing should be thrown but #{exc.tag.inspect} thrown." } end end #; [!zq9h6] returns self when passed. self end
truthy?()
click to toggle source
# File lib/oktest.rb, line 480 def truthy? __done() #; [!3d94h] raises assertion error when failed. #; [!8rmgp] is available with NOT. __assert(@bool == (!!@actual == true)) { op = @bool ? '==' : '!=' "!!$<actual> #{op} true: failed.\n"\ " $<actual>: #{@actual.inspect}" } #; [!nhmuk] returns self when passed. self end
Private Instance Methods
__assert_fs(bool, s)
click to toggle source
# File lib/oktest.rb, line 506 def __assert_fs(bool, s) __assert(@bool == bool) { "#{s}#{@bool ? '' : ' == false'}: failed.\n"\ " $<actual>: #{@actual.inspect}" } end
__assert_match(result, op1, op2, expected)
click to toggle source
# File lib/oktest.rb, line 178 def __assert_match(result, op1, op2, expected) __assert(@bool == !!result) { msg = "$<actual> #{@bool ? op1 : op2} $<expected>: failed.\n"\ " $<expected>: #{expected.inspect}\n" if @actual =~ /\n\z/ msg + " $<actual>: <<'END'\n#{@actual}END\n" else msg + " $<actual>: #{@actual.inspect}\n" end } end
__assert_op(bool, op1, op2, expected)
click to toggle source
# File lib/oktest.rb, line 135 def __assert_op(bool, op1, op2, expected) __assert(@bool == bool) { "#{@actual.inspect} #{@bool ? op1 : op2} #{expected.inspect}: failed." } end
__done()
click to toggle source
# File lib/oktest.rb, line 53 def __done() NOT_YET.delete(self.__id__) end