|
1 | 1 | require 'spec_helper' |
| 2 | +require 'csv' |
2 | 3 |
|
3 | 4 | describe SplitIoClient::Semver do |
4 | | - let(:valid_versions) { ["1.1.2", "1.1.1", "1.0.0", "1.0.0-rc.1", "1.0.0-beta.11", "1.0.0-beta.2", |
5 | | - "1.0.0-beta", "1.0.0-alpha.beta", "1.0.0-alpha.1", "1.0.0-alpha", "2.2.2-rc.2+metadata-lalala", "2.2.2-rc.1.2", |
6 | | - "1.2.3", "0.0.4", "1.1.2+meta", "1.1.2-prerelease+meta", "1.0.0-beta", "1.0.0-alpha", "1.0.0-alpha0.valid", |
7 | | - "1.0.0-alpha.0valid", "1.0.0-rc.1+build.1", "1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay", |
8 | | - "10.2.3-DEV-SNAPSHOT", "1.2.3-SNAPSHOT-123", "1.1.1-rc2", "1.0.0-0A.is.legal", "1.2.3----RC-SNAPSHOT.12.9.1--.12+788", |
9 | | - "1.2.3----R-S.12.9.1--.12+meta", "1.2.3----RC-SNAPSHOT.12.9.1--.12.88", "1.2.3----RC-SNAPSHOT.12.9.1--.12", |
10 | | - "9223372036854775807.9223372036854775807.9223372036854775807", "9223372036854775807.9223372036854775807.9223372036854775806", |
11 | | - "1.1.1-alpha.beta.rc.build.java.pr.support.10", "1.1.1-alpha.beta.rc.build.java.pr.support"] } |
| 5 | + let(:valid_versions) do |
| 6 | + CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__), |
| 7 | + '../../test_data/splits/semver/valid-semantic-versions.csv')))) |
| 8 | + end |
| 9 | + let(:invalid_versions) do |
| 10 | + CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__), |
| 11 | + '../../test_data/splits/semver/invalid-semantic-versions.csv')))) |
| 12 | + end |
| 13 | + let(:equal_to_versions) do |
| 14 | + CSV.parse(File.read(File.expand_path(File.join(File.dirname(__FILE__), |
| 15 | + '../../test_data/splits/semver/equal-to-semver.csv')))) |
| 16 | + end |
| 17 | + |
| 18 | + let(:logger) { Logger.new('/dev/null') } |
12 | 19 |
|
13 | 20 | context 'check versions' do |
14 | 21 | it 'accept valid versions' do |
15 | | - major = [1, 1, 1, 1, 1, 1, |
16 | | - 1, 1, 1, 1, 2, 2, |
17 | | - 1, 0, 1, 1, 1, 1, 1, |
18 | | - 1, 1, 1, |
19 | | - 10, 1, 1, 1, 1, |
20 | | - 1, 1, 1, |
21 | | - 9223372036854775807, 9223372036854775807, |
22 | | - 1,1] |
23 | | - minor = [1, 1, 0, 0, 0, 0, |
24 | | - 0, 0, 0, 0, 2, 2, |
25 | | - 2, 0, 1, 1, 0, 0, 0, |
26 | | - 0, 0, 0, |
27 | | - 2, 2, 1, 0, 2, |
28 | | - 2, 2, 2, |
29 | | - 9223372036854775807, 9223372036854775807, |
30 | | - 1, 1] |
31 | | - patch = [2, 1, 0, 0, 0, 0, |
32 | | - 0, 0, 0, 0, 2, 2, |
33 | | - 3, 4, 2, 2, 0, 0, 0, |
34 | | - 0, 0, 0, |
35 | | - 3, 3, 1, 0, 3, |
36 | | - 3, 3, 3, |
37 | | - 9223372036854775807, 9223372036854775806, |
38 | | - 1, 1] |
39 | | - pre_release = [[], [], [], ["rc","1"], ["beta","11"],["beta","2"], |
40 | | - ["beta"], ["alpha","beta"], ["alpha","1"], ["alpha"], ["rc","2"], ["rc","1","2"], |
41 | | - [], [], [], ["prerelease"], ["beta"], ["alpha"], ["alpha0","valid"], |
42 | | - ["alpha","0valid"], ["rc","1"], ["alpha-a","b-c-somethinglong"], |
43 | | - ["DEV-SNAPSHOT"], ["SNAPSHOT-123"], ["rc2"], ["0A","is","legal"], ["---RC-SNAPSHOT","12","9","1--","12"], |
44 | | - ["---R-S","12","9","1--","12"], ["---RC-SNAPSHOT","12","9","1--","12","88"], ["---RC-SNAPSHOT","12","9","1--","12"], |
45 | | - [], [], |
46 | | - ["alpha","beta","rc","build","java","pr","support","10"], ["alpha","beta","rc","build","java","pr","support"]] |
47 | | - |
48 | | - for i in (0..major.length-1) |
49 | | - semver = described_class.new(valid_versions[i]) |
50 | | - expect(verify_version(semver, major[i], minor[i], patch[i], pre_release[i], pre_release[i]==[])).to eq(true) |
| 22 | + for i in (0..valid_versions.length-1) |
| 23 | + expect(described_class.build(valid_versions[i][0], logger)).should_not be_nil |
51 | 24 | end |
52 | 25 | end |
53 | 26 | it 'reject invalid versions' do |
54 | | - invalid_versions = [ |
55 | | - "1", "1.2", "1.alpha.2", "+invalid", "-invalid", "-invalid+invalid", "+justmeta", |
56 | | - "-invalid.01", "alpha", "alpha.beta", "alpha.beta.1", "alpha.1", "alpha+beta", |
57 | | - "alpha_beta", "alpha.", "alpha..", "beta", "-alpha.", "1.2", "1.2.3.DEV", "-1.0.3-gamma+b7718", |
58 | | - "1.2-SNAPSHOT", "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788", "1.2-RC-SNAPSHOT"] |
59 | | - |
60 | 27 | for version in invalid_versions |
61 | | - expect{ described_class.new(version) }.to raise_error(RuntimeError) |
| 28 | + expect(described_class.build(version[0], logger)).to eq(nil) |
62 | 29 | end |
63 | 30 | end |
64 | 31 | end |
65 | 32 |
|
66 | 33 | context 'compare versions' do |
67 | | - it 'higher, lower and equal' do |
68 | | - cnt = 0 |
69 | | - for i in (0..(valid_versions.length/2).to_i-1) |
70 | | - expect(described_class.new(valid_versions[cnt]).compare(described_class.new(valid_versions[cnt+1]))).to eq(1) |
71 | | - expect(described_class.new(valid_versions[cnt+1]).compare(described_class.new(valid_versions[cnt]))).to eq(-1) |
72 | | - expect(described_class.new(valid_versions[cnt]).compare(described_class.new(valid_versions[cnt]))).to eq(0) |
73 | | - expect(described_class.new(valid_versions[cnt+1]).compare(described_class.new(valid_versions[cnt+1]))).to eq(0) |
74 | | - cnt = cnt + 2 |
| 34 | + it 'equal and not equal' do |
| 35 | + for i in (1..valid_versions.length-1) |
| 36 | + expect(described_class.build(valid_versions[i][0], logger).compare(described_class.build(valid_versions[i][1], logger))).to eq(1) |
| 37 | + expect(described_class.build(valid_versions[i][1], logger).compare(described_class.build(valid_versions[i][0], logger))).to eq(-1) |
| 38 | + expect(described_class.build(valid_versions[i][0], logger).compare(described_class.build(valid_versions[i][0], logger))).to eq(0) |
| 39 | + expect(described_class.build(valid_versions[i][1], logger).compare(described_class.build(valid_versions[i][1], logger))).to eq(0) |
| 40 | + end |
| 41 | + 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) |
| 44 | + else |
| 45 | + expect(described_class.build(valid_versions[i][0], logger).compare(described_class.build(valid_versions[i][1], logger))).not_to eq(0) |
| 46 | + end |
75 | 47 | end |
76 | | - expect(described_class.new("1.1.1").compare(described_class.new("1.1.1"))).to eq(0) |
77 | | - expect(described_class.new("1.1.1").compare(described_class.new("1.1.1+metadata"))).to eq(0) |
78 | | - expect(described_class.new("1.1.1").compare(described_class.new("1.1.1-rc.1"))).to eq(1) |
79 | | - expect(described_class.new("88.88.88").compare(described_class.new("88.88.88"))).to eq(0) |
80 | | - expect(described_class.new("1.2.3----RC-SNAPSHOT.12.9.1--.12").compare(described_class.new("1.2.3----RC-SNAPSHOT.12.9.1--.12"))).to eq(0) |
81 | | - expect(described_class.new("10.2.3-DEV-SNAPSHOT").compare(described_class.new("10.2.3-SNAPSHOT-123"))).to eq(-1) |
82 | | - end |
83 | | - end |
84 | 48 |
|
85 | | - def verify_version(semver, major, minor, patch, pre_release="", is_stable=True) |
86 | | - if semver.major == major && semver.minor == minor &&d semver.patch == patch && |
87 | | - semver.pre_release == pre_release && semver.is_stable == is_stable |
88 | | - return true |
89 | 49 | end |
90 | | - return false |
91 | 50 | end |
92 | 51 | end |
0 commit comments