Решение на Четвърта задача - Unit тестване от Мариян Асенов

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

Към профила на Мариян Асенов

Резултати

  • 5 точки от тестове
  • 0 бонус точки
  • 5 точки общо
  • 15 успешни тест(а)
  • 4 неуспешни тест(а)

Код

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
expect { Version.new(0..2) }.to raise_error(
ArgumentError,
"Invalid version string '0..2'"
)
end
it 'raises an exception by given invalid version' do
expect { Version.new(0..3) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including fractional number' do
expect { Version.new('3,1.2.3') }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including negative number' do
expect { Version.new('3.-2.3') }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including character' do
expect { Version.new('a.2.3') }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to eq([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('3.2.7')
returned_value = version.components
returned_value.sort!
expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.5'))).to be true
expect(range.include?(Version.new('0.9'))).to be false
end
it 'checks version аt the edges of the range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1'))).to be true
expect(range.include?(Version.new('2'))).to be false
end
it ' checks version in the open range by given string of version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.4.6.7'))).to be true
expect(range.include?(Version.new('0.9.4.5.6.7'))).to be false
end
it 'checks version аt the edges of the range by given string' do
range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
expect(range.include?(Version.new('1.2.0'))).to be true
expect(range.include?(Version.new('2.0.3'))).to be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
end
end
end
end

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

...FF.F.....F......

Failures:

  1) spec Version checks that initialize can be given an empty string
     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 /\A[0-9]+(\.[0-9]+)*\z/.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.dup
             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-1z0v1z6/spec.rb:295: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)>'

  2) spec Version checks that initialize can be given no arguments
     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.dup
             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-1z0v1z6/spec.rb:314: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)>'

  3) spec Version checks for comparison operators negatively
     Failure/Error: expect(@solution).to_not pass_tests
       expected this solution to not pass the tests:
       
         class Version
         def >(other)
           true
         end
           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.dup
             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-1z0v1z6/spec.rb:359: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)>'

  4) spec Version::Range tests constructing ranges with strings
     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.dup
             end
           end
         
           def to_s
             @components.join('.')
           end
         
           class Range
             include Enumerable
         
             def initialize(start_version, end_version)
               @start_version = start_version
               @end_version   = 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-1z0v1z6/spec.rb:479: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 16.37 seconds
19 examples, 4 failures

Failed examples:

rspec /tmp/d20161119-19072-1z0v1z6/spec.rb:279 # spec Version checks that initialize can be given an empty string
rspec /tmp/d20161119-19072-1z0v1z6/spec.rb:298 # spec Version checks that initialize can be given no arguments
rspec /tmp/d20161119-19072-1z0v1z6/spec.rb:353 # spec Version checks for comparison operators negatively
rspec /tmp/d20161119-19072-1z0v1z6/spec.rb:471 # spec Version::Range tests constructing ranges with strings

История (8 версии и 16 коментара)

Мариян обнови решението на 17.11.2016 15:02 (преди над 7 години)

