class Qunit::Parser

Attributes

current_module[R]
current_test[R]
duration[R]
failed_assertions[R]
logger[R]
total[R]
total_failed[R]
total_passed[R]
unfinished_modules[R]

Public Class Methods

new() click to toggle source
# File lib/qunit/parser.rb, line 16
def initialize
  @logger = Qunit::Logger
  @unfinished_modules = Hash.new
  @failed_assertions = Array.new
  @total_failed = 0
  @total_passed = 0
  @total = 0
  @duration = 0
end

Public Instance Methods

console(message) click to toggle source
# File lib/qunit/parser.rb, line 120
def console(message)
  prefix = ''
  if @current_test
    prefix << "\n[%s]" % @current_test
  elsif @current_module
    prefix << "\n[%s]" % @current_module
  end
  prefix << ' CONSOLE: '
  logger.print prefix, :magenta
  logger.print message
  logger.print "\n"
end
fail_load(url) click to toggle source
# File lib/qunit/parser.rb, line 106
def fail_load(url)
  logger.puts "PhantomJS unable to load #{url} URI", :red
  @total_failed += 1
  @total += 1
  log_summary
end
fail_timeout() click to toggle source
# File lib/qunit/parser.rb, line 113
def fail_timeout
  logger.puts "PhantomJS timed out.", :red
  @total_failed += 1
  @total += 1
  log_summary
end
log_summary() click to toggle source
# File lib/qunit/parser.rb, line 133
def log_summary
  logger.puts ''
  @failed_assertions.each do |assertion|
    logger.puts assertion[:name]
    logger.puts "Message: #{assertion[:message]}", :red
    if assertion[:actual] != assertion[:expected]
      logger.puts "Actual: #{assertion[:actual]}", :magenta
      logger.puts "Expected: #{assertion[:expected]}", :yellow
    end
    if assertion[:source]
      logger.puts assertion[:source], :cyan
    end
    logger.puts ''
  end
  if @total == 0
    logger.puts "0/0 assertions ran (#{@duration/1000.0}s)", :magenta
  else
    logger.puts "#{@total_passed}/#{@total} assertions passed (#{@duration/1000.0}s)"
  end
  if @total_failed == 0 and @total > 0
    logger.puts "OK", :green
    # exit status
    return true, 0
  else
    # exit status
    return true, 1
  end
end
module_done(name, *args) click to toggle source
# File lib/qunit/parser.rb, line 59
def module_done(name, *args)
  name ||= "Unnamed Module"
  @unfinished_modules.delete(name.to_sym)
  # exit status
  return false, nil
end
module_start(name) click to toggle source
# File lib/qunit/parser.rb, line 51
def module_start(name)
  name ||= "Unnamed Module"
  @unfinished_modules[name.to_sym] = true
  @current_module = name
  # exit status
  return false, nil
end
parse(line) click to toggle source
# File lib/qunit/parser.rb, line 26
def parse(line)
  params = JSON.parse line
  event = params.shift
  case event
  when 'qunit.moduleStart'
    module_start *params
  when 'qunit.moduleDone'
    module_done *params
  when 'qunit.testStart'
    test_start *params
  when 'qunit.testDone'
    test_done *params
  when 'qunit.log'
    qunit_log *params
  when 'qunit.done'
    qunit_done *params
  when 'fail.load'
    fail_load *params
  when 'fail.timeout'
    fail_timeout *params
  when 'console'
    console *params
  end
end
qunit_done(failed, passed, total, duration) click to toggle source
# File lib/qunit/parser.rb, line 98
def qunit_done(failed, passed, total, duration)
  @total_failed += failed
  @total_passed += passed
  @total += total
  @duration += duration
  log_summary
end
qunit_log(result, actual, expected, message, source) click to toggle source
# File lib/qunit/parser.rb, line 83
def qunit_log(result, actual, expected, message, source)
  if not result
    assertion = {
      name: @current_test,
      actual: actual,
      expected: expected,
      message: message,
      source: source
    }
    @failed_assertions.push assertion
  end
  # exit status
  return false, nil
end
test_done(name, failed, *args) click to toggle source
# File lib/qunit/parser.rb, line 73
def test_done(name, failed, *args)
  if failed > 0
    logger.print 'F', :red
  else
    logger.print '.'
  end
  # exit status
  return false, nil
end
test_start(name) click to toggle source
# File lib/qunit/parser.rb, line 66
def test_start(name)
  prefix = @current_module ? "#{@current_module} - " : ''
  @current_test = "#{prefix}#{name}"
  # exit status
  return false, nil
end