-
-
Notifications
You must be signed in to change notification settings - Fork 763
/
html_formatter_spec.rb
82 lines (71 loc) · 3 KB
/
html_formatter_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
require 'spec_helper'
require 'rspec/core/formatters/html_formatter'
require 'nokogiri'
module RSpec
module Core
module Formatters
describe HtmlFormatter, :if => RUBY_VERSION =~ /^(1.8.7|1.9.2|1.9.3)$/ do
let(:jruby?) { ::RUBY_PLATFORM == 'java' }
let(:root) { File.expand_path("#{File.dirname(__FILE__)}/../../../..") }
let(:suffix) { jruby? ? '-jruby' : '' }
let(:expected_file) do
"#{File.dirname(__FILE__)}/html_formatted-#{::RUBY_VERSION}#{suffix}.html"
end
let(:generated_html) do
options = RSpec::Core::ConfigurationOptions.new(
%w[spec/rspec/core/resources/formatter_specs.rb --format html]
)
options.parse_options
err, out = StringIO.new, StringIO.new
command_line = RSpec::Core::CommandLine.new(options)
command_line.run(err, out)
out.string.gsub(/\d+\.\d+ seconds/, 'x seconds')
end
let(:expected_html) do
unless File.file?(expected_file)
raise "There is no HTML file with expected content for this platform: #{expected_file}"
end
File.read(expected_file)
end
before do
RSpec.configuration.stub(:load_spec_files) do
RSpec.configuration.files_to_run.map {|f| load File.expand_path(f) }
end
end
# Uncomment this group temporarily in order to overwrite the expected
# with actual. Use with care!!!
describe "file generator", :if => ENV['GENERATE'] do
it "generates a new comparison file" do
Dir.chdir(root) do
File.open(expected_file, 'w') {|io| io.write(generated_html)}
end
end
end
def extract_backtrace_from(doc)
doc.search("div.backtrace").
collect {|e| e.at("pre").inner_html}.
collect {|e| e.split("\n")}.flatten.
select {|e| e =~ /formatter_specs\.rb/}
end
it "produces HTML identical to the one we designed manually" do
Dir.chdir(root) do
actual_doc = Nokogiri::HTML(generated_html)
actual_backtraces = extract_backtrace_from(actual_doc)
actual_doc.css("div.backtrace").remove
expected_doc = Nokogiri::HTML(expected_html)
expected_backtraces = extract_backtrace_from(expected_doc)
expected_doc.search("div.backtrace").remove
actual_doc.inner_html.should eq(expected_doc.inner_html)
expected_backtraces.each_with_index do |expected_line, i|
expected_path, expected_line_number, expected_suffix = expected_line.split(':')
actual_path, actual_line_number, actual_suffix = actual_backtraces[i].split(':')
File.expand_path(actual_path).should eq(File.expand_path(expected_path))
actual_line_number.should eq(expected_line_number)
actual_suffix.should eq(expected_suffix)
end
end
end
end
end
end
end