+RSpec.describe 'Version' do
+ describe '#initialize' do
+ it 'raises an exception with appropriat message' do
+ version = 0..2
+ message = "Invalid version string '#{version}'"
+ expect { Version.new(version) }.to raise_error(message)
+ end
+ it 'raises an exception by given invalid version' do
+ version = 0..3
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+ it 'raise an exception by given string included fractional number' do
+ version = '3,1.2.3'
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+ it 'raise an exception by given string included negative number' do
+ version = '3.-2.3'
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+ it 'raise an exception by given string included character' do
+ version = 'a.2.3'
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+ end
+
+ describe '#<=>' do
+ it "can compare versions using <" do
+ expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
+ expect(Version.new('1.2.4')).to be < Version.new('1.3')
+ expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
+ end
+ it "can compare versions using ==" do
+ expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
+ expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
+ end
+ it "can compare versions using !=" do
+ expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
+ expect(Version.new('0.1')).to_not eq(Version.new('1'))
+ end
+ it "can compare versions using >" do
+ expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
+ expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
+ end
+ it "can compare versions using >=" do
+ expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
+ expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
+ end
+ it "can compare versions using <=" do
+ expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
+ expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
+ end
+ end
+
+ describe '#to_s' do
+ it 'can convert version to string end with zeros' do
+ expect(Version.new('1.1.0')).to eq('1.1')
+ expect(Version.new('1.1.0.0')).to eq('1.1')
+ end
+ it 'can convert version to string' do
+ expect(Version.new('1.0.3')).to eq('1.0.3')
+ expect(Version.new('1.2.3')).to eq('1.2.3')
+ end
+ it 'does not modify the object' do
+ version = Version.new('1.1.0')
+ version.to_s
+ expect(version).to eq('1.1.0')
+ end
+ end
+
+ describe '#components' do
+ it 'can return array of components' do
+ expect(Version.new('1.3.5').components).to match_array([1, 3, 5])
+ end
+ it 'can return array of components without zeros at the end' do
+ expect(Version.new('1.3.0').components).to match_array([1, 3])
+ end
+ it 'return array of components less than the components' do
+ expect(Version.new('1.3.5.8').components(2)).to match_array([1, 3])
+ end
+ it 'return array of components more than the components' do
+ expect(Version.new('1.2').components(4)).to match_array([1, 2, 0, 0])
+ end
+ it 'does not modify the internal state' do
+ version = Version.new('1.3.5.6')
+ version.components(2)
+ expect(version).to eq('1.3.5.6')
+ end
+ end
+
+ describe 'Range' do
+ describe '#include?' do
+ it ' checks version in the open range by given version' do
+ expect(Version::Range.new(Version.new('1'), Version.new('2')
+ ).include?(Version.new('1.5'))
+ ).to be true
+ expect(Version::Range.new(Version.new('1'), Version.new('2')
+ ).include?(Version.new('0.9'))
+ ).to be false
+ end
+ it 'checks version аt the edges of the range by given version' do
+ expect(Version::Range.new(Version.new('1'), Version.new('2')
+ ).include?(Version.new('1'))
+ ).to be true
+ expect(Version::Range.new(Version.new('1'), Version.new('2')
+ ).include?(Version.new('2'))
+ ).to be false
+ end
+ it ' checks version in the open range by given string of version' do
+ expect(Version::Range.new(Version.new('1'), Version.new('2')
+ ).include?('1.5.4.0')
+ ).to be true
+ expect(Version::Range.new(Version.new('1'), Version.new('2')
+ ).include?('0.9.6.6.6.6.7')
+ ).to be false
+ end
+ it 'checks version аt the edges of the range by given string' do
+ expect(Version::Range.new(Version.new('1.2'), Version.new('2')
+ ).include?('1.2.0')
+ ).to be true
+ expect(Version::Range.new(Version.new('1.3'), Version.new('2.0.3')
+ ).include?('2.0.3')
+ ).to be false
+ end
+ end
+
+ describe '#to_a' do
+ it 'returns all members consequently without the right edge' do
+ start_version = Version.new('1.1.0')
+ end_version = Version.new('1.1.3')
+ array_of_versions = Version::Range.new(start_version, end_version).to_a
+ expect(array_of_versions).to match_array([
+ Version.new('1.1.0'),
+ Version.new('1.1.1'),
+ Version.new('1.1.2')
+ ]
+ )
+ end
+ it 'returns array of all members consequently up to three components' do
+ start_version = Version.new('0.9')
+ end_version = Version.new('1.0.1')
+ array_of_versions = Version::Range.new(start_version, end_version).to_a
+ expect(array_of_versions).to match_array([
+ Version.new('0.9'), Version.new('0.9.1'),
+ Version.new('0.9.2'), Version.new('0.9.3'),
+ Version.new('0.9.4'), Version.new('0.9.5'),
+ Version.new('0.9.6'), Version.new('0.9.7'),
+ Version.new('0.9.8'), Version.new('0.9.9'),
+ Version.new('1')
+ ]
+ )
+ end
+ end
+ end
+end

