Решение на Четвърта задача - Unit тестване от Никола Жишев

Обратно към всички решения

Към профила на Никола Жишев

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 18 успешни тест(а)
  • 1 неуспешни тест(а)

Код

RSpec.describe Version do
it "doesn't create invalid versions" do
expect { Version.new('.3') }.to raise_error(
ArgumentError,
"Invalid version string '.3'"
)
expect { Version.new('0..3') }.to raise_error(
ArgumentError,
"Invalid version string '0..3'"
)
expect { Version.new('123213213..') }.to raise_error(
ArgumentError,
"Invalid version string '123213213..'"
)
end
it 'creates valid versions without arguments' do
expect { Version.new }.not_to raise_error
expect { Version.new '' }.not_to raise_error
end
it 'creates valid version out of another version' do
version = Version.new
expect { Version.new(version) }.not_to raise_error
end
it "parses components" do
version = Version.new("1.1.1")
expect(version.components).to eq([1, 1, 1])
end
it "parses components with argument" do
version = Version.new('1.2.3')
expect(version.components(1)).to eq([1])
expect(version.components(2)).to eq([1, 2])
expect(version.components(4)).to eq([1, 2, 3, 0])
end
context 'comparing versions' do
it "can compare with #<=>" do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
version4 = Version.new('1.3.1.1.2')
expect( version1 <=> version2 ).to eq -1
expect( version2 <=> version3 ).to eq 0
expect( version4 <=> version2 ).to eq 1
end
it "can compare with #==" do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect( version1 == version2 ).to be true
expect( version1 == version3 ).to be false
end
it 'can compare with #>' do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
version4 = Version.new('1.3.1.1.2')
expect(version2 > version1).to be true
expect(version3 > version4).to be false
end
it 'can compare with #<' do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
expect(version1 < version2).to be true
expect(version2 < version3).to be false
end
it 'can compare with #>=' do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect(version1 >= version2).to be true
expect(version1 >= version3).to be false
end
it 'can compare with #<=' do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect(version1 <= version2).to be true
expect(version3 <= version1).to be false
end
end
describe "#to_s" do
it "returns the version as string" do
version = Version.new('1.1.1.0')
expect(version.to_s).to eq '1.1.1'
end
end
describe Version::Range do
describe '#include?' do
it 'checks if a range includes a version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
expect(range).to include('1.2.3.4.1')
expect(range).to_not include('0.9.9.9.9.9.9.9')
expect(range).to_not include(Version.new('2.0.0.1'))
end
end
describe '#to_a' do
it 'returns all versions in a range' do
range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2', '1.1.3',
'1.1.4', '1.1.5', '1.1.6', '1.1.7',
'1.1.8', '1.1.9', '1.2', '1.2.1'
]
end
it 'works with 3 components only' do
range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2',
'1.1.3', '1.1.4', '1.1.5',
'1.1.6', '1.1.7', '1.1.8', '1.1.9'
]
end
it "doesn't include first version if it's same like last" do
range = Version::Range.new(Version.new('0'), Version.new('0'))
expect(range.to_a).to eq []
end
it "works with strings" do
range = Version::Range.new('0', '0.0.9')
expect(range.to_a).to eq [
'0', '0.0.1', '0.0.2',
'0.0.3', '0.0.4', '0.0.5',
'0.0.6', '0.0.7', '0.0.8'
]
end
end
end
end

Лог от изпълнението

..........F........

