Skip to content

Commit

Permalink
Showing 4 changed files with 38 additions and 17 deletions.
22 changes: 11 additions & 11 deletions spec/std/spec/junit_formatter_spec.cr
Original file line number Diff line number Diff line change
@@ -3,8 +3,8 @@ require "spec"
describe "JUnit Formatter" do
it "reports succesful results" do
output = build_report do |f|
f.report Spec::Result.new(:success, "should do something", "spec/some_spec.cr", 33, nil)
f.report Spec::Result.new(:success, "should do something else", "spec/some_spec.cr", 50, nil)
f.report Spec::Result.new(:success, "should do something", "spec/some_spec.cr", 33, nil, nil)
f.report Spec::Result.new(:success, "should do something else", "spec/some_spec.cr", 50, nil, nil)
end

expected = <<-XML
@@ -21,7 +21,7 @@ describe "JUnit Formatter" do

it "reports failures" do
output = build_report do |f|
f.report Spec::Result.new(:fail, "should do something", "spec/some_spec.cr", 33, nil)
f.report Spec::Result.new(:fail, "should do something", "spec/some_spec.cr", 33, nil, nil)
end

expected = <<-XML
@@ -37,7 +37,7 @@ describe "JUnit Formatter" do

it "reports errors" do
output = build_report do |f|
f.report Spec::Result.new(:error, "should do something", "spec/some_spec.cr", 33, nil)
f.report Spec::Result.new(:error, "should do something", "spec/some_spec.cr", 33, nil, nil)
end

expected = <<-XML
@@ -53,10 +53,10 @@ describe "JUnit Formatter" do

it "reports mixed results" do
output = build_report do |f|
f.report Spec::Result.new(:success, "should do something1", "spec/some_spec.cr", 33, nil)
f.report Spec::Result.new(:fail, "should do something2", "spec/some_spec.cr", 50, nil)
f.report Spec::Result.new(:error, "should do something3", "spec/some_spec.cr", 65, nil)
f.report Spec::Result.new(:error, "should do something4", "spec/some_spec.cr", 80, nil)
f.report Spec::Result.new(:success, "should do something1", "spec/some_spec.cr", 33, 2.seconds, nil)
f.report Spec::Result.new(:fail, "should do something2", "spec/some_spec.cr", 50, 0.5.seconds, nil)
f.report Spec::Result.new(:error, "should do something3", "spec/some_spec.cr", 65, nil, nil)
f.report Spec::Result.new(:error, "should do something4", "spec/some_spec.cr", 80, nil, nil)
end

expected = <<-XML
@@ -80,7 +80,7 @@ describe "JUnit Formatter" do

it "escapes spec names" do
output = build_report do |f|
f.report Spec::Result.new(:success, "complicated \" <n>'&ame", __FILE__, __LINE__, nil)
f.report Spec::Result.new(:success, "complicated \" <n>'&ame", __FILE__, __LINE__, nil, nil)
end

name = XML.parse(output).xpath_string("string(//testsuite/testcase[1]/@name)")
@@ -91,7 +91,7 @@ describe "JUnit Formatter" do
cause = exception_with_backtrace("Something happened")

output = build_report do |f|
f.report Spec::Result.new(:fail, "foo", __FILE__, __LINE__, cause)
f.report Spec::Result.new(:fail, "foo", __FILE__, __LINE__, nil, cause)
end

xml = XML.parse(output)
@@ -106,7 +106,7 @@ describe "JUnit Formatter" do
cause = exception_with_backtrace("Something happened")

output = build_report do |f|
f.report Spec::Result.new(:error, "foo", __FILE__, __LINE__, cause)
f.report Spec::Result.new(:error, "foo", __FILE__, __LINE__, nil, cause)
end

xml = XML.parse(output)
10 changes: 10 additions & 0 deletions src/spec.cr
Original file line number Diff line number Diff line change
@@ -126,6 +126,13 @@ module Spec
def self.line=(@@line : Int32)
end

def self.slowest=(@@slowest : Int32)
end

def self.slowest
@@slowest
end

def self.add_location(file, line)
locations = @@locations ||= {} of String => Array(Int32)
lines = locations[File.expand_path(file)] ||= [] of Int32
@@ -210,6 +217,9 @@ OptionParser.parse! do |opts|
opts.on("-l ", "--line LINE", "run examples whose line matches LINE") do |line|
Spec.line = line.to_i
end
opts.on("-p", "--profile", "Print the 10 slowest specs") do
Spec.slowest = 10
end
opts.on("--fail-fast", "abort the run on first failure") do
Spec.fail_fast = true
end
16 changes: 13 additions & 3 deletions src/spec/context.cr
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@ module Spec
description : String,
file : String,
line : Int32,
elapsed : Time::Span?,
exception : Exception?

# :nodoc:
@@ -30,8 +31,8 @@ module Spec
@results[:fail].empty? && @results[:error].empty?
end

def self.report(kind, full_description, file, line, ex = nil)
result = Result.new(kind, full_description, file, line, ex)
def self.report(kind, full_description, file, line, elapsed = nil, ex = nil)
result = Result.new(kind, full_description, file, line, elapsed, ex)
@@contexts_stack.last.report(result)
end

@@ -99,6 +100,15 @@ module Spec
end
end

if Spec.slowest
puts
results = @results[:success] + @results[:fail]
topN = results.sort_by {|res| -res.elapsed.not_nil!.to_f }[0..Spec.slowest.not_nil!]
topN.each do |res|
puts "#{res.description} : #{res.elapsed.not_nil!.to_f} sec"
end
end

puts

success = @results[:success]
@@ -165,7 +175,7 @@ module Spec
end

def report(result)
@parent.report Result.new(result.kind, "#{@description} #{result.description}", result.file, result.line, result.exception)
@parent.report Result.new(result.kind, "#{@description} #{result.description}", result.file, result.line, result.elapsed, result.exception)
end

def matches?(pattern, line, locations)
7 changes: 4 additions & 3 deletions src/spec/dsl.cr
Original file line number Diff line number Diff line change
@@ -12,15 +12,16 @@ module Spec::DSL

Spec.formatters.each(&.before_example(description))

start = Time.now
begin
Spec.run_before_each_hooks
block.call
Spec::RootContext.report(:success, description, file, line)
Spec::RootContext.report(:success, description, file, line, Time.now - start)
rescue ex : Spec::AssertionFailed
Spec::RootContext.report(:fail, description, file, line, ex)
Spec::RootContext.report(:fail, description, file, line, Time.now - start, ex)
Spec.abort! if Spec.fail_fast?
rescue ex
Spec::RootContext.report(:error, description, file, line, ex)
Spec::RootContext.report(:error, description, file, line, Time.now - start, ex)
Spec.abort! if Spec.fail_fast?
ensure
Spec.run_after_each_hooks

0 comments on commit 44a80f9

Please sign in to comment.