Решение на Четвърта задача - Unit тестване от Красимир Тренчев

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

Към профила на Красимир Тренчев

Резултати

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

Код

# rspec solution.rb -r ./version.rb -c -f doc
describe Version do
describe '#initialize' do
it 'initializes an object when given empty string' do
Version.new("")
end
it 'initializes an object when given no argument' do
Version.new
end
it 'initializes an object when given correct version' do
Version.new("1.0.0.0.0.0.2.10.23.0.0")
end
it 'initializes an object when given another object of class Version' do
test_param = Version.new
Version.new(test_param)
end
it 'throws ArgumentError with correct message' do
test_param = [1, 0, 5]
msg_one = "Invalid version string \'#{test_param}\'"
msg_two = 'Invalid version string \'.1.1\''
msg_three = 'Invalid version string \'0..3\''
expect { Version.new(test_param) }.to raise_error(ArgumentError, msg_one)
expect { Version.new(".1.1") }.to raise_error(ArgumentError, msg_two)
expect { Version.new("0..3") }.to raise_error(ArgumentError, msg_three)
end
end
describe '#<' do
bigger = Version.new("1.0.1.6")
smaller = Version.new("1.0.0.8")
dup_of_smaller = Version.new(smaller)
it 'returns true when called with <smaller> and <bigger> argument' do
expect( smaller < bigger).to be true
end
it 'returns false when called with equal arguments' do
expect( smaller < dup_of_smaller ).to be false
end
it 'returns false when called with <bigger> and <smaller> arguments' do
expect( bigger < smaller ).to be false
end
end
describe '#>' do
bigger = Version.new("1.0.1.6")
smaller = Version.new("1.0.0.8")
dup_of_smaller = Version.new(smaller)
it 'returns false when called with <smaller> and <bigger> argument' do
expect( smaller > bigger).to eq false
end
it 'returns false when called with equal arguments' do
expect( smaller > dup_of_smaller ).to eq false
end
it 'returns true when called with <bigger> and <smaller> arguments' do
expect( bigger > smaller ).to eq true
end
end
describe '#>=' do
bigger = Version.new("1.0.1.6")
smaller = Version.new("1.0.0.8")
dup_of_smaller = Version.new(smaller)
it 'returns false when called with <smaller> and <bigger> argument' do
expect( smaller >= bigger).to eq false
end
it 'returns true when called with equal arguments' do
expect( smaller >= dup_of_smaller ).to eq true
end
it 'returns true when called with <bigger> and <smaller> arguments' do
expect( bigger >= smaller ).to eq true
end
end
describe '#<=>' do
bigger = Version.new("1.0.1.6")
smaller = Version.new("1.0.0.8")
dup_of_smaller = Version.new(smaller)
it 'returns -1 when called with <smaller> and <bigger> argument' do
expect( smaller <=> bigger).to eq -1
end
it 'returns 0 when called with equal arguments' do
expect( smaller <=> dup_of_smaller ).to eq 0
end
it 'returns 1 when called with <bigger> and <smaller> arguments' do
expect( bigger <=> smaller ).to eq 1
end
end
describe '#<=' do
bigger = Version.new("1.0.1.6")
smaller = Version.new("1.0.0.8")
dup_of_smaller = Version.new(smaller)
it 'returns true when called with <smaller> and <bigger> argument' do
expect( smaller <= bigger).to eq true
end
it 'returns true when called with equal arguments' do
expect( smaller <= dup_of_smaller ).to eq true
end
it 'returns false when called with <bigger> and <smaller> arguments' do
expect( bigger <= smaller ).to eq false
end
end
describe '#==' do
bigger = Version.new("1.0.1.6")
smaller = Version.new("1.0.0.8")
dup_of_smaller = Version.new(smaller)
it 'returns true when called with equal arguments' do
expect( smaller == dup_of_smaller ).to eq true
end
it 'returns false when called with <bigger> and <smaller> arguments' do
expect( bigger == smaller ).to eq false
end
end
describe '#components' do
it 'truncates trailing zeroes' do
test_obj = Version.new("1.0.0.0.0.0.0.10.0.0.0.0.0.0.0.0.0")
expect(test_obj.components).to eq [1, 0, 0, 0, 0, 0, 0, 10]
end
it 'does not change internal state' do
test_obj = Version.new("1.0.0.0.0.0.0.10.0.0.0.0.0.0.0.0.0")
test_obj.components << 123_123_21
expect(test_obj.components).to eq [1, 0, 0, 0, 0, 0, 0, 10]
end
it 'does not change non trailing zeroes components' do
test_obj = Version.new('100.51')
expect(test_obj.components).to eq [100, 51]
end
it 'returns exactly N components' do
test_obj = Version.new('20.30.1.2.0.0.0')
expect(test_obj.components(3)).to eq [20, 30, 1]
test_obj = Version.new('1.0.1')
expect(test_obj.components(5)).to eq [1, 0, 1, 0, 0]
end
end
describe "::Range" do
describe '#initialize' do
it 'constructs an object' do
Version::Range.new("0.1.1.0.123", "1.9241.0.0.1.5.3.2")
version_obj = Version.new("0.3.1.2")
Version::Range.new(version_obj, version_obj)
Version::Range.new("125.12.513.1", version_obj)
Version::Range.new(version_obj, "12.643.0.532")
end
end
describe "#include?" do
it 'checks whether version is in between' do
# strings:
test_obj = Version::Range.new("0.1.2.3.4.5", "0.1.2.3.4.7")
expect(test_obj.include?("0.1.2.3.4.6.0.0.1")).to eq true
expect(test_obj.include?("0.1.2.3.4.5")).to eq true
expect(test_obj.include?("0.1.2.3.5")).to eq false
expect(test_obj.include?("0.0.1")).to eq false
expect(test_obj.include?("100.1")).to eq false
# versions:
expect(test_obj.include?(Version.new("0.1.2.3.4.6.0.0.1"))).to eq true
expect(test_obj.include?(Version.new("0.1.2.3.4.5"))).to eq true
expect(test_obj.include?(Version.new("0.1.2.3.5"))).to eq false
expect(test_obj.include?(Version.new("0.0.1"))).to eq false
expect(test_obj.include?(Version.new("100.1"))).to eq false
end
end
describe "#to_a" do
it 'does not return versions which are not inbetween' do
test_obj = Version::Range.new("0.0.0", "0.0.0")
expect(test_obj.to_a).to eq []
end
it 'returns all versions in between' do
test_obj = Version::Range.new("0.0.8", "0.1.1")
first = Version.new("0.0.8")
middle = Version.new("0.0.9")
last = Version.new("0.1.0")
expect(test_obj.to_a).to eq [first, middle, last]
test_obj = Version::Range.new("0.9.9", "1.0.1")
first = Version.new("0.9.9")
last = Version.new("1.0.0")
expect(test_obj.to_a).to eq [first, last]
end
end
end
end

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