Failures:

  1) spec Version tests that #components cannot be used to modify the version
     Failure/Error: expect(@solution).to_not pass_tests
       expected this solution to not pass the tests:
       
         class Version
           VALID_VERSION_REGEXP = /\A\z|\A[0-9]+(\.[0-9]+)*\z/
         
           include Comparable
         
           def initialize(version = '')
             unless VALID_VERSION_REGEXP.match(version.to_s)
               raise ArgumentError, "Invalid version string '#{version}'"
             end
         
             @components = version.to_s
               .split('.')
               .map(&:to_i)
               .reverse
               .drop_while(&:zero?)
               .reverse
           end
         
           def <=>(other)
             @components <=> Version.new(other).internal_components
           end
         
           def internal_components(positions = 0)
             padding_size = positions - @components.size
         
             if padding_size > 0
               @components + [0] * padding_size
             elsif positions != 0
               @components.take(positions)
             else
               @components.dup
             end
           end
         
           def components(positions = 0)
             padding_size = positions - @components.size
           
             if padding_size > 0
               @components + [0] * padding_size
             elsif positions != 0
               @components.take(positions)
             else
               @components
             end
           end
         
           def to_s
             @components.join('.')
           end
         
           class Range
             include Enumerable
         
             def initialize(start_version, end_version)
               @start_version = Version.new(start_version)
               @end_version   = Version.new(end_version)
             end
         
             def include?(version)
               (@start_version <=> version) < 1 && (@end_version <=> version) == 1
             end
         
             def each
               current_version = @start_version
         
               while (current_version <=> @end_version) == -1
                 yield current_version
         
                 current_version = increment_version(current_version)
               end
             end
         
             private
         
             def increment_version(version)
               components = version.internal_components(3)
         
               components[2] += 1
         
               components.to_enum.with_index.reverse_each do |_, index|
                 component = components[index]
         
                 if component >= 10 && components[index - 1]
                   components[index]      = 0
                   components[index - 1] += 1
                 end
               end
         
               Version.new(components.join('.'))
             end
           end
         end
     # /tmp/d20161119-19072-e1uedx/spec.rb:456:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>'

Finished in 19.49 seconds
19 examples, 1 failure

Failed examples:

rspec /tmp/d20161119-19072-e1uedx/spec.rb:441 # spec Version tests that #components cannot be used to modify the version

История (5 версии и 6 коментара)

Никола обнови решението на 17.11.2016 15:17 (преди над 7 години)

+require 'rspec'
+require_relative 'version'
+
+RSpec.describe Version do
+ it 'creates valid versions' do
+ expect { Version.new }.not_to raise_error
+ expect { Version.new('1.2.3.4.5.6.7.8') }.not_to raise_error
+ expect { Version.new('1.1.5') }.not_to raise_error
+ expect { Version.new('1.13.3') }.not_to raise_error
+ end
+
+ it 'doesnt create valid versions' do
+ expect { Version.new('.3') }.to raise_error(
+ ArgumentError,
+ "Invalid version string '.3'"
+ )
+ expect { Version.new('0..3') }.to raise_error(
+ ArgumentError,
+ "Invalid version string '0..3'"
+ )
+ expect { Version.new('123213213..') }.to raise_error(
+ ArgumentError,
+ "Invalid version string '123213213..'"
+ )
+ end
+
+ it "parses components" do
+ v = Version.new("1.1.1")
+
+ expect(v.components).to eq([1, 1, 1])
+ end
+
+ it "parse components with argument" do
+ v = Version.new('1.2.3')
+
+ expect(v.components(1)).to eq([1])
+ expect(v.components(2)).to eq([1, 2])
+ expect(v.components(4)).to eq([1, 2, 3, 0])
+ end
+
+ context 'comparing versions' do
+ let(:v1) { Version.new('1.2.3.0.1') }
+ let(:v2) { Version.new('1.3.1') }
+ let(:v3) { Version.new('1.3.1.0') }
+ let(:v4) { Version.new('1.3.1.1.2') }
+
+ it "can compare with #<=>" do
+ expect( v1 <=> v2 ).to eq -1
+ expect( v2 <=> v3 ).to eq 0
+ expect( v4 <=> v2 ).to eq 1
+ end
+
+ it "can compare with #==" do
+ expect( v2 == v3 ).to be true
+ expect( v2 == v4 ).to be false
+ end
+
+ it 'can compare with #>' do
+ expect(v2 > v1).to be true
+ expect(v3 > v4).to be false
+ end
+
+ it 'can compare with #<' do
+ expect(v1 < v2).to be true
+ expect(v2 < v3).to be false
+ end
+
+ it 'can compare with #>=' do
+ expect(v2 >= v3).to be true
+ expect(v2 >= v4).to be false
+ end
+
+ it 'can compare with #<=' do
+ expect(v2 <= v3).to be true
+ expect(v4 <= v2).to be false
+ end
+ end
+
+ describe "#to_s" do
+ it "returns the version as string" do
+ v = Version.new('1.1.1.0')
+
+ expect(v.to_s).to eq '1.1.1'
+ end
+ end
+end
+
+describe Version::Range do
+ describe '#include?' do
+ it 'checks if a range includes a version' do
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
+
+ expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
+ expect(range).to include('1.2.3.4.1')
+ expect(range).to_not include('0.9.9.9.9.9.9.9')
+ expect(range).to_not include(Version.new('2.0.0.1'))
+ end
+ end
+
+ describe '#to_a' do
+ it 'returns all versions in a range' do
+ range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
+ expect(range.to_a).to eq [
+ '1.1', '1.1.1', '1.1.2', '1.1.3',
+ '1.1.4', '1.1.5', '1.1.6', '1.1.7',
+ '1.1.8', '1.1.9', '1.2', '1.2.1'
+ ]
+ end
+
+ it 'works only with 3 components' do
+ range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
+ expect(range.to_a).to eq [
+ '1.1', '1.1.1', '1.1.2',
+ '1.1.3', '1.1.4', '1.1.5',
+ '1.1.6', '1.1.7', '1.1.8', '1.1.9'
+ ]
+ end
+
+ it 'includes first version' do
+ range = Version::Range.new(Version.new('0.0.1'), Version.new('3')).to_a
+
+ expect(range.to_a).to include('0.0.1')
+ end
+
+ it 'doesnt include last version' do
+ range = Version::Range.new(Version.new('0.1'), Version.new('3')).to_a
+
+ expect(range.to_a).not_to include('3')
+ end
+ end
+end

