You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
4.1 KiB
148 lines
4.1 KiB
From f332326e54a5582092b50c8fa113d11bbdf1a9e6 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Laferriere <t.laferriere@hotmail.ca>
|
|
Date: Wed, 10 Jun 2020 01:44:11 -0400
|
|
Subject: [PATCH] Fix #260 __getitem__ returning `None` on falsy parts
|
|
|
|
* Fix #260 and add tests for these special cases
|
|
* Fix IndexError not being thrown every time it should
|
|
* Update CHANGELOG.rst
|
|
|
|
Co-authored-by: Tom Schraitle <tomschr@users.noreply.github.com>
|
|
---
|
|
CHANGELOG.rst | 28 ++++++++++++++++++++++++++++
|
|
semver.py | 9 ++++-----
|
|
test_semver.py | 35 ++++++++++++++++++++++++++++-------
|
|
3 files changed, 60 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
|
|
index c28880e..2671ef2 100644
|
|
--- a/CHANGELOG.rst
|
|
+++ b/CHANGELOG.rst
|
|
@@ -7,6 +7,34 @@ All notable changes to this code base will be documented in this file,
|
|
in every released version.
|
|
|
|
|
|
+Version 2.10.2 (WIP)
|
|
+====================
|
|
+
|
|
+:Released: 2020-xx-yy
|
|
+:Maintainer:
|
|
+
|
|
+Features
|
|
+--------
|
|
+
|
|
+n/a
|
|
+
|
|
+Bug Fixes
|
|
+---------
|
|
+
|
|
+:gh:`260` (:pr:`261`): Fixed ``__getitem__`` returning None on wrong parts
|
|
+
|
|
+
|
|
+Additions
|
|
+---------
|
|
+
|
|
+n/a
|
|
+
|
|
+Removals
|
|
+--------
|
|
+
|
|
+n/a
|
|
+
|
|
+
|
|
Version 2.10.1
|
|
==============
|
|
|
|
diff --git a/semver.py b/semver.py
|
|
index 00338e8..0c98af9 100644
|
|
--- a/semver.py
|
|
+++ b/semver.py
|
|
@@ -548,17 +548,16 @@ def __getitem__(self, index):
|
|
|
|
if (
|
|
isinstance(index, slice)
|
|
- and (index.start is None or index.start < 0)
|
|
- and (index.stop is None or index.stop < 0)
|
|
+ and (index.start is not None and index.start < 0)
|
|
+ or (index.stop is not None and index.stop < 0)
|
|
):
|
|
raise IndexError("Version index cannot be negative")
|
|
|
|
- # Could raise IndexError:
|
|
- part = tuple(filter(None, self.to_tuple()[index]))
|
|
+ part = tuple(filter(lambda p: p is not None, self.to_tuple()[index]))
|
|
|
|
if len(part) == 1:
|
|
part = part[0]
|
|
- if not part:
|
|
+ elif not part:
|
|
raise IndexError("Version part undefined")
|
|
return part
|
|
|
|
diff --git a/test_semver.py b/test_semver.py
|
|
index 8ecc81f..1fd87ee 100644
|
|
--- a/test_semver.py
|
|
+++ b/test_semver.py
|
|
@@ -774,6 +774,8 @@ def test_should_be_able_to_use_integers_as_prerelease_build():
|
|
("1.2.3", 0, 1),
|
|
("1.2.3", 1, 2),
|
|
("1.2.3", 2, 3),
|
|
+ # Special cases
|
|
+ ("1.0.2", 1, 0),
|
|
],
|
|
)
|
|
def test_version_info_should_be_accessed_with_index(version, index, expected):
|
|
@@ -801,6 +803,7 @@ def test_version_info_should_be_accessed_with_index(version, index, expected):
|
|
("1.2.3-rc.0+build.0", slice(0, 5, 2), (1, 3, "build.0")),
|
|
("1.2.3-rc.0+build.0", slice(None, 5, 2), (1, 3, "build.0")),
|
|
("1.2.3-rc.0+build.0", slice(5, 0, -2), ("build.0", 3)),
|
|
+ ("1.2.0-rc.0+build.0", slice(3), (1, 2, 0)),
|
|
],
|
|
)
|
|
def test_version_info_should_be_accessed_with_slice_object(
|
|
@@ -813,19 +816,37 @@ def test_version_info_should_be_accessed_with_slice_object(
|
|
@pytest.mark.parametrize(
|
|
"version, index",
|
|
[
|
|
- ("1.2.3-rc.0+build.0", -1),
|
|
- ("1.2.3-rc.0", -1),
|
|
- ("1.2.3-rc.0", 4),
|
|
- ("1.2.3", -1),
|
|
("1.2.3", 3),
|
|
+ ("1.2.3", slice(3, 4)),
|
|
("1.2.3", 4),
|
|
- ("1.2.3", 10),
|
|
- ("1.2.3", slice(-3)),
|
|
+ ("1.2.3", slice(4, 5)),
|
|
+ ("1.2.3", 5),
|
|
+ ("1.2.3", slice(5, 6)),
|
|
+ ("1.2.3-rc.0", 5),
|
|
+ ("1.2.3-rc.0", slice(5, 6)),
|
|
+ ("1.2.3-rc.0", 6),
|
|
+ ("1.2.3-rc.0", slice(6, 7)),
|
|
],
|
|
)
|
|
def test_version_info_should_throw_index_error(version, index):
|
|
version_info = VersionInfo.parse(version)
|
|
- with pytest.raises(IndexError):
|
|
+ with pytest.raises(IndexError, match=r"Version part undefined"):
|
|
+ version_info[index]
|
|
+
|
|
+
|
|
+@pytest.mark.parametrize(
|
|
+ "version, index",
|
|
+ [
|
|
+ ("1.2.3", -1),
|
|
+ ("1.2.3", -2),
|
|
+ ("1.2.3", slice(-2, 2)),
|
|
+ ("1.2.3", slice(2, -2)),
|
|
+ ("1.2.3", slice(-2, -2)),
|
|
+ ],
|
|
+)
|
|
+def test_version_info_should_throw_index_error_when_negative_index(version, index):
|
|
+ version_info = VersionInfo.parse(version)
|
|
+ with pytest.raises(IndexError, match=r"Version index cannot be negative"):
|
|
version_info[index]
|
|
|
|
|