Мариян обнови решението на 17.11.2016 15:05 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
- it 'raises an exception with appropriat message' do
+ it 'raises an exception with appropriate message' do
version = 0..2
message = "Invalid version string '#{version}'"
expect { Version.new(version) }.to raise_error(message)
end
it 'raises an exception by given invalid version' do
version = 0..3
expect { Version.new(version) }.to raise_error(ArgumentError)
end
- it 'raise an exception by given string included fractional number' do
+ it 'raise an exception by given string including fractional number' do
version = '3,1.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
- it 'raise an exception by given string included negative number' do
+ it 'raise an exception by given string including negative number' do
version = '3.-2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
- it 'raise an exception by given string included character' do
+ it 'raise an exception by given string including character' do
version = 'a.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
it 'does not modify the object' do
version = Version.new('1.1.0')
version.to_s
expect(version).to eq('1.1.0')
end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to match_array([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to match_array([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to match_array([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to match_array([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('1.3.5.6')
version.components(2)
expect(version).to eq('1.3.5.6')
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
expect(Version::Range.new(Version.new('1'), Version.new('2')
).include?(Version.new('1.5'))
).to be true
expect(Version::Range.new(Version.new('1'), Version.new('2')
).include?(Version.new('0.9'))
).to be false

Това подравняване е изключително гадно. И преди да кажеш "Rubocop ме накара", виж следното:

expect(
  Version::Range.new(Version.new('1'), Version.new('2')).include?(Version.new('0.9')
).to be false

или по-добре, изкарай една променлива за range-а и използвай .to_not include вместо .to be false

end
it 'checks version аt the edges of the range by given version' do
expect(Version::Range.new(Version.new('1'), Version.new('2')
).include?(Version.new('1'))
).to be true
expect(Version::Range.new(Version.new('1'), Version.new('2')
).include?(Version.new('2'))
).to be false
end
it ' checks version in the open range by given string of version' do
expect(Version::Range.new(Version.new('1'), Version.new('2')
).include?('1.5.4.0')
).to be true
expect(Version::Range.new(Version.new('1'), Version.new('2')
).include?('0.9.6.6.6.6.7')
).to be false
end
it 'checks version аt the edges of the range by given string' do
expect(Version::Range.new(Version.new('1.2'), Version.new('2')
).include?('1.2.0')
).to be true
expect(Version::Range.new(Version.new('1.3'), Version.new('2.0.3')
).include?('2.0.3')
).to be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array([
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
)
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array([
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
)
end
end
end
end

Мариян обнови решението на 17.11.2016 17:13 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
- version = 0..2
- message = "Invalid version string '#{version}'"
- expect { Version.new(version) }.to raise_error(message)
+ message = "Invalid version string '0..2'"
+ expect { Version.new(0..2) }.to raise_error(message)
end
- it 'raises an exception by given invalid version' do
- version = 0..3
- expect { Version.new(version) }.to raise_error(ArgumentError)
- end
- it 'raise an exception by given string including fractional number' do
- version = '3,1.2.3'
- expect { Version.new(version) }.to raise_error(ArgumentError)
- end
- it 'raise an exception by given string including negative number' do
- version = '3.-2.3'
- expect { Version.new(version) }.to raise_error(ArgumentError)
- end
- it 'raise an exception by given string including character' do
- version = 'a.2.3'
- expect { Version.new(version) }.to raise_error(ArgumentError)
- end
+
+ it 'raises an exception by given invalid version' do
+ version = 0..3
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+
+ it 'raise an exception by given string including fractional number' do
+ version = '3,1.2.3'
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+
+ it 'raise an exception by given string including negative number' do
+ version = '3.-2.3'
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
+
+ it 'raise an exception by given string including character' do
+ version = 'a.2.3'
+ expect { Version.new(version) }.to raise_error(ArgumentError)
+ end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
+
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
+
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
+
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
+
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
+
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
+
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
+
it 'does not modify the object' do
version = Version.new('1.1.0')
version.to_s
expect(version).to eq('1.1.0')
end
end
describe '#components' do
it 'can return array of components' do
- expect(Version.new('1.3.5').components).to match_array([1, 3, 5])
+ expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
+
it 'can return array of components without zeros at the end' do
- expect(Version.new('1.3.0').components).to match_array([1, 3])
+ expect(Version.new('1.3.0').components).to eq([1, 3])
end
+
it 'return array of components less than the components' do
- expect(Version.new('1.3.5.8').components(2)).to match_array([1, 3])
+ expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
+
it 'return array of components more than the components' do
- expect(Version.new('1.2').components(4)).to match_array([1, 2, 0, 0])
+ expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
+
it 'does not modify the internal state' do
- version = Version.new('1.3.5.6')
- version.components(2)
- expect(version).to eq('1.3.5.6')
+ version = Version.new('3.2.7')
+ returned_value = version.components
+ returned_value.sort!
+ expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
- expect(Version::Range.new(Version.new('1'), Version.new('2')
- ).include?(Version.new('1.5'))
- ).to be true
- expect(Version::Range.new(Version.new('1'), Version.new('2')
- ).include?(Version.new('0.9'))
- ).to be false
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
+ expect(range).to include(Version.new('1.5'))
+ expect(range).to_not include(Version.new('0.9'))
end
+
it 'checks version аt the edges of the range by given version' do
- expect(Version::Range.new(Version.new('1'), Version.new('2')
- ).include?(Version.new('1'))
- ).to be true
- expect(Version::Range.new(Version.new('1'), Version.new('2')
- ).include?(Version.new('2'))
- ).to be false
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
+ expect(range).to include(Version.new('1'))
+ expect(range).to_not include(Version.new('2'))
end
+
it ' checks version in the open range by given string of version' do
- expect(Version::Range.new(Version.new('1'), Version.new('2')
- ).include?('1.5.4.0')
- ).to be true
- expect(Version::Range.new(Version.new('1'), Version.new('2')
- ).include?('0.9.6.6.6.6.7')
- ).to be false
+ range = Version::Range.new(Version.new('1'), Version.new('2'))
+ expect(range).to include('1.4.6.7')
+ expect(range).to_not include(Version.new('0.9.4.6.5.7'))
end
+
it 'checks version аt the edges of the range by given string' do
- expect(Version::Range.new(Version.new('1.2'), Version.new('2')
- ).include?('1.2.0')
- ).to be true
- expect(Version::Range.new(Version.new('1.3'), Version.new('2.0.3')
- ).include?('2.0.3')
- ).to be false
+ range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
+ expect(range).to include('1.2.0')
+ expect(range).to_not include('2.0.3')
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
- expect(array_of_versions).to match_array([
+ expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
- )
end
+
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
- expect(array_of_versions).to match_array([
+ expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
- )
end
end
end
end

Мариян обнови решението на 17.11.2016 17:46 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
message = "Invalid version string '0..2'"
expect { Version.new(0..2) }.to raise_error(message)
end
it 'raises an exception by given invalid version' do
version = 0..3
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including fractional number' do
version = '3,1.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including negative number' do
version = '3.-2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including character' do
version = 'a.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
it 'does not modify the object' do
version = Version.new('1.1.0')
version.to_s
expect(version).to eq('1.1.0')
end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to eq([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('3.2.7')
returned_value = version.components
returned_value.sort!
expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
- expect(range).to include(Version.new('1.5'))
- expect(range).to_not include(Version.new('0.9'))
+ expect(range.include?(Version.new('1.5'))).to be true
+ expect(range.include?(Version.new('0.9'))).to_be false
end
it 'checks version аt the edges of the range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
- expect(range).to include(Version.new('1'))
- expect(range).to_not include(Version.new('2'))
+ expect(range.include?(Version.new('1'))).to be true
+ expect(range.include?(Version.new('2'))).to_be false
end
it ' checks version in the open range by given string of version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
- expect(range).to include('1.4.6.7')
- expect(range).to_not include(Version.new('0.9.4.6.5.7'))
+ expect(range.include?(Version.new('1.4.6.7'))).to_be true
+ expect(range.include?(Version.new('0.9.4.5.6.7'))).to_be false
end
it 'checks version аt the edges of the range by given string' do
range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
- expect(range).to include('1.2.0')
- expect(range).to_not include('2.0.3')
+ expect(range.include?(Version.new('1.2.0'))).to_be true
+ expect(range.include?(Version.new('2.0.3'))).to_be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
end
end
end
end

Мариян обнови решението на 17.11.2016 19:59 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
- message = "Invalid version string '0..2'"
- expect { Version.new(0..2) }.to raise_error(message)
+ expect { Version.new(0..2) }.to raise_error(
+ ArgumentError,
+ "Invalid version string '0..2'"
+ )
end
it 'raises an exception by given invalid version' do
version = 0..3
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including fractional number' do
version = '3,1.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including negative number' do
version = '3.-2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including character' do
version = 'a.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
it 'does not modify the object' do
version = Version.new('1.1.0')
version.to_s
expect(version).to eq('1.1.0')

В другия метод ако не се внимава - може да се промени обектът. Тук няма реална опасност да стане това. Не се връща нищо свързано със състоянието на версията.

Просто няма логика някога това да се счупи. Иначе, предполагам не би тествал дали <, >, <=, >=, ==, <=>, Version::Range.new и всички останали методи променят обекта. Защо тогава да тестваш само този?

end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to eq([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('3.2.7')
returned_value = version.components
returned_value.sort!
expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.5'))).to be true
expect(range.include?(Version.new('0.9'))).to_be false
end
it 'checks version аt the edges of the range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1'))).to be true
expect(range.include?(Version.new('2'))).to_be false
end
it ' checks version in the open range by given string of version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.4.6.7'))).to_be true
expect(range.include?(Version.new('0.9.4.5.6.7'))).to_be false
end
it 'checks version аt the edges of the range by given string' do
range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
expect(range.include?(Version.new('1.2.0'))).to_be true
expect(range.include?(Version.new('2.0.3'))).to_be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
end
end
end
end

Мариян обнови решението на 17.11.2016 21:10 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
expect { Version.new(0..2) }.to raise_error(
ArgumentError,
"Invalid version string '0..2'"
)
end
it 'raises an exception by given invalid version' do
version = 0..3
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including fractional number' do
version = '3,1.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including negative number' do
version = '3.-2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including character' do
version = 'a.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
-
- it 'does not modify the object' do
- version = Version.new('1.1.0')
- version.to_s
- expect(version).to eq('1.1.0')
- end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to eq([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('3.2.7')
returned_value = version.components
returned_value.sort!
expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.5'))).to be true
expect(range.include?(Version.new('0.9'))).to_be false
end
it 'checks version аt the edges of the range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1'))).to be true
expect(range.include?(Version.new('2'))).to_be false
end
it ' checks version in the open range by given string of version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.4.6.7'))).to_be true
expect(range.include?(Version.new('0.9.4.5.6.7'))).to_be false
end
it 'checks version аt the edges of the range by given string' do
range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
expect(range.include?(Version.new('1.2.0'))).to_be true
expect(range.include?(Version.new('2.0.3'))).to_be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
end
end
end
end

Мариян обнови решението на 18.11.2016 09:59 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
expect { Version.new(0..2) }.to raise_error(
ArgumentError,
"Invalid version string '0..2'"
)
end
it 'raises an exception by given invalid version' do
version = 0..3
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including fractional number' do
version = '3,1.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including negative number' do
version = '3.-2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including character' do
version = 'a.2.3'
expect { Version.new(version) }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to eq([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('3.2.7')
returned_value = version.components
returned_value.sort!
expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.5'))).to be true
- expect(range.include?(Version.new('0.9'))).to_be false
+ expect(range.include?(Version.new('0.9'))).to be false
end
it 'checks version аt the edges of the range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1'))).to be true
- expect(range.include?(Version.new('2'))).to_be false
+ expect(range.include?(Version.new('2'))).to be false
end
it ' checks version in the open range by given string of version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
- expect(range.include?(Version.new('1.4.6.7'))).to_be true
- expect(range.include?(Version.new('0.9.4.5.6.7'))).to_be false
+ expect(range.include?(Version.new('1.4.6.7'))).to be true
+ expect(range.include?(Version.new('0.9.4.5.6.7'))).to be false
end
it 'checks version аt the edges of the range by given string' do
range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
- expect(range.include?(Version.new('1.2.0'))).to_be true
- expect(range.include?(Version.new('2.0.3'))).to_be false
+ expect(range.include?(Version.new('1.2.0'))).to be true
+ expect(range.include?(Version.new('2.0.3'))).to be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
end
end
end
end

Мариян обнови решението на 18.11.2016 14:29 (преди над 7 години)

RSpec.describe 'Version' do
describe '#initialize' do
it 'raises an exception with appropriate message' do
expect { Version.new(0..2) }.to raise_error(
ArgumentError,
"Invalid version string '0..2'"
)
end
it 'raises an exception by given invalid version' do
- version = 0..3
- expect { Version.new(version) }.to raise_error(ArgumentError)
+ expect { Version.new(0..3) }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including fractional number' do
- version = '3,1.2.3'
- expect { Version.new(version) }.to raise_error(ArgumentError)
+ expect { Version.new('3,1.2.3') }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including negative number' do
- version = '3.-2.3'
- expect { Version.new(version) }.to raise_error(ArgumentError)
+ expect { Version.new('3.-2.3') }.to raise_error(ArgumentError)
end
it 'raise an exception by given string including character' do
- version = 'a.2.3'
- expect { Version.new(version) }.to raise_error(ArgumentError)
+ expect { Version.new('a.2.3') }.to raise_error(ArgumentError)
end
end
describe '#<=>' do
it "can compare versions using <" do
expect(Version.new('1.3.4')).to be < Version.new('1.3.5')
expect(Version.new('1.2.4')).to be < Version.new('1.3')
expect(Version.new('1.2.4.2.4.5.3')).to be < Version.new('1.3')
end
it "can compare versions using ==" do
expect(Version.new('1.3.5')).to eq(Version.new('1.3.5'))
expect(Version.new('1.3')).to eq(Version.new('1.3.0'))
end
it "can compare versions using !=" do
expect(Version.new('1.3.5')).to_not eq(Version.new('1.3.4'))
expect(Version.new('0.1')).to_not eq(Version.new('1'))
end
it "can compare versions using >" do
expect(Version.new('1.3.5')).to be > Version.new('1.1.5')
expect(Version.new('1.3')).to be > Version.new('1.2.5.1.8.3')
end
it "can compare versions using >=" do
expect(Version.new('1.3.5')).to be >= Version.new('1.3.5')
expect(Version.new('1.3.4')).to be >= Version.new('1.2.5.1.8.3')
end
it "can compare versions using <=" do
expect(Version.new('1.3.5')).to be <= Version.new('1.3.5.0')
expect(Version.new('1.3')).to be <= Version.new('1.4.5.1.8.3')
end
end
describe '#to_s' do
it 'can convert version to string end with zeros' do
expect(Version.new('1.1.0')).to eq('1.1')
expect(Version.new('1.1.0.0')).to eq('1.1')
end
it 'can convert version to string' do
expect(Version.new('1.0.3')).to eq('1.0.3')
expect(Version.new('1.2.3')).to eq('1.2.3')
end
end
describe '#components' do
it 'can return array of components' do
expect(Version.new('1.3.5').components).to eq([1, 3, 5])
end
it 'can return array of components without zeros at the end' do
expect(Version.new('1.3.0').components).to eq([1, 3])
end
it 'return array of components less than the components' do
expect(Version.new('1.3.5.8').components(2)).to eq([1, 3])
end
it 'return array of components more than the components' do
expect(Version.new('1.2').components(4)).to eq([1, 2, 0, 0])
end
it 'does not modify the internal state' do
version = Version.new('3.2.7')
returned_value = version.components
returned_value.sort!
expect(version.components).not_to be(returned_value)
end
end
describe 'Range' do
describe '#include?' do
it ' checks version in the open range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.5'))).to be true
expect(range.include?(Version.new('0.9'))).to be false
end
it 'checks version аt the edges of the range by given version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1'))).to be true
expect(range.include?(Version.new('2'))).to be false
end
it ' checks version in the open range by given string of version' do
range = Version::Range.new(Version.new('1'), Version.new('2'))
expect(range.include?(Version.new('1.4.6.7'))).to be true
expect(range.include?(Version.new('0.9.4.5.6.7'))).to be false
end
it 'checks version аt the edges of the range by given string' do
range = Version::Range.new(Version.new('1.2'), Version.new('2.0.3'))
expect(range.include?(Version.new('1.2.0'))).to be true
expect(range.include?(Version.new('2.0.3'))).to be false
end
end
describe '#to_a' do
it 'returns all members consequently without the right edge' do
start_version = Version.new('1.1.0')
end_version = Version.new('1.1.3')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('1.1.0'),
Version.new('1.1.1'),
Version.new('1.1.2')
]
end
it 'returns array of all members consequently up to three components' do
start_version = Version.new('0.9')
end_version = Version.new('1.0.1')
array_of_versions = Version::Range.new(start_version, end_version).to_a
expect(array_of_versions).to match_array [
Version.new('0.9'), Version.new('0.9.1'),
Version.new('0.9.2'), Version.new('0.9.3'),
Version.new('0.9.4'), Version.new('0.9.5'),
Version.new('0.9.6'), Version.new('0.9.7'),
Version.new('0.9.8'), Version.new('0.9.9'),
Version.new('1')
]
end
end
end
end