Никола обнови решението на 17.11.2016 15:19 (преди над 7 години)

-require 'rspec'
-require_relative 'version'
-
RSpec.describe Version do
it 'creates valid versions' do
expect { Version.new }.not_to raise_error
expect { Version.new('1.2.3.4.5.6.7.8') }.not_to raise_error
expect { Version.new('1.1.5') }.not_to raise_error
expect { Version.new('1.13.3') }.not_to raise_error
end
it 'doesnt create valid versions' do
expect { Version.new('.3') }.to raise_error(
ArgumentError,
"Invalid version string '.3'"
)
expect { Version.new('0..3') }.to raise_error(
ArgumentError,
"Invalid version string '0..3'"
)
expect { Version.new('123213213..') }.to raise_error(
ArgumentError,
"Invalid version string '123213213..'"
)
end
it "parses components" do
v = Version.new("1.1.1")
expect(v.components).to eq([1, 1, 1])
end
it "parse components with argument" do
v = Version.new('1.2.3')
expect(v.components(1)).to eq([1])
expect(v.components(2)).to eq([1, 2])
expect(v.components(4)).to eq([1, 2, 3, 0])
end
context 'comparing versions' do
let(:v1) { Version.new('1.2.3.0.1') }
let(:v2) { Version.new('1.3.1') }
let(:v3) { Version.new('1.3.1.0') }
let(:v4) { Version.new('1.3.1.1.2') }
it "can compare with #<=>" do
expect( v1 <=> v2 ).to eq -1
expect( v2 <=> v3 ).to eq 0
expect( v4 <=> v2 ).to eq 1
end
it "can compare with #==" do
expect( v2 == v3 ).to be true
expect( v2 == v4 ).to be false
end
it 'can compare with #>' do
expect(v2 > v1).to be true
expect(v3 > v4).to be false
end
it 'can compare with #<' do
expect(v1 < v2).to be true
expect(v2 < v3).to be false
end
it 'can compare with #>=' do
expect(v2 >= v3).to be true
expect(v2 >= v4).to be false
end
it 'can compare with #<=' do
expect(v2 <= v3).to be true
expect(v4 <= v2).to be false
end
end
describe "#to_s" do
it "returns the version as string" do
v = Version.new('1.1.1.0')
expect(v.to_s).to eq '1.1.1'
end
end
end
describe Version::Range do
describe '#include?' do
it 'checks if a range includes a version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
expect(range).to include('1.2.3.4.1')
expect(range).to_not include('0.9.9.9.9.9.9.9')
expect(range).to_not include(Version.new('2.0.0.1'))
end
end
describe '#to_a' do
it 'returns all versions in a range' do
range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2', '1.1.3',
'1.1.4', '1.1.5', '1.1.6', '1.1.7',
'1.1.8', '1.1.9', '1.2', '1.2.1'
]
end
it 'works only with 3 components' do
range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2',
'1.1.3', '1.1.4', '1.1.5',
'1.1.6', '1.1.7', '1.1.8', '1.1.9'
]
end
it 'includes first version' do
range = Version::Range.new(Version.new('0.0.1'), Version.new('3')).to_a
expect(range.to_a).to include('0.0.1')
end
it 'doesnt include last version' do
range = Version::Range.new(Version.new('0.1'), Version.new('3')).to_a
expect(range.to_a).not_to include('3')
end
end
end

