require 'spec_helper' describe Zebra::Epl::Barcode do it "can be initialized with the position of the text to be printed" do barcode = described_class.new :position => [20, 40] barcode.position.should == [20,40] barcode.x.should == 20 barcode.y.should == 40 end it "can be initialized with the barcode rotation" do rotation = Zebra::Epl::Rotation::DEGREES_90 barcode = described_class.new :rotation => rotation barcode.rotation.should == rotation end it "can be initialized with the barcode rotation" do rotation = Zebra::Epl::Rotation::DEGREES_90 barcode = described_class.new :rotation => rotation barcode.rotation.should == rotation end it "can be initialized with the barcode type" do type = Zebra::Epl::BarcodeType::CODE_128_C barcode = described_class.new :type => type barcode.type.should == type end it "can be initialized with the narrow bar width" do barcode = described_class.new :narrow_bar_width => 3 barcode.narrow_bar_width.should == 3 end it "can be initialized with the wide bar width" do barcode = described_class.new :wide_bar_width => 10 barcode.wide_bar_width.should == 10 end it "can be initialized with the barcode height" do barcode = described_class.new :height => 20 barcode.height.should == 20 end it "can be initialized informing if the human readable code should be printed" do barcode = described_class.new :print_human_readable_code => true barcode.print_human_readable_code.should == true end describe "#rotation=" do it "raises an error if the received rotation is invalid" do expect { described_class.new.rotation = 4 }.to raise_error(Zebra::Epl::Rotation::InvalidRotationError) end end describe "#type=" do it "raises an error if the received type is invalid" do expect { described_class.new.type = "ZZZ" }.to raise_error(Zebra::Epl::BarcodeType::InvalidBarcodeTypeError) end end describe "#narrow_bar_width=" do it "raises an error if the type is Code 128 and the width is invalid" do expect { described_class.new :type => Zebra::Epl::BarcodeType::CODE_128_AUTO, :narrow_bar_width => 20 }.to raise_error(Zebra::Epl::Barcode::InvalidNarrowBarWidthError) end end describe "#wide_bar_width=" do it "raises an error if the type is Code 128 and the width is invalid" do expect { described_class.new :type => Zebra::Epl::BarcodeType::CODE_128_AUTO, :wide_bar_width => 40 }.to raise_error(Zebra::Epl::Barcode::InvalidWideBarWidthError) end end describe "#print_human_readable_code" do it "defaults to false" do described_class.new.print_human_readable_code.should == false end end describe "#to_epl" do let(:valid_attributes) { { :position => [100, 150], :type => Zebra::Epl::BarcodeType::CODE_128_AUTO, :height => 20, :narrow_bar_width => 4, :wide_bar_width => 6, :data => "foobar" } } let(:barcode) { described_class.new valid_attributes } let(:tokens) { barcode.to_epl.split(",") } it "raises an error if the X position was not informed" do barcode = described_class.new :position => [nil, 100], :data => "foobar" expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the X value is not given") end it "raises an error if the Y position was not informed" do barcode = described_class.new :position => [100, nil] expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the Y value is not given") end it "raises an error if the barcode type is not informed" do barcode = described_class.new :position => [100, 100], :data => "foobar" expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the barcode type to be used is not given") end it "raises an error if the data to be printed was not informed" do barcode.data = nil expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the data to be printed is not given") end it "raises an error if the height to be used was not informed" do barcode.height = nil expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the height to be used is not given") end it "raises an error if the narrow bar width is not given" do valid_attributes.delete :narrow_bar_width expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the narrow bar width to be used is not given") end it "raises an error if the wide bar width is not given" do valid_attributes.delete :wide_bar_width expect { barcode.to_epl }.to raise_error(Zebra::Epl::Printable::MissingAttributeError, "Can't print if the wide bar width to be used is not given") end it "begins with the command 'B'" do barcode.to_epl.should =~ /\AB/ end it "contains the X position" do tokens[0].match(/B(\d+)/)[1].should == "100" end it "contains the Y position" do tokens[1].should == "150" end it "contains the barcode rotation" do tokens[2].should == Zebra::Epl::Rotation::NO_ROTATION.to_s end it "contains the barcode type" do tokens[3].should == Zebra::Epl::BarcodeType::CODE_128_AUTO end it "contains the barcode narrow bar width" do tokens[4].should == "4" end it "contains the barcode wide bar width" do tokens[5].should == "6" end it "contains the barcode height" do tokens[6].should == "20" end it "contains the correct indication when the human readable code should be printed" do valid_attributes.merge! :print_human_readable_code => true tokens[7].should == "B" end it "contains the correct indication when the human readable code should not be printed" do valid_attributes.merge! :print_human_readable_code => false tokens[7].should == "N" end it "contains the data to be printed in the barcode" do tokens[8].should == "\"foobar\"" end end end