require 'spec_helper' RSpec.describe Prawn::SVG::Elements::Marker do let(:svg) do <<-SVG <svg> <marker id="Triangle" viewBox="0 0 10 10" refX="0" refY="5" markerUnits="strokeWidth" markerWidth="4" markerHeight="3" orient="auto"> <path d="M 0 0 L 10 5 L 0 10 z" /> </marker> <line x2="10" y2="10" stroke="black" stroke-width="100" /> </svg> SVG end let(:document) { Prawn::SVG::Document.new(svg, [800, 600], {width: 800, height: 600}) } def new_state state = Prawn::SVG::State.new state.viewport_sizing = document.sizing state end let(:line_element) do Prawn::SVG::Elements::Line.new(document, document.root.elements[2], [], new_state) end subject do Prawn::SVG::Elements::Marker.new(document, document.root.elements[1], [], new_state) end describe "#parse" do it "forces display none" do subject.parse expect(subject.properties.display).to eq 'none' end end describe "#apply_marker" do it "adds the line and its marker to the call stack" do subject.process line_element.process # We didn't use a marker-* attribute on the <line> tag, that's # why the apply_marker method wasn't automatically called as part # of the line_element.process call above. subject.apply_marker(line_element, point: [10, 10], angle: 45) # This example follows the example in the SVG 1.1 documentation # in section 11.6.3. expect(line_element.base_calls).to eq [ ["stroke_color", ["000000"], {}, []], ["line_width", [100.0], {}, []], ["stroke", [], {}, [ ["move_to", [[0.0, 600.0]], {}, []], ["line_to", [[10.0, 590.0]], {}, []] ] ], ["save", [], {}, []], ["transformation_matrix", [1, 0, 0, 1, 10, -10], {}, []], ["rotate", [-45], {origin: [0, 600.0]}, [ ["transformation_matrix", [100.0, 0, 0, 100.0, 0, 0], {}, []], ["transformation_matrix", [1, 0, 0, 1, -0.0, 1.5], {}, []], ["rectangle", [[-0.5, 600.0], 4.0, 3.0], {}, []], ["clip", [], {}, []], ["transformation_matrix", [0.3, 0, 0, 0.3, 0, 0], {}, []], ["transparent", [1.0, 1.0], {}, [ ["fill_color", ["000000"], {}, []], ["line_width", [1.0], {}, []], ["cap_style", [:butt], {}, []], ["join_style", [:miter], {}, []], ["undash", [], {}, []], ["save", [], {}, []], ["fill", [], {}, [ ["move_to", [[0.0, 600.0]], {}, []], ["line_to", [[10.0, 595.0]], {}, []], ["line_to", [[0.0, 590.0]], {}, []], ["close_path", [], {}, []] ] ], ["restore", [], {}, []], ] ] ] ], ["restore", [], {}, []] ] end end end