Никола обнови решението на 17.11.2016 16:23 (преди над 7 години)

RSpec.describe Version do
- it 'creates valid versions' do
- expect { Version.new }.not_to raise_error
- expect { Version.new('1.2.3.4.5.6.7.8') }.not_to raise_error
- expect { Version.new('1.1.5') }.not_to raise_error
- expect { Version.new('1.13.3') }.not_to raise_error
- end
-
- it 'doesnt create valid versions' do
+ it "doesn't create valid versions" do
expect { Version.new('.3') }.to raise_error(
ArgumentError,
"Invalid version string '.3'"
)
expect { Version.new('0..3') }.to raise_error(
ArgumentError,
"Invalid version string '0..3'"
)
expect { Version.new('123213213..') }.to raise_error(
ArgumentError,
"Invalid version string '123213213..'"
)
end
it "parses components" do
- v = Version.new("1.1.1")
+ version = Version.new("1.1.1")
- expect(v.components).to eq([1, 1, 1])
+ expect(version.components).to eq([1, 1, 1])
end
- it "parse components with argument" do
- v = Version.new('1.2.3')
+ it "parses components with argument" do
+ version = Version.new('1.2.3')
- expect(v.components(1)).to eq([1])
- expect(v.components(2)).to eq([1, 2])
- expect(v.components(4)).to eq([1, 2, 3, 0])
+ expect(version.components(1)).to eq([1])
+ expect(version.components(2)).to eq([1, 2])
+ expect(version.components(4)).to eq([1, 2, 3, 0])
end
context 'comparing versions' do
- let(:v1) { Version.new('1.2.3.0.1') }
- let(:v2) { Version.new('1.3.1') }
- let(:v3) { Version.new('1.3.1.0') }
- let(:v4) { Version.new('1.3.1.1.2') }
-
it "can compare with #<=>" do
- expect( v1 <=> v2 ).to eq -1
- expect( v2 <=> v3 ).to eq 0
- expect( v4 <=> v2 ).to eq 1
+ version1 = Version.new('1.2.3.0.1')
+ version2 = Version.new('1.3.1')
+ version3 = Version.new('1.3.1.0')
+ version4 = Version.new('1.3.1.1.2')
+
+ expect( version1 <=> version2 ).to eq -1
+ expect( version2 <=> version3 ).to eq 0
+ expect( version4 <=> version2 ).to eq 1
end
it "can compare with #==" do
- expect( v2 == v3 ).to be true
- expect( v2 == v4 ).to be false
+ version1 = Version.new('1.3.1')
+ version2 = Version.new('1.3.1.0')
+ version3 = Version.new('1.3.1.1.2')
+
+ expect( version1 == version2 ).to be true
+ expect( version1 == version3 ).to be false
end
it 'can compare with #>' do
- expect(v2 > v1).to be true
- expect(v3 > v4).to be false
+ version1 = Version.new('1.2.3.0.1')
+ version2 = Version.new('1.3.1')
+ version3 = Version.new('1.3.1.0')
+ version4 = Version.new('1.3.1.1.2')
+
+ expect(version2 > version1).to be true
+ expect(version3 > version4).to be false
end
it 'can compare with #<' do
- expect(v1 < v2).to be true
- expect(v2 < v3).to be false
+ version1 = Version.new('1.2.3.0.1')
+ version2 = Version.new('1.3.1')
+ version3 = Version.new('1.3.1.0')
+
+ expect(version1 < version2).to be true
+ expect(version2 < version3).to be false
end
it 'can compare with #>=' do
- expect(v2 >= v3).to be true
- expect(v2 >= v4).to be false
+ version1 = Version.new('1.3.1')
+ version2 = Version.new('1.3.1.0')
+ version3 = Version.new('1.3.1.1.2')
+
+ expect(version1 >= version2).to be true
+ expect(version1 >= version3).to be false
end
it 'can compare with #<=' do
- expect(v2 <= v3).to be true
- expect(v4 <= v2).to be false
+ version1 = Version.new('1.3.1')
+ version2 = Version.new('1.3.1.0')
+ version3 = Version.new('1.3.1.1.2')
+
+ expect(version1 <= version2).to be true
+ expect(version3 <= version1).to be false
end
end
describe "#to_s" do
it "returns the version as string" do
- v = Version.new('1.1.1.0')
+ version = Version.new('1.1.1.0')
- expect(v.to_s).to eq '1.1.1'
+ expect(version.to_s).to eq '1.1.1'
end
end
end
describe Version::Range do
describe '#include?' do
it 'checks if a range includes a version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
expect(range).to include('1.2.3.4.1')
expect(range).to_not include('0.9.9.9.9.9.9.9')
expect(range).to_not include(Version.new('2.0.0.1'))
end
end
describe '#to_a' do
it 'returns all versions in a range' do
range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2', '1.1.3',
'1.1.4', '1.1.5', '1.1.6', '1.1.7',
'1.1.8', '1.1.9', '1.2', '1.2.1'
]
end
- it 'works only with 3 components' do
+ it 'works with 3 components only' do
range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2',
'1.1.3', '1.1.4', '1.1.5',
'1.1.6', '1.1.7', '1.1.8', '1.1.9'
]
- end
-
- it 'includes first version' do
- range = Version::Range.new(Version.new('0.0.1'), Version.new('3')).to_a
-
- expect(range.to_a).to include('0.0.1')
- end
-
- it 'doesnt include last version' do
- range = Version::Range.new(Version.new('0.1'), Version.new('3')).to_a
-
- expect(range.to_a).not_to include('3')
end
end
end

