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 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
require 'spec_helper'
describe 'Integration test' do
root = "#{File.dirname(__FILE__)}/.."
describe 'a basic SVG file' do
let(:document) { Prawn::SVG::Document.new(svg, [800, 600], {}) }
let(:element) { Prawn::SVG::Elements::Root.new(document) }
let(:svg) do
<<~SVG
<svg width="100" height="200">
<style><![CDATA[
#puppy { fill: red; }
.animal { fill: green; }
rect { fill: blue; }
]]></style>
<rect x="0" y="0" width="10" height="10"/>
<rect x="10" y="0" width="10" height="10" class="animal"/>
<rect x="20" y="0" width="10" height="10" class="animal" id="puppy"/>
<rect x="30" y="0" width="10" height="10" class="animal" id="puppy" style="fill: yellow;"/>
</svg>
SVG
end
it 'is correctly converted to a call stack' do
element.process
expect(element.calls).to eq [
['fill_color', ['000000'], {}, []],
['transformation_matrix', [1, 0, 0, 1, 0, 0], {}, []],
['transformation_matrix', [1, 0, 0, 1, 0, 0], {}, []],
['save', [], {}, []], ['restore', [], {}, []],
['save', [], {}, []],
['fill_color', ['0000ff'], {}, []],
['fill', [], {}, [
['rectangle', [[0.0, 200.0], 10.0, 10.0], {}, []]
]],
['restore', [], {}, []],
['save', [], {}, []],
['fill_color', ['008000'], {}, []],
['fill', [], {}, [
['rectangle', [[10.0, 200.0], 10.0, 10.0], {}, []]
]],
['restore', [], {}, []],
['save', [], {}, []],
['fill_color', ['ff0000'], {}, []],
['fill', [], {}, [
['rectangle', [[20.0, 200.0], 10.0, 10.0], {}, []]
]],
['restore', [], {}, []],
['save', [], {}, []],
['fill_color', ['ffff00'], {}, []],
['fill', [], {}, [
['rectangle', [[30.0, 200.0], 10.0, 10.0], {}, []]
]],
['restore', [], {}, []]
]
end
end
context 'with option :position' do
let(:svg) { File.read("#{root}/spec/sample_svg/cubic01a.svg") }
it 'aligns the image as requested' do
Prawn::Document.generate("#{root}/spec/sample_output/_with_position.pdf") do |prawn|
width = prawn.bounds.width / 3
prawn.svg svg, width: width, position: :left
prawn.svg svg, width: width, position: :center
prawn.svg svg, width: width, position: :right
prawn.svg svg, width: width, position: 50
prawn.svg svg, width: width
end
end
end
context 'with option :vposition' do
let(:svg) { File.read("#{root}/spec/sample_svg/cubic01a.svg") }
it 'aligns the image as requested' do
Prawn::Document.generate("#{root}/spec/sample_output/_with_vposition.pdf") do |prawn|
width = prawn.bounds.width / 3
prawn.svg svg, width: width, position: :left, vposition: :bottom
prawn.svg svg, width: width, position: :center, vposition: :center
prawn.svg svg, width: width, position: :right, vposition: :top
prawn.svg svg, width: width, position: 50, vposition: 50
end
end
end
describe 'sample file rendering' do
files = Dir["#{root}/spec/sample_svg/*.svg"]
it 'has at least 10 SVG sample files to test' do
files.length.should >= 10
end
files.each do |file|
it "renders the #{File.basename file} sample file without warnings or crashing" do
expect(Net::HTTP).to_not receive(:get)
warnings = nil
Prawn::Document.generate("#{root}/spec/sample_output/#{File.basename file}.pdf") do |prawn|
r = prawn.svg File.read(file), at: [0, prawn.bounds.top], width: prawn.bounds.width,
enable_file_requests_with_root: File.dirname(__FILE__) do |doc|
doc.url_loader.add_to_cache(
'https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-wide.jpg', File.read("#{root}/spec/sample_images/mushroom-wide.jpg")
)
doc.url_loader.add_to_cache(
'https://raw.githubusercontent.com/mogest/prawn-svg/master/spec/sample_images/mushroom-long.jpg', File.read("#{root}/spec/sample_images/mushroom-long.jpg")
)
end
warnings = r[:warnings].reject do |w|
(w =~ /Verdana/ && w =~ /is not a known font/) || w =~ /(render gradients$|waiting on the Prawn project)/
end
end
warnings.should == []
end
end
end
describe 'multiple file rendering' do
it 'renders multiple files on to the same PDF' do
Prawn::Document.generate("#{root}/spec/sample_output/_multiple.pdf") do |prawn|
width = prawn.bounds.width
y = prawn.bounds.top - 12
prawn.draw_text 'This is multiple SVGs being output to the same PDF', at: [0, y]
y -= 12
prawn.svg File.read("#{root}/spec/sample_svg/arcs01.svg"), at: [0, y], width: width / 2
prawn.svg File.read("#{root}/spec/sample_svg/circle01.svg"), at: [width / 2, y], width: width / 2
y -= 120
prawn.draw_text 'Here are some more PDFs below', at: [0, y]
y -= 12
prawn.svg File.read("#{root}/spec/sample_svg/quad01.svg"), at: [0, y], width: width / 3
prawn.svg File.read("#{root}/spec/sample_svg/rect01.svg"), at: [width / 3, y], width: width / 3
prawn.svg File.read("#{root}/spec/sample_svg/rect02.svg"), at: [width / 3 * 2, y], width: width / 3
end
end
end
end
|