Skip to content

Commit 7ec5da7

Browse files
author
Bilal Al
committed
added version length check for compare
1 parent a302223 commit 7ec5da7

2 files changed

Lines changed: 30 additions & 8 deletions

File tree

lib/splitclient-rb/engine/matchers/semver.rb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ def compare(to_compare)
6363
return compare_attributes(to_compare) if compare_attributes(to_compare) != 0
6464

6565
# Compare pre-release versions lexically
66-
compare_pre_release(to_compare)
66+
return compare_pre_release(to_compare) if compare_pre_release(to_compare) != 0
67+
68+
# compare length of version
69+
compare_vars(@version.length, to_compare.version.length)
6770
end
6871

6972
private

spec/engine/matchers/semver_spec.rb

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@
44
describe SplitIoClient::Semver do
55
let(:valid_versions) do
66
CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__),
7-
'../../test_data/splits/semver/valid-semantic-versions.csv'))))
7+
'../../test_data/splits/semver/valid-semantic-versions.csv'))), headers: true)
88
end
99
let(:invalid_versions) do
1010
CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__),
11-
'../../test_data/splits/semver/invalid-semantic-versions.csv'))))
11+
'../../test_data/splits/semver/invalid-semantic-versions.csv'))), headers: true)
1212
end
1313
let(:equal_to_versions) do
1414
CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__),
15-
'../../test_data/splits/semver/equal-to-semver.csv'))))
15+
'../../test_data/splits/semver/equal-to-semver.csv'))), headers: true)
16+
end
17+
18+
let(:between_versions) do
19+
CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__),
20+
'../../test_data/splits/semver/between-semver.csv'))), headers: true)
1621
end
1722

1823
let(:logger) { Logger.new('/dev/null') }
1924

2025
context 'check versions' do
2126
it 'accept valid versions' do
2227
for i in (0..valid_versions.length-1)
23-
expect(described_class.build(valid_versions[i][0], logger)).should_not be_nil
28+
expect(described_class.build(valid_versions[i][0], logger)).not_to be_nil
2429
end
2530
end
2631
it 'reject invalid versions' do
@@ -39,12 +44,26 @@
3944
expect(described_class.build(valid_versions[i][1], logger).compare(described_class.build(valid_versions[i][1], logger))).to eq(0)
4045
end
4146
for i in (1..equal_to_versions.length-1)
42-
if valid_versions[i][2]
43-
expect(described_class.build(valid_versions[i][0], logger).compare(described_class.build(valid_versions[i][1], logger))).to eq(0)
47+
if equal_to_versions[i][2]=='true'
48+
expect(described_class.build(equal_to_versions[i][0], logger).compare(described_class.build(equal_to_versions[i][1], logger))).to eq(0)
4449
else
45-
expect(described_class.build(valid_versions[i][0], logger).compare(described_class.build(valid_versions[i][1], logger))).not_to eq(0)
50+
expect(described_class.build(equal_to_versions[i][0], logger).compare(described_class.build(equal_to_versions[i][1], logger))).not_to eq(0)
4651
end
4752
end
53+
for i in (1..between_versions.length-1)
54+
sem1 = described_class.build(between_versions[i][0], logger)
55+
sem2 = described_class.build(between_versions[i][2], logger)
56+
to_check = described_class.build(between_versions[i][1], logger)
57+
if between_versions[i][3]=='true'
58+
expect(sem1.compare(to_check)).to eq(-1)
59+
expect(sem2.compare(to_check)).to eq(1)
60+
else
61+
compare1 = sem1.compare(to_check)
62+
compare2 = sem2.compare(to_check)
63+
expect(compare1 == -1 && compare2 == 1).to eq(false)
64+
end
65+
end
66+
4867
end
4968
end
5069
end

0 commit comments

Comments
 (0)