Никола обнови решението на 18.11.2016 11:48 (преди над 7 години)

RSpec.describe Version do
- it "doesn't create valid versions" do
+ it "doesn't create invalid versions" do
expect { Version.new('.3') }.to raise_error(
ArgumentError,
"Invalid version string '.3'"
)
expect { Version.new('0..3') }.to raise_error(
ArgumentError,
"Invalid version string '0..3'"
)
expect { Version.new('123213213..') }.to raise_error(
ArgumentError,
"Invalid version string '123213213..'"
)
end
it "parses components" do
version = Version.new("1.1.1")
expect(version.components).to eq([1, 1, 1])
end
it "parses components with argument" do
version = Version.new('1.2.3')
expect(version.components(1)).to eq([1])
expect(version.components(2)).to eq([1, 2])
expect(version.components(4)).to eq([1, 2, 3, 0])
end
context 'comparing versions' do
it "can compare with #<=>" do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
version4 = Version.new('1.3.1.1.2')
expect( version1 <=> version2 ).to eq -1
expect( version2 <=> version3 ).to eq 0
expect( version4 <=> version2 ).to eq 1
end
it "can compare with #==" do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect( version1 == version2 ).to be true
expect( version1 == version3 ).to be false
end
it 'can compare with #>' do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
version4 = Version.new('1.3.1.1.2')
expect(version2 > version1).to be true
expect(version3 > version4).to be false
end
it 'can compare with #<' do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
expect(version1 < version2).to be true
expect(version2 < version3).to be false
end
it 'can compare with #>=' do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect(version1 >= version2).to be true
expect(version1 >= version3).to be false
end
it 'can compare with #<=' do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect(version1 <= version2).to be true
expect(version3 <= version1).to be false
end
end
describe "#to_s" do
it "returns the version as string" do
version = Version.new('1.1.1.0')
expect(version.to_s).to eq '1.1.1'
end
end
end
describe Version::Range do
describe '#include?' do
it 'checks if a range includes a version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
expect(range).to include('1.2.3.4.1')
expect(range).to_not include('0.9.9.9.9.9.9.9')
expect(range).to_not include(Version.new('2.0.0.1'))
end
end
describe '#to_a' do
it 'returns all versions in a range' do
range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2', '1.1.3',
'1.1.4', '1.1.5', '1.1.6', '1.1.7',
'1.1.8', '1.1.9', '1.2', '1.2.1'
]
end
it 'works with 3 components only' do
range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
expect(range.to_a).to eq [
'1.1', '1.1.1', '1.1.2',
'1.1.3', '1.1.4', '1.1.5',
'1.1.6', '1.1.7', '1.1.8', '1.1.9'
+ ]
+ end
+
+ it "doesn't include first version if it's same like last" do
+ range = Version::Range.new(Version.new('0'), Version.new('0'))
+ expect(range.to_a).to eq []
+ end
+
+ it "works with strings" do
+ range = Version::Range.new('0', '0.0.9')
+ expect(range.to_a).to eq [
+ '0', '0.0.1', '0.0.2',
+ '0.0.3', '0.0.4', '0.0.5',
+ '0.0.6', '0.0.7', '0.0.8'
]
end
end
end

