|
| 1 | +"""Condition model tests module.""" |
| 2 | +import pytest |
| 3 | + |
| 4 | +from splitio.models.grammar.matchers.semver import Semver |
| 5 | + |
| 6 | +class SemverTests(object): |
| 7 | + """Test the semver object model.""" |
| 8 | + |
| 9 | + 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", |
| 10 | + "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", |
| 11 | + "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", |
| 12 | + "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", |
| 13 | + "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", |
| 14 | + "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", |
| 15 | + "9223372036854775807.9223372036854775807.9223372036854775807", "9223372036854775807.9223372036854775807.9223372036854775806", |
| 16 | + "1.1.1-alpha.beta.rc.build.java.pr.support.10", "1.1.1-alpha.beta.rc.build.java.pr.support"] |
| 17 | + |
| 18 | + def test_valid_versions(self): |
| 19 | + major = [1, 1, 1, 1, 1, 1, |
| 20 | + 1, 1, 1, 1, 2, 2, |
| 21 | + 1, 0, 1, 1, 1, 1, 1, |
| 22 | + 1, 1, 1, |
| 23 | + 10, 1, 1, 1, 1, |
| 24 | + 1, 1, 1, |
| 25 | + 9223372036854775807, 9223372036854775807, |
| 26 | + 1,1] |
| 27 | + minor = [1, 1, 0, 0, 0, 0, |
| 28 | + 0, 0, 0, 0, 2, 2, |
| 29 | + 2, 0, 1, 1, 0, 0, 0, |
| 30 | + 0, 0, 0, |
| 31 | + 2, 2, 1, 0, 2, |
| 32 | + 2, 2, 2, |
| 33 | + 9223372036854775807, 9223372036854775807, |
| 34 | + 1, 1] |
| 35 | + patch = [2, 1, 0, 0, 0, 0, |
| 36 | + 0, 0, 0, 0, 2, 2, |
| 37 | + 3, 4, 2, 2, 0, 0, 0, |
| 38 | + 0, 0, 0, |
| 39 | + 3, 3, 1, 0, 3, |
| 40 | + 3, 3, 3, |
| 41 | + 9223372036854775807, 9223372036854775806, |
| 42 | + 1, 1] |
| 43 | + pre_release = [[], [], [], ["rc","1"], ["beta","11"],["beta","2"], |
| 44 | + ["beta"], ["alpha","beta"], ["alpha","1"], ["alpha"], ["rc","2"], ["rc","1","2"], |
| 45 | + [], [], [], ["prerelease"], ["beta"], ["alpha"], ["alpha0","valid"], |
| 46 | + ["alpha","0valid"], ["rc","1"], ["alpha-a","b-c-somethinglong"], |
| 47 | + ["DEV-SNAPSHOT"], ["SNAPSHOT-123"], ["rc2"], ["0A","is","legal"], ["---RC-SNAPSHOT","12","9","1--","12"], |
| 48 | + ["---R-S","12","9","1--","12"], ["---RC-SNAPSHOT","12","9","1--","12","88"], ["---RC-SNAPSHOT","12","9","1--","12"], |
| 49 | + [], [], |
| 50 | + ["alpha","beta","rc","build","java","pr","support","10"], ["alpha","beta","rc","build","java","pr","support"]] |
| 51 | + |
| 52 | + for i in range(len(major)-1): |
| 53 | + semver = Semver(self.valid_versions[i]) |
| 54 | + self._verify_version(semver, major[i], minor[i], patch[i], pre_release[i], pre_release[i]==[]) |
| 55 | + |
| 56 | + def test_invalid_versions(self): |
| 57 | + """Test parsing invalid versions.""" |
| 58 | + invalid_versions = [ |
| 59 | + "1", "1.2", "1.alpha.2", "+invalid", "-invalid", "-invalid+invalid", "+justmeta", |
| 60 | + "-invalid.01", "alpha", "alpha.beta", "alpha.beta.1", "alpha.1", "alpha+beta", |
| 61 | + "alpha_beta", "alpha.", "alpha..", "beta", "-alpha.", "1.2", "1.2.3.DEV", "-1.0.3-gamma+b7718", |
| 62 | + "1.2-SNAPSHOT", "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788", "1.2-RC-SNAPSHOT"] |
| 63 | +# "99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12"] |
| 64 | + |
| 65 | + for version in invalid_versions: |
| 66 | + with pytest.raises(RuntimeError): |
| 67 | + semver = Semver(version) |
| 68 | + pass |
| 69 | + |
| 70 | + def test_compare(self): |
| 71 | + cnt = 0 |
| 72 | + for i in range(int(len(self.valid_versions)/2)): |
| 73 | + assert Semver(self.valid_versions[cnt]).compare(Semver(self.valid_versions[cnt+1])) == 1 |
| 74 | + assert Semver(self.valid_versions[cnt+1]).compare(Semver(self.valid_versions[cnt])) == -1 |
| 75 | + assert Semver(self.valid_versions[cnt]).compare(Semver(self.valid_versions[cnt])) == 0 |
| 76 | + assert Semver(self.valid_versions[cnt+1]).compare(Semver(self.valid_versions[cnt+1])) == 0 |
| 77 | + cnt = cnt + 2 |
| 78 | + |
| 79 | + assert Semver("1.1.1").compare(Semver("1.1.1")) == 0 |
| 80 | + assert Semver("1.1.1").compare(Semver("1.1.1+metadata")) == 0 |
| 81 | + assert Semver("1.1.1").compare(Semver("1.1.1-rc.1")) == 1 |
| 82 | + assert Semver("88.88.88").compare(Semver("88.88.88")) == 0 |
| 83 | + assert Semver("1.2.3----RC-SNAPSHOT.12.9.1--.12").compare(Semver("1.2.3----RC-SNAPSHOT.12.9.1--.12")) == 0 |
| 84 | + assert Semver("10.2.3-DEV-SNAPSHOT").compare(Semver("10.2.3-SNAPSHOT-123")) == -1 |
| 85 | + |
| 86 | + def _verify_version(self, semver, major, minor, patch, pre_release="", is_stable=True): |
| 87 | + assert semver._major == major |
| 88 | + assert semver._minor == minor |
| 89 | + assert semver._patch == patch |
| 90 | + assert semver._pre_release == pre_release |
| 91 | + assert semver._is_stable == is_stable |
0 commit comments