# encoding: utf-8 require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper") describe "When stroking with default settings" do before(:each) { create_pdf } it "cap_style should be :butt" do expect(@pdf.cap_style).to eq(:butt) end it "join_style should be :miter" do expect(@pdf.join_style).to eq(:miter) end it "dashed? should be_false" do expect(@pdf).not_to be_dashed end end describe "Cap styles" do before(:each) { create_pdf } it "should be able to use assignment operator" do @pdf.cap_style = :round expect(@pdf.cap_style).to eq(:round) end describe "#cap_style(:butt)" do it "rendered PDF should include butt style cap" do @pdf.cap_style(:butt) cap_style = PDF::Inspector::Graphics::CapStyle.analyze(@pdf.render).cap_style expect(cap_style).to eq(0) end end describe "#cap_style(:round)" do it "rendered PDF should include round style cap" do @pdf.cap_style(:round) cap_style = PDF::Inspector::Graphics::CapStyle.analyze(@pdf.render).cap_style expect(cap_style).to eq(1) end end describe "#cap_style(:projecting_square)" do it "rendered PDF should include projecting_square style cap" do @pdf.cap_style(:projecting_square) cap_style = PDF::Inspector::Graphics::CapStyle.analyze(@pdf.render).cap_style expect(cap_style).to eq(2) end end it "should carry the current cap style settings over to new pages" do @pdf.cap_style(:round) @pdf.start_new_page cap_styles = PDF::Inspector::Graphics::CapStyle.analyze(@pdf.render) expect(cap_styles.cap_style_count).to eq(2) expect(cap_styles.cap_style).to eq(1) end end describe "Join styles" do before(:each) { create_pdf } it "should be able to use assignment operator" do @pdf.join_style = :round expect(@pdf.join_style).to eq(:round) end describe "#join_style(:miter)" do it "rendered PDF should include miter style join" do @pdf.join_style(:miter) join_style = PDF::Inspector::Graphics::JoinStyle.analyze(@pdf.render).join_style expect(join_style).to eq(0) end end describe "#join_style(:round)" do it "rendered PDF should include round style join" do @pdf.join_style(:round) join_style = PDF::Inspector::Graphics::JoinStyle.analyze(@pdf.render).join_style expect(join_style).to eq(1) end end describe "#join_style(:bevel)" do it "rendered PDF should include bevel style join" do @pdf.join_style(:bevel) join_style = PDF::Inspector::Graphics::JoinStyle.analyze(@pdf.render).join_style expect(join_style).to eq(2) end end it "should carry the current join style settings over to new pages" do @pdf.join_style(:round) @pdf.start_new_page join_styles = PDF::Inspector::Graphics::JoinStyle.analyze(@pdf.render) expect(join_styles.join_style_count).to eq(2) expect(join_styles.join_style).to eq(1) end end describe "Dashes" do before(:each) { create_pdf } it "should be able to use assignment operator" do @pdf.dash = 2 expect(@pdf).to be_dashed end describe "setting a dash" do it "dashed? should be_true" do @pdf.dash(2) expect(@pdf).to be_dashed end it "rendered PDF should include a stroked dash" do @pdf.dash(2) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[2, 2], 0]) end end describe "setting a dash by passing a single argument" do it "space between dashes should be the same length as the dash in the rendered PDF" do @pdf.dash(2) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[2, 2], 0]) end end describe "with a space option that differs from the first argument" do it "space between dashes in the rendered PDF should be different length than the length of the dash" do @pdf.dash(2, :space => 3) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[2, 3], 0]) end end describe "with a non-zero phase option" do it "rendered PDF should include a non-zero phase" do @pdf.dash(2, :phase => 1) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[2, 2], 1]) end end describe "setting a dash by using an array" do it "dash and spaces should be set from the array" do @pdf.dash([1, 2, 3, 4]) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[1, 2, 3, 4], 0]) end it "space options has to be ignored" do @pdf.dash([1, 2, 3, 4], :space => 3) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[1, 2, 3, 4], 0]) end it "phase options should be correctly used" do @pdf.dash([1, 2, 3, 4], :phase => 3) dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[1, 2, 3, 4], 3]) end end describe "clearing stroke dash" do it "should restore solid line" do @pdf.dash(2) @pdf.undash dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash).to eq([[], 0]) end end it "should carry the current dash settings over to new pages" do @pdf.dash(2) @pdf.start_new_page dashes = PDF::Inspector::Graphics::Dash.analyze(@pdf.render) expect(dashes.stroke_dash_count).to eq(2) expect(dashes.stroke_dash).to eq([[2, 2], 0]) end describe "#dashed?" do it "an initial document should not be dashed" do expect(@pdf.dashed?).to eq(false) end it "should return true if any of the currently active settings are dashed" do @pdf.dash(2) @pdf.save_graphics_state expect(@pdf.dashed?).to eq(true) end it "should return false if the document was most recently undashed" do @pdf.dash(2) @pdf.save_graphics_state @pdf.undash @pdf.save_graphics_state expect(@pdf.dashed?).to eq(false) end it "should return true when restoring to a state that was dashed" do @pdf.dash(2) @pdf.save_graphics_state @pdf.undash @pdf.restore_graphics_state expect(@pdf.dashed?).to eq(true) end end end