Rewriting and refactoring Squib sample test
parent
8050501b15
commit
99ab80fb51
|
|
@ -2,41 +2,70 @@ require 'spec_helper'
|
||||||
require 'squib'
|
require 'squib'
|
||||||
require 'pp'
|
require 'pp'
|
||||||
|
|
||||||
describe Squib do
|
describe "Squib samples" do
|
||||||
|
let(:samples_dir) { "#{File.expand_path(File.dirname(__FILE__))}/../../samples/" }
|
||||||
|
|
||||||
context 'samples' do
|
around(:each) do |example|
|
||||||
it 'should execute with no errors' do
|
Dir.chdir(samples_dir) do
|
||||||
allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
|
example.run
|
||||||
samples = File.expand_path('../../samples', File.dirname(__FILE__))
|
|
||||||
Dir["#{samples}/**/*.rb"].each do |sample|
|
|
||||||
Dir.chdir(samples) do #to save to _output
|
|
||||||
load sample
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# it 'did not change against regression logs' do
|
it 'should execute with no errors' do
|
||||||
# samples = File.expand_path('../../samples', File.dirname(__FILE__))
|
allow(ProgressBar).to receive(:create).and_return(Squib::DoNothing.new)
|
||||||
# Dir["#{samples}/**/*.rb"].each do |sample|
|
Dir["#{samples_dir}/**/*.rb"].each do |sample|
|
||||||
# sample_name = File.basename(sample)
|
load sample
|
||||||
# header = "=== #{sample_name} ===\n"
|
end
|
||||||
# Dir.chdir(samples) do #to save to _output
|
end
|
||||||
# strio = StringIO.new
|
|
||||||
# strio << header
|
|
||||||
# mock_cairo(strio)
|
|
||||||
# load sample
|
|
||||||
# test_file_str = ""
|
|
||||||
# # Use this to overwrite the regression with current state
|
|
||||||
# # Use ONLY temporarily after you are happy with the new sample log
|
|
||||||
# # File.open(sample_regression_file(sample_name), 'w+') do |f|
|
|
||||||
# # f.write(strio.string.force_encoding("UTF-8")) # write back out to expected file
|
|
||||||
# # end
|
|
||||||
# test_file_str << File.open(sample_regression_file(sample_name)).read.force_encoding("UTF-8")
|
|
||||||
# expect(strio.string).to eq(test_file_str)
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
# end
|
|
||||||
|
|
||||||
|
# This test could use some explanation
|
||||||
|
# Much of the development of Squib has been sample-driven. Every time I want
|
||||||
|
# new syntax or feature, I write a sample, get it working, and then write
|
||||||
|
# tests for boundary cases in the unit tests.
|
||||||
|
#
|
||||||
|
# This makes documentation much easier and example-driven.
|
||||||
|
# ...but I want to use those samples for regression & integration tests too.
|
||||||
|
#
|
||||||
|
# The above test is a good smoke test, but it just looks for exceptions.
|
||||||
|
# What this set of tests do is run the samples again, but mocking out Cairo,
|
||||||
|
# Pango, RSVG, and any other dependencies. We log those API calls and store
|
||||||
|
# them in a super-verbose string. We compare our runs against what happened
|
||||||
|
# before.
|
||||||
|
#
|
||||||
|
# Thus, if we ever change anything that results in a ANY change to our
|
||||||
|
# regression logs, then these tests will fail. If it's SURPRISING, then we
|
||||||
|
# caught an integration bug. If it's not, just update and overwrite the logs.
|
||||||
|
#
|
||||||
|
# So it's understood that you should have to periodically enable the
|
||||||
|
# overwrite_sample method below to store the new regression log. Just make
|
||||||
|
# sure you inspect the change and make sure it makes sense with the change
|
||||||
|
# you made to the samples or Squib.
|
||||||
|
%w( hello_world.rb
|
||||||
|
autoscale_font.rb
|
||||||
|
layouts.rb
|
||||||
|
save_pdf.rb
|
||||||
|
custom_config.rb
|
||||||
|
load_images.rb
|
||||||
|
basic.rb
|
||||||
|
cairo_access.rb
|
||||||
|
draw_shapes.rb
|
||||||
|
text_options.rb
|
||||||
|
colors.rb
|
||||||
|
excel.rb
|
||||||
|
portrait-landscape.rb
|
||||||
|
tgc_proofs.rb
|
||||||
|
ranges.rb
|
||||||
|
units.rb
|
||||||
|
).each do |sample|
|
||||||
|
it "has not changed for #{sample}" do
|
||||||
|
log = StringIO.new
|
||||||
|
mock_cairo(log)
|
||||||
|
load sample
|
||||||
|
# overwrite_sample(sample, log) # Use TEMPORARILY once happy with the new sample log
|
||||||
|
test_file_str = File.open(sample_regression_file(sample))
|
||||||
|
.read.force_encoding("UTF-8")
|
||||||
|
expect(log.string).to eq(test_file_str)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
@ -19,15 +19,27 @@ def layout_file(str)
|
||||||
"#{File.expand_path(File.dirname(__FILE__))}/data/layouts/#{str}"
|
"#{File.expand_path(File.dirname(__FILE__))}/data/layouts/#{str}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def sample_file(file)
|
||||||
|
"#{File.expand_path(File.dirname(__FILE__))}/../samples/#{file}"
|
||||||
|
end
|
||||||
|
|
||||||
def sample_regression_file(file)
|
def sample_regression_file(file)
|
||||||
"#{File.expand_path(File.dirname(__FILE__))}/data/samples/#{file}.txt"
|
"#{File.expand_path(File.dirname(__FILE__))}/data/samples/#{file}.txt"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def overwrite_sample(sample_name, log)
|
||||||
|
# Use this to overwrite the regression with current state
|
||||||
|
File.open(sample_regression_file(sample_name), 'w+') do |f|
|
||||||
|
f.write(log.string.force_encoding("UTF-8")) # write back out to expected file
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def scrub_hex(str)
|
def scrub_hex(str)
|
||||||
str.gsub(/0x\w{1,8}/,'')
|
str.gsub(/0x\w{1,8}/,'')
|
||||||
.gsub(/ptr=\w{1,8}/,'')
|
.gsub(/ptr=\w{1,8}/,'')
|
||||||
.gsub(/#<Pango::FontDescription:.*>/,'')
|
.gsub(/#<Pango::FontDescription:.*>/,'')
|
||||||
.gsub(/Handle:\w{1,8}/,'Handle')
|
.gsub(/#<Cairo::ImageSurface:.*>/,'ImageSurface')
|
||||||
|
.gsub(/#<RSVG::Handle.*>/,'RSVG::Handle')
|
||||||
.gsub(/RGB:\w{1,8}/,'RGB:')
|
.gsub(/RGB:\w{1,8}/,'RGB:')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue