require 'spec_helper' describe CPE::URL do describe "parse" do context "when the URL does not start with 'cpe:'" do it "should raise an ArgumentError" do lambda { described_class.parse('foo:') }.should raise_error(ArgumentError) end end context "when blank fields are omitted" do let(:vendor) { :linux } let(:product) { :linux_kernel } let(:version) { '2.6.39' } subject do described_class.parse("cpe:/o:#{vendor}:#{product}:#{version}") end it "should leave them nil" do subject.vendor.should == vendor subject.product.should == product subject.version.should == version subject.update.should be_nil subject.edition.should be_nil subject.language.should be_nil end end context "when part is /h" do subject { described_class.parse("cpe:/h:foo:bar:baz") } it "should parse it as :hardware" do subject.part.should == :hardware end end context "when part is /a" do subject { described_class.parse("cpe:/a:foo:bar:baz") } it "should parse it as :application" do subject.part.should == :application end end context "when part is /o" do subject { described_class.parse("cpe:/o:foo:bar:baz") } it "should parse it as :os" do subject.part.should == :os end end end describe "#to_s" do let(:vendor) { :linux } let(:product) { :linux_kernel } let(:version) { '2.6.39' } it "should add the scheme 'cpe:'" do subject.to_s.should start_with('cpe:') end context "when fields are nil" do subject { described_class.new(:os,vendor,product,version) } it "should omit them" do subject.to_s.should == "cpe:/o:#{vendor}:#{product}:#{version}" end end context "when part is :hardware" do subject { described_class.new(:hardware) } it "should map it to /h" do subject.to_s.should == "cpe:/h" end end context "when part is :application" do subject { described_class.new(:application) } it "should map it to /h" do subject.to_s.should == "cpe:/a" end end context "when part is :os" do subject { described_class.new(:os) } it "should map it to /h" do subject.to_s.should == "cpe:/o" end end end end