require 'spec_helper' describe Prawn::Svg::Interface do let(:bounds) { double(width: 800, height: 600) } let(:prawn) { instance_double(Prawn::Document, font_families: {}, bounds: bounds, cursor: 600) } let(:svg) { '' } describe "#initialize" do describe "invalid option detection" do it "rejects invalid options when debug is on" do allow(Prawn).to receive(:debug).and_return(true) expect { Prawn::Svg::Interface.new(svg, prawn, :invalid => "option") }.to raise_error(Prawn::Errors::UnknownOption) end it "does nothing if an invalid option is given and debug is off" do Prawn::Svg::Interface.new(svg, prawn, :invalid => "option") end end end describe "#draw" do context "when the sizing object indicates the sizes are invalid" do let(:interface) { Prawn::Svg::Interface.new('', prawn, {}) } it "doesn't draw anything and adds a warning" do interface.draw expect(interface.document.warnings).to eq ["Zero or negative sizing data means this SVG cannot be rendered"] end end end describe "#position" do subject { interface.position } context "when options[:at] supplied" do let(:interface) { Prawn::Svg::Interface.new(svg, prawn, at: [1, 2], position: :left) } it "returns options[:at]" do expect(subject).to eq [1, 2] end end context "when only a position is supplied" do let(:interface) { Prawn::Svg::Interface.new(svg, prawn, position: position) } context "(:left)" do let(:position) { :left } it { is_expected.to eq [0, 600] } end context "(:center)" do let(:position) { :center } it { is_expected.to eq [275, 600] } end context "(:right)" do let(:position) { :right } it { is_expected.to eq [550, 600] } end context "a number" do let(:position) { 25.5 } it { is_expected.to eq [25.5, 600] } end end context "when a vposition is supplied" do let(:interface) { Prawn::Svg::Interface.new(svg, prawn, vposition: vposition) } context "(:top)" do let(:vposition) { :top } it { is_expected.to eq [0, 600] } end context "(:center)" do let(:vposition) { :center } it { is_expected.to eq [0, 350] } end context "(:bottom)" do let(:vposition) { :bottom } it { is_expected.to eq [0, 100] } end context "a number" do let(:vposition) { 25.5 } it { is_expected.to eq [0, 600 - 25.5] } end end end end