...................

Finished in 18.91 seconds
19 examples, 0 failures

История (1 версия и 0 коментара)

Красимир обнови решението на 18.11.2016 15:18 (преди над 7 години)

+# rspec solution.rb -r ./version.rb -c -f doc
+describe Version do
+ describe '#initialize' do
+ it 'initializes an object when given empty string' do
+ Version.new("")
+ end
+
+ it 'initializes an object when given no argument' do
+ Version.new
+ end
+
+ it 'initializes an object when given correct version' do
+ Version.new("1.0.0.0.0.0.2.10.23.0.0")
+ end
+
+ it 'initializes an object when given another object of class Version' do
+ test_param = Version.new
+ Version.new(test_param)
+ end
+
+ it 'throws ArgumentError with correct message' do
+ test_param = [1, 0, 5]
+ msg_one = "Invalid version string \'#{test_param}\'"
+ msg_two = 'Invalid version string \'.1.1\''
+ msg_three = 'Invalid version string \'0..3\''
+ expect { Version.new(test_param) }.to raise_error(ArgumentError, msg_one)
+ expect { Version.new(".1.1") }.to raise_error(ArgumentError, msg_two)
+ expect { Version.new("0..3") }.to raise_error(ArgumentError, msg_three)
+ end
+ end
+
+ describe '#<' do
+ bigger = Version.new("1.0.1.6")
+ smaller = Version.new("1.0.0.8")
+ dup_of_smaller = Version.new(smaller)
+
+ it 'returns true when called with <smaller> and <bigger> argument' do
+ expect( smaller < bigger).to be true
+ end
+
+ it 'returns false when called with equal arguments' do
+ expect( smaller < dup_of_smaller ).to be false
+ end
+
+ it 'returns false when called with <bigger> and <smaller> arguments' do
+ expect( bigger < smaller ).to be false
+ end
+ end
+
+ describe '#>' do
+ bigger = Version.new("1.0.1.6")
+ smaller = Version.new("1.0.0.8")
+ dup_of_smaller = Version.new(smaller)
+
+ it 'returns false when called with <smaller> and <bigger> argument' do
+ expect( smaller > bigger).to eq false
+ end
+
+ it 'returns false when called with equal arguments' do
+ expect( smaller > dup_of_smaller ).to eq false
+ end
+
+ it 'returns true when called with <bigger> and <smaller> arguments' do
+ expect( bigger > smaller ).to eq true
+ end
+ end
+
+ describe '#>=' do
+ bigger = Version.new("1.0.1.6")
+ smaller = Version.new("1.0.0.8")
+ dup_of_smaller = Version.new(smaller)
+
+ it 'returns false when called with <smaller> and <bigger> argument' do
+ expect( smaller >= bigger).to eq false
+ end
+
+ it 'returns true when called with equal arguments' do
+ expect( smaller >= dup_of_smaller ).to eq true
+ end
+
+ it 'returns true when called with <bigger> and <smaller> arguments' do
+ expect( bigger >= smaller ).to eq true
+ end
+ end
+
+ describe '#<=>' do
+ bigger = Version.new("1.0.1.6")
+ smaller = Version.new("1.0.0.8")
+ dup_of_smaller = Version.new(smaller)
+
+ it 'returns -1 when called with <smaller> and <bigger> argument' do
+ expect( smaller <=> bigger).to eq -1
+ end
+
+ it 'returns 0 when called with equal arguments' do
+ expect( smaller <=> dup_of_smaller ).to eq 0
+ end
+
+ it 'returns 1 when called with <bigger> and <smaller> arguments' do
+ expect( bigger <=> smaller ).to eq 1
+ end
+ end
+
+ describe '#<=' do
+ bigger = Version.new("1.0.1.6")
+ smaller = Version.new("1.0.0.8")
+ dup_of_smaller = Version.new(smaller)
+
+ it 'returns true when called with <smaller> and <bigger> argument' do
+ expect( smaller <= bigger).to eq true
+ end
+
+ it 'returns true when called with equal arguments' do
+ expect( smaller <= dup_of_smaller ).to eq true
+ end
+
+ it 'returns false when called with <bigger> and <smaller> arguments' do
+ expect( bigger <= smaller ).to eq false
+ end
+ end
+
+ describe '#==' do
+ bigger = Version.new("1.0.1.6")
+ smaller = Version.new("1.0.0.8")
+ dup_of_smaller = Version.new(smaller)
+
+ it 'returns true when called with equal arguments' do
+ expect( smaller == dup_of_smaller ).to eq true
+ end
+
+ it 'returns false when called with <bigger> and <smaller> arguments' do
+ expect( bigger == smaller ).to eq false
+ end
+ end
+
+ describe '#components' do
+ it 'truncates trailing zeroes' do
+ test_obj = Version.new("1.0.0.0.0.0.0.10.0.0.0.0.0.0.0.0.0")
+ expect(test_obj.components).to eq [1, 0, 0, 0, 0, 0, 0, 10]
+ end
+
+ it 'does not change internal state' do
+ test_obj = Version.new("1.0.0.0.0.0.0.10.0.0.0.0.0.0.0.0.0")
+ test_obj.components << 123_123_21
+ expect(test_obj.components).to eq [1, 0, 0, 0, 0, 0, 0, 10]
+ end
+
+ it 'does not change non trailing zeroes components' do
+ test_obj = Version.new('100.51')
+ expect(test_obj.components).to eq [100, 51]
+ end
+
+ it 'returns exactly N components' do
+ test_obj = Version.new('20.30.1.2.0.0.0')
+ expect(test_obj.components(3)).to eq [20, 30, 1]
+ test_obj = Version.new('1.0.1')
+ expect(test_obj.components(5)).to eq [1, 0, 1, 0, 0]
+ end
+ end
+
+ describe "::Range" do
+ describe '#initialize' do
+ it 'constructs an object' do
+ Version::Range.new("0.1.1.0.123", "1.9241.0.0.1.5.3.2")
+ version_obj = Version.new("0.3.1.2")
+ Version::Range.new(version_obj, version_obj)
+ Version::Range.new("125.12.513.1", version_obj)
+ Version::Range.new(version_obj, "12.643.0.532")
+ end
+ end
+
+ describe "#include?" do
+ it 'checks whether version is in between' do
+ # strings:
+ test_obj = Version::Range.new("0.1.2.3.4.5", "0.1.2.3.4.7")
+ expect(test_obj.include?("0.1.2.3.4.6.0.0.1")).to eq true
+ expect(test_obj.include?("0.1.2.3.4.5")).to eq true
+ expect(test_obj.include?("0.1.2.3.5")).to eq false
+ expect(test_obj.include?("0.0.1")).to eq false
+ expect(test_obj.include?("100.1")).to eq false
+ # versions:
+ expect(test_obj.include?(Version.new("0.1.2.3.4.6.0.0.1"))).to eq true
+ expect(test_obj.include?(Version.new("0.1.2.3.4.5"))).to eq true
+ expect(test_obj.include?(Version.new("0.1.2.3.5"))).to eq false
+ expect(test_obj.include?(Version.new("0.0.1"))).to eq false
+ expect(test_obj.include?(Version.new("100.1"))).to eq false
+ end
+ end
+
+ describe "#to_a" do
+ it 'does not return versions which are not inbetween' do
+ test_obj = Version::Range.new("0.0.0", "0.0.0")
+ expect(test_obj.to_a).to eq []
+ end
+
+ it 'returns all versions in between' do
+ test_obj = Version::Range.new("0.0.8", "0.1.1")
+ first = Version.new("0.0.8")
+ middle = Version.new("0.0.9")
+ last = Version.new("0.1.0")
+ expect(test_obj.to_a).to eq [first, middle, last]
+
+ test_obj = Version::Range.new("0.9.9", "1.0.1")
+ first = Version.new("0.9.9")
+ last = Version.new("1.0.0")
+ expect(test_obj.to_a).to eq [first, last]
+ end
+ end
+ end
+end