Йордан обнови решението на 15.11.2016 00:49 (преди над 8 години)
+RSpec.describe 'Version' do
+ describe '#Version' do
+ it 'can raise ArgumentError' do
+ expect { Version.new('1.1.5.a') }.to raise_error(
+ ArgumentError, "Invalid version string '1.1.5.a'"
+ )
+
+ expect { Version.new('.1.5') }.to raise_error(
+ ArgumentError, "Invalid version string '.1.5'"
+ )
+
+ expect { Version.new('1..5') }.to raise_error(
+ ArgumentError, "Invalid version string '1..5'"
+ )
+
+ expect { Version.new('1.1.5.') }.to raise_error(
+ ArgumentError, "Invalid version string '1.1.5.'"
+ )
+ end
+ end
+
+ describe '#<=>' do
+ it 'can do <=>' do
+ vers1 = Version.new('1.1.5')
+ vers2 = Version.new('1.1.6')
+ vers3 = Version.new('1.1.6')
+
+ expect(vers1 <=> vers2).to eq(-1)
+ expect(vers2 <=> vers3).to eq(0)
+ expect(vers2 <=> vers1).to eq(1)
+ end
+
+ it 'can do <' do
+ vers1 = Version.new('1.1.5')
+ vers2 = Version.new('1.1.6')
+ vers3 = Version.new('1.1.6')
+
+ expect(vers1 < vers2).to eq(true)
+ expect(vers2 < vers3).to eq(false)
+ expect(vers2 < vers1).to eq(false)
+ end
+
+ it 'can do >' do
+ vers1 = Version.new('1.1.5')
+ vers2 = Version.new('1.1.6')
+ vers3 = Version.new('1.1.6')
+
+ expect(vers1 > vers2).to eq(false)
+ expect(vers2 > vers3).to eq(false)
+ expect(vers2 > vers1).to eq(true)
+ end
+
+ it 'can do <=' do
+ vers1 = Version.new('1.1.5')
+ vers2 = Version.new('1.1.6')
+ vers3 = Version.new('1.1.6')
+
+ expect(vers1 <= vers2).to eq(true)
+ expect(vers2 <= vers3).to eq(true)
+ expect(vers2 <= vers1).to eq(false)
+ end
+
+ it 'can do >=' do
+ vers1 = Version.new('1.1.5')
+ vers2 = Version.new('1.1.6')
+ vers3 = Version.new('1.1.6')
+
+ expect(vers1 >= vers2).to eq(false)
+ expect(vers2 >= vers3).to eq(true)
+ expect(vers2 >= vers1).to eq(true)
+ end
+
+ it 'can do ==' do
+ vers1 = Version.new('1.1.5.0')
+ vers2 = Version.new('1.1.5')
+ vers3 = Version.new('1.5.5')
+ vers4 = Version.new('1.1.5')
+
+ expect(vers1 == vers2).to eq(true)
+ expect(vers2 == vers4).to eq(true)
+ expect(vers1 == vers3).to eq(false)
+ end
+ end
+
+ describe '#to_s' do
+ it 'can show the version as a string' do
+ expect(Version.new('1.2.3').to_s.is_a?(String)).to eq(true)
Тук никъде не проверяваш какъв точно стринг ще ти върне. Мога да върна 'foo'
и пак ще мине тестът ти.
+ expect(Version.new('1.2.3').is_a?(String)).to eq(false)
Това очевидно винаги ще е false
. Защо го тестваш?
+ end
+
+ it 'can show the version as a string without zeroes at the end' do
+ expect(Version.new('1.2.3.0.0.0').to_s.is_a?(String)).to eq(true)
+ expect(Version.new('1.2.3.0.0.0').is_a?(String)).to eq(false)
+ end
+
+ it 'can show the version as a string without parameter' do
+ vers = Version.new
+
+ expect(vers).to eq('')
+ end
+
+ it 'can show the version as a string with empty string parameter' do
+ vers = Version.new('')
+ vers1 = Version.new('0')
+
+ expect(vers).to eq('')
+ expect(vers1).to eq('')
+ end
+ end
+
+ describe '#components' do
+ it 'can return array of the components' do
+ expect(Version.new('1.2.3').components.is_a?(Array)).to eq(true)
Тази проверка е излишна, защото се покрива от долната.
+ expect(Version.new('1.2.3').components).to eq([1, 2, 3])
+ expect(Version.new('1.2.3').components.size).to eq(3)
Тази проверка е излишна, защото се покрива от горната. Забелязваш ли патърна? :)
+ end
+
+ it 'can return array of the components without meaningless zeroes' do
+ expect(Version.new('1.2.3.0.0').components.is_a?(Array)).to eq(true)
+ expect(Version.new('1.2.3.0.0').components).to eq([1, 2, 3])
+ expect(Version.new('1.2.3.0.0').components.size).to eq(3)
+ end
+
+ it 'can return array with exact number of components' do
+ expect(Version.new('1.2.3.0.0').components(2)).to eq([1, 2])
+ end
+
+ it 'can return array filled with zeroes if needed' do
+ expect(Version.new('1.2.3').components(5)).to eq([1, 2, 3, 0, 0])
+ end
+
+ it 'does not modify version' do
+ ver = Version.new('1.2.3')
+ string_version = ver.to_s
+
+ expect(ver.components(5)).to eq([1, 2, 3, 0, 0])
+ expect(ver.to_s).to eq(string_version)
+ end
+ end
+
+ describe '#Range' do
+ describe '#include?' do
+ it 'can check with Version objects' do
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
+ vers = Version.new('1.5')
+ vers1 = Version.new('4.5')
+
+ expect(range.include?(vers)).to eq(true)
+ expect(range.include?(vers1)).to eq(false)
+ end
+
+ it 'can check with Version objects and strings' do
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
+ range1 = Version::Range.new('1', Version.new('2'))
+ range2 = Version::Range.new(Version.new('1'), '2')
+ vers = Version.new('1.5')
+
+ expect(range.include?('1.5')).to eq(true)
+ expect(range1.include?('1.5')).to eq(true)
+ expect(range2.include?('1.5')).to eq(true)
+ expect(range1.include?(vers)).to eq(true)
+ expect(range2.include?(vers)).to eq(true)
+ end
+
+ it 'can check with strings' do
+ range = Version::Range.new('1', '2')
+
+ expect(range.include?('1.5')).to eq(true)
+ expect(range.include?('3.5')).to eq(false)
+ end
+ end
+
+ describe '#to_a' do
+ it 'starts with the version given' do
+ arr = Version::Range.new(
+ Version.new('1.1.0'), Version.new('1.2.2')
+ ).to_a
+ arr1 = Version::Range.new(
+ Version.new('1.0.3'), Version.new('1.5.2')
+ ).to_a
+
+ expect(arr.first).to eq('1.1.0')
+ expect(arr1.first).to eq('1.0.3')
+ end
+
+ it 'excludes the end version' do
+ arr = Version::Range.new(
+ Version.new('1.1.0'), Version.new('1.2.2')
+ ).to_a
+ arr1 = Version::Range.new(
+ Version.new('1.0.3'), Version.new('1.6.0')
+ ).to_a
+
+ expect(arr.last).to eq('1.2.1')
+ expect(arr1.last).to eq('1.5.9')
+ end
+
+ it 'cointains all versions' do
+ arr = Version::Range.new(
+ Version.new('1.1.0'), Version.new('1.2.2')
+ ).to_a
+ arr1 = Version::Range.new(
+ Version.new('1.0.3'), Version.new('1.6.0')
+ ).to_a
+
+ expect(arr.size).to eq(12)
Ако върна ['1.1.0', 1,2,3,4,5,6,7,8,9,10, '1.2.1']
тестовете ти ще минат успешно.
+ expect(arr1.size).to eq(57)
+ end
+ end
+ end
+end