Милена обнови решението на 18.11.2016 22:07 (преди над 8 години)
+describe Version do
+ describe '#<=>' do
+ it 'compares versions when the second is older' do
+ first_version = Version.new('1.2.3')
+ second_version = Version.new('1.3.0')
+ result = first_version <=> second_version
+
+ expect(result).to eq(-1)
+ end
+
+ it 'compares versions when the first is older' do
+ first_version = Version.new('1.4.3')
+ second_version = Version.new('1.3.0')
+ result = first_version <=> second_version
+
+ expect(result).to eq(1)
+ end
+
+ it 'comapres version when they equals' do
+ first_version = Version.new('1.1.1.0')
+ second_version = Version.new('1.1.1')
+ result = first_version <=> second_version
+
+ expect(result).to eq(0)
+ end
+ end
+
+ describe '#initialize' do
+ it ' works with no arguments given' do
+ version = Version.new
+ expect(version).to eq(Version.new(0))
+ end
+
+ it 'throws an exception with invalid arguments given' do
+ expect { Version.new('aa') }
+ .to raise_error(ArgumentError, "Invalid version string 'aa'")
+ end
+
+ it 'throws an exception with invalid arguments given' do
+ expect { Version.new(-2) }
+ .to raise_error(ArgumentError, "Invalid version string '-2'")
+ end
+ end
+
+ describe '#components' do
+ it 'removes zeros when no arguments are given' do
+ expect(Version.new('1.2.3.2.0').components).to eq([1, 2, 3, 2])
+ end
+
+ it 'works with less than components count arguments given' do
+ expect(Version.new('1.2.3.2.4.2.1').components(5)).to eq([1, 2, 3, 2, 4])
+ end
+
+ it 'works with parameter less than the count of the components given' do
+ expect(Version.new('1.2.3').components(2)).to eq([1, 2])
+ end
+
+ it 'works with parameter more than the count of the components given' do
+ expect(Version.new('1.2.3').components(5)).to eq([1, 2, 3, 0, 0])
+ end
+
+ it 'works with version 0' do
+ expect(Version.new('0').components).to eq([])
+ end
+
+ it 'does not change the object' do
+ version = Version.new('1.2.3')
+ components = version.components
+ components << '4'
+
+ expect(version).to eq(Version.new('1.2.3'))
+ end
+ end
+
+ describe '#to_s' do
+ it 'converts to string correctly' do
+ expect(Version.new('1.2.3').to_s).to eq('1.2.3')
+ end
+
+ it 'converts to string correctly and removes zeroes from the end' do
+ expect(Version.new('1.2.3.0.0').to_s).to eq('1.2.3')
+ end
+ end
+
+ describe Version::Range do
+ describe '#include?' do
+ it 'checks if the version is included in range' do
+ start_version = Version.new('1')
+ end_version = Version.new('2')
+ range = Version::Range.new(start_version, end_version)
+ expect(range.include?(Version.new('1.5'))).to eq(true)
+ end
+
+ it 'checks if the version is included in range' do
+ start_version = Version.new('1')
+ end_version = Version.new('2')
+ range = Version::Range.new(start_version, end_version)
+ expect(range.include?(Version.new('2.1'))).to eq(false)
+ end
+
+ it 'checks if the version is included in range and is two digit numer' do
+ start_version = Version.new('1')
+ end_version = Version.new('2')
+ range = Version::Range.new(start_version, end_version)
+ expect(range.include?(Version.new('1.10.1'))).to eq(true)
+ end
+
+ it 'checks if the version is included in range' do
+ start_version = Version.new('1')
+ end_version = Version.new('1')
+ range = Version::Range.new(start_version, end_version)
+ expect(range.include?(Version.new('1'))).to eq(false)
+ end
+
+ it 'works when strings are passed as arguments' do
+ expect(Version::Range.new('1', '3').include?(2)).to eq(true)
+ end
+
+ it 'works when strings are passed as arguments' do
+ expect(Version::Range.new('1', '1.1').include?(1)).to eq(true)
+ end
+
+ it 'works when strings are passed as arguments' do
+ expect(Version::Range.new('1', '1').include?(1)).to eq(false)
+ end
+ end
+
+ describe '#to_a' do
+ it 'converts to array' do
+ range = Version::Range.new(Version.new('1.1'), Version.new('1.1.4'))
+ expect(range.to_a).to eq(["1.1", '1.1.1', "1.1.2", "1.1.3"])
+ end
+
+ it 'returns empty array when there is no version between them' do
+ range = Version::Range.new(Version.new('1'), Version.new('1'))
+ expect(range.to_a).to eq([])
+ end
+
+ it 'includes the first and does not includes the last version' do
+ range = Version::Range.new(Version.new('1.9.3'), Version.new('1.9.7'))
+ expect(range.to_a).to eq ['1.9.3', '1.9.4', '1.9.5', '1.9.6']
+ end
+ end
+ end
+end