| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  | require "pkg_version" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-18 15:11:11 -08:00
										 |  |  | RSpec.describe PkgVersion do | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |   describe "::parse" do | 
					
						
							|  |  |  |     it "parses versions from a string" do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |       expect(described_class.parse("1.0_1")).to eq(described_class.new(Version.new("1.0"), 1)) | 
					
						
							|  |  |  |       expect(described_class.parse("1.0_1")).to eq(described_class.new(Version.new("1.0"), 1)) | 
					
						
							|  |  |  |       expect(described_class.parse("1.0")).to eq(described_class.new(Version.new("1.0"), 0)) | 
					
						
							|  |  |  |       expect(described_class.parse("1.0_0")).to eq(described_class.new(Version.new("1.0"), 0)) | 
					
						
							|  |  |  |       expect(described_class.parse("2.1.4_0")).to eq(described_class.new(Version.new("2.1.4"), 0)) | 
					
						
							|  |  |  |       expect(described_class.parse("1.0.1e_1")).to eq(described_class.new(Version.new("1.0.1e"), 1)) | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   specify "#==" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |     expect(described_class.parse("1.0_0")).to eq described_class.parse("1.0") | 
					
						
							| 
									
										
										
										
											2021-06-10 13:42:33 +05:30
										 |  |  |     version_to_compare = described_class.parse("1.0_1") | 
					
						
							|  |  |  |     expect(version_to_compare == described_class.parse("1.0_1")).to be true | 
					
						
							|  |  |  |     expect(version_to_compare == described_class.parse("1.0_2")).to be false | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#>" do | 
					
						
							|  |  |  |     it "returns true if the left version is bigger than the right" do | 
					
						
							|  |  |  |       expect(described_class.parse("1.1")).to be > described_class.parse("1.0_1") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns true if the left version is HEAD" do | 
					
						
							|  |  |  |       expect(described_class.parse("HEAD")).to be > described_class.parse("1.0") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "raises an error if the other side isn't of the same class" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |         described_class.new(Version.new("1.0"), 0) > Object.new | 
					
						
							| 
									
										
										
										
											2024-12-05 14:01:37 +00:00
										 |  |  |       end.to raise_error(TypeError) | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "is not compatible with Version" do | 
					
						
							| 
									
										
										
										
											2023-03-08 23:14:46 +00:00
										 |  |  |       expect do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |         described_class.new(Version.new("1.0"), 0) > Version.new("1.0") | 
					
						
							| 
									
										
										
										
											2024-12-05 14:01:37 +00:00
										 |  |  |       end.to raise_error(TypeError) | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#<" do | 
					
						
							|  |  |  |     it "returns true if the left version is smaller than the right" do | 
					
						
							|  |  |  |       expect(described_class.parse("1.0_1")).to be < described_class.parse("2.0_1") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it "returns true if the right version is HEAD" do | 
					
						
							|  |  |  |       expect(described_class.parse("1.0")).to be < described_class.parse("HEAD") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#<=>" do | 
					
						
							|  |  |  |     it "returns nil if the comparison fails" do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |       expect(Object.new <=> described_class.new(Version.new("1.0"), 0)).to be_nil | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#to_s" do | 
					
						
							|  |  |  |     it "returns a string of the form 'version_revision'" do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |       expect(described_class.new(Version.new("1.0"), 0).to_s).to eq("1.0") | 
					
						
							|  |  |  |       expect(described_class.new(Version.new("1.0"), 1).to_s).to eq("1.0_1") | 
					
						
							|  |  |  |       expect(described_class.new(Version.new("1.0"), 0).to_s).to eq("1.0") | 
					
						
							|  |  |  |       expect(described_class.new(Version.new("1.0"), 0).to_s).to eq("1.0") | 
					
						
							|  |  |  |       expect(described_class.new(Version.new("HEAD"), 1).to_s).to eq("HEAD_1") | 
					
						
							|  |  |  |       expect(described_class.new(Version.new("HEAD-ffffff"), 1).to_s).to eq("HEAD-ffffff_1") | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#hash" do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |     let(:version_one_revision_one) { described_class.new(Version.new("1.0"), 1) } | 
					
						
							|  |  |  |     let(:version_one_dot_one_revision_one) { described_class.new(Version.new("1.1"), 1) } | 
					
						
							|  |  |  |     let(:version_one_revision_zero) { described_class.new(Version.new("1.0"), 0) } | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     it "returns a hash based on the version and revision" do | 
					
						
							| 
									
										
										
										
											2023-07-06 16:47:09 +01:00
										 |  |  |       expect(version_one_revision_one.hash).to eq(described_class.new(Version.new("1.0"), 1).hash) | 
					
						
							| 
									
										
										
										
											2023-04-20 12:14:45 +00:00
										 |  |  |       expect(version_one_revision_one.hash).not_to eq(version_one_dot_one_revision_one.hash) | 
					
						
							|  |  |  |       expect(version_one_revision_one.hash).not_to eq(version_one_revision_zero.hash) | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   describe "#version" do | 
					
						
							|  |  |  |     it "returns package version" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").version).to eq Version.new("1.2.3") | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#revision" do | 
					
						
							|  |  |  |     it "returns package revision" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").revision).to eq 4
 | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#major" do | 
					
						
							|  |  |  |     it "returns major version token" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").major).to eq Version::Token.create("1") | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#minor" do | 
					
						
							|  |  |  |     it "returns minor version token" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").minor).to eq Version::Token.create("2") | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#patch" do | 
					
						
							|  |  |  |     it "returns patch version token" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").patch).to eq Version::Token.create("3") | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#major_minor" do | 
					
						
							|  |  |  |     it "returns major.minor version" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").major_minor).to eq Version.new("1.2") | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe "#major_minor_patch" do | 
					
						
							|  |  |  |     it "returns major.minor.patch version" do | 
					
						
							| 
									
										
										
										
											2023-12-14 02:52:30 +00:00
										 |  |  |       expect(described_class.parse("1.2.3_4").major_minor_patch).to eq Version.new("1.2.3") | 
					
						
							| 
									
										
										
										
											2020-08-11 13:13:53 -07:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-02-16 19:53:32 +01:00
										 |  |  | end |