Никола обнови решението на 18.11.2016 15:39 (преди над 7 години)

RSpec.describe Version do
it "doesn't create invalid versions" do
expect { Version.new('.3') }.to raise_error(
ArgumentError,
"Invalid version string '.3'"
)
expect { Version.new('0..3') }.to raise_error(
ArgumentError,
"Invalid version string '0..3'"
)
expect { Version.new('123213213..') }.to raise_error(
ArgumentError,
"Invalid version string '123213213..'"
)
end
+ it 'creates valid versions without arguments' do
+ expect { Version.new }.not_to raise_error
+ expect { Version.new '' }.not_to raise_error
+ end
+
+ it 'creates valid version out of another version' do
+ version = Version.new
+ expect { Version.new(version) }.not_to raise_error
+ end
+
it "parses components" do
version = Version.new("1.1.1")
expect(version.components).to eq([1, 1, 1])
end
it "parses components with argument" do
version = Version.new('1.2.3')
expect(version.components(1)).to eq([1])
expect(version.components(2)).to eq([1, 2])
expect(version.components(4)).to eq([1, 2, 3, 0])
end
context 'comparing versions' do
it "can compare with #<=>" do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
version4 = Version.new('1.3.1.1.2')
expect( version1 <=> version2 ).to eq -1
expect( version2 <=> version3 ).to eq 0
expect( version4 <=> version2 ).to eq 1
end
it "can compare with #==" do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect( version1 == version2 ).to be true
expect( version1 == version3 ).to be false
end
it 'can compare with #>' do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
version4 = Version.new('1.3.1.1.2')
expect(version2 > version1).to be true
expect(version3 > version4).to be false
end
it 'can compare with #<' do
version1 = Version.new('1.2.3.0.1')
version2 = Version.new('1.3.1')
version3 = Version.new('1.3.1.0')
expect(version1 < version2).to be true
expect(version2 < version3).to be false
end
it 'can compare with #>=' do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect(version1 >= version2).to be true
expect(version1 >= version3).to be false
end
it 'can compare with #<=' do
version1 = Version.new('1.3.1')
version2 = Version.new('1.3.1.0')
version3 = Version.new('1.3.1.1.2')
expect(version1 <= version2).to be true
expect(version3 <= version1).to be false
end
end
describe "#to_s" do
it "returns the version as string" do
version = Version.new('1.1.1.0')
expect(version.to_s).to eq '1.1.1'
end
end
-end
-describe Version::Range do
- describe '#include?' do
- it 'checks if a range includes a version' do
- range = Version::Range.new(Version.new('1'), Version.new('2'))
+ describe Version::Range do
+ describe '#include?' do
+ it 'checks if a range includes a version' do
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
- expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
- expect(range).to include('1.2.3.4.1')
- expect(range).to_not include('0.9.9.9.9.9.9.9')
- expect(range).to_not include(Version.new('2.0.0.1'))
+ expect(range).to include(Version.new('1.5.4.3.2.3.4.5.1.0'))
+ expect(range).to include('1.2.3.4.1')
+ expect(range).to_not include('0.9.9.9.9.9.9.9')
+ expect(range).to_not include(Version.new('2.0.0.1'))
+ end
end
- end
- describe '#to_a' do
- it 'returns all versions in a range' do
- range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
- expect(range.to_a).to eq [
- '1.1', '1.1.1', '1.1.2', '1.1.3',
- '1.1.4', '1.1.5', '1.1.6', '1.1.7',
- '1.1.8', '1.1.9', '1.2', '1.2.1'
- ]
- end
+ describe '#to_a' do
+ it 'returns all versions in a range' do
+ range = Version::Range.new(Version.new('1.1.0'), Version.new('1.2.2'))
+ expect(range.to_a).to eq [
+ '1.1', '1.1.1', '1.1.2', '1.1.3',
+ '1.1.4', '1.1.5', '1.1.6', '1.1.7',
+ '1.1.8', '1.1.9', '1.2', '1.2.1'
+ ]
+ end
- it 'works with 3 components only' do
- range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
- expect(range.to_a).to eq [
- '1.1', '1.1.1', '1.1.2',
- '1.1.3', '1.1.4', '1.1.5',
- '1.1.6', '1.1.7', '1.1.8', '1.1.9'
- ]
- end
+ it 'works with 3 components only' do
+ range = Version::Range.new(Version.new('1.1'), Version.new('1.2'))
+ expect(range.to_a).to eq [
+ '1.1', '1.1.1', '1.1.2',
+ '1.1.3', '1.1.4', '1.1.5',
+ '1.1.6', '1.1.7', '1.1.8', '1.1.9'
+ ]
+ end
- it "doesn't include first version if it's same like last" do
- range = Version::Range.new(Version.new('0'), Version.new('0'))
- expect(range.to_a).to eq []
- end
+ it "doesn't include first version if it's same like last" do
+ range = Version::Range.new(Version.new('0'), Version.new('0'))
+ expect(range.to_a).to eq []
+ end
- it "works with strings" do
- range = Version::Range.new('0', '0.0.9')
- expect(range.to_a).to eq [
- '0', '0.0.1', '0.0.2',
- '0.0.3', '0.0.4', '0.0.5',
- '0.0.6', '0.0.7', '0.0.8'
- ]
+ it "works with strings" do
+ range = Version::Range.new('0', '0.0.9')
+ expect(range.to_a).to eq [
+ '0', '0.0.1', '0.0.2',
+ '0.0.3', '0.0.4', '0.0.5',
+ '0.0.6', '0.0.7', '0.0.8'
+ ]
+ end
end
end
end