Removing assertion in drange to allow equal inputs (#246) and mimic behaviour of built-in method range

Fixes #66, since it now allows the bbox to have 0 width or 0 height
Added tests for Plane since it is the API that uses drange
pull/306/head
jet457 2019-10-17 03:04:25 -07:00 committed by Pieter Marsman
parent 4df6d4e5ca
commit 7e40fde320
2 changed files with 40 additions and 1 deletions

View File

@ -161,7 +161,6 @@ def fsplit(pred, objs):
# drange # drange
def drange(v0, v1, d): def drange(v0, v1, d):
"""Returns a discrete range.""" """Returns a discrete range."""
assert v0 < v1, str((v0, v1, d))
return range(int(v0)//d, int(v1+d)//d) return range(int(v0)//d, int(v1+d)//d)

40
tests/test_utils.py Normal file
View File

@ -0,0 +1,40 @@
from nose.tools import assert_equal
from pdfminer.layout import LTComponent
from pdfminer.utils import make_compat_str, Plane
class TestPlane(object):
def test_find_nothing_in_empty_bbox(self):
plane, _ = self.given_plane_with_one_object()
result = list(plane.find((50, 50, 100, 100)))
assert_equal(result, [])
def test_find_nothing_after_removing(self):
plane, obj = self.given_plane_with_one_object()
plane.remove(obj)
result = list(plane.find((0, 0, 100, 100)))
assert_equal(result, [])
def test_find_object_in_whole_plane(self):
plane, obj = self.given_plane_with_one_object()
result = list(plane.find((0, 0, 100, 100)))
assert_equal(result, [obj])
def test_find_if_object_is_smaller_than_gridsize(self):
plane, obj = self.given_plane_with_one_object(object_size=1, gridsize=100)
result = list(plane.find((0, 0, 100, 100)))
assert_equal(result, [obj])
def test_find_object_if_much_larger_than_gridsize(self):
plane, obj = self.given_plane_with_one_object(object_size=100, gridsize=10)
result = list(plane.find((0, 0, 100, 100)))
assert_equal(result, [obj])
@staticmethod
def given_plane_with_one_object(object_size=50, gridsize=50):
bounding_box = (0, 0, 100, 100)
plane = Plane(bounding_box, gridsize)
obj = LTComponent((0, 0, object_size, object_size))
plane.add(obj)
return plane, obj