Further fixes to format_grid
This commit is contained in:
parent
2a18cb0a2d
commit
c9cab183f5
2 changed files with 45 additions and 15 deletions
|
|
@ -289,6 +289,8 @@ class TestFormatGrid(TestCase):
|
||||||
elements = self._generate_elements(3, 1, 30)
|
elements = self._generate_elements(3, 1, 30)
|
||||||
result = utils.format_grid(elements, width=78)
|
result = utils.format_grid(elements, width=78)
|
||||||
rows = result.split("\n")
|
rows = result.split("\n")
|
||||||
|
for row in rows:
|
||||||
|
print(f"'{row}'")
|
||||||
self.assertEqual(len(rows), 3)
|
self.assertEqual(len(rows), 3)
|
||||||
self.assertTrue(all(len(row) == 78 for row in rows))
|
self.assertTrue(all(len(row) == 78 for row in rows))
|
||||||
|
|
||||||
|
|
@ -297,24 +299,28 @@ class TestFormatGrid(TestCase):
|
||||||
elements = self._generate_elements(3, 15, 30)
|
elements = self._generate_elements(3, 15, 30)
|
||||||
result = utils.format_grid(elements, width=82, sep=" ")
|
result = utils.format_grid(elements, width=82, sep=" ")
|
||||||
rows = result.split("\n")
|
rows = result.split("\n")
|
||||||
|
for row in rows:
|
||||||
|
print(f"'{row}'")
|
||||||
self.assertEqual(len(rows), 8)
|
self.assertEqual(len(rows), 8)
|
||||||
self.assertTrue(all(len(row) == 82 for row in rows))
|
self.assertTrue(all(len(row) == 82 for row in rows))
|
||||||
|
|
||||||
def test_huge_grid(self):
|
def test_huge_grid(self):
|
||||||
"""Grid with very long strings"""
|
"""Grid with very long strings"""
|
||||||
|
# from pudb import debugger
|
||||||
|
# debugger.Debugger().set_trace()
|
||||||
elements = self._generate_elements(70, 20, 30)
|
elements = self._generate_elements(70, 20, 30)
|
||||||
result = utils.format_grid(elements, width=78)
|
result = utils.format_grid(elements, width=78)
|
||||||
rows = result.split("\n")
|
rows = result.split("\n")
|
||||||
|
for row in rows:
|
||||||
|
print(f"'{row}'")
|
||||||
self.assertEqual(len(rows), 30)
|
self.assertEqual(len(rows), 30)
|
||||||
self.assertTrue(all(len(row) == 78 for row in rows))
|
self.assertTrue(all(len(row) == 78 for row in rows))
|
||||||
|
|
||||||
def test_overlap(self):
|
def test_overlap(self):
|
||||||
|
"""Grid with elements overlapping into the next slot"""
|
||||||
elements = ("alias", "batchcode", "batchcommands", "cmdsets",
|
elements = ("alias", "batchcode", "batchcommands", "cmdsets",
|
||||||
"copy", "cpattr", "desc", "destroy", "dig",
|
"copy", "cpattr", "desc", "destroy", "dig",
|
||||||
"examine", "find", "force", "lock")
|
"examine", "find", "force", "lock")
|
||||||
# from evennia import set_trace;set_trace()
|
|
||||||
from pudb import debugger
|
|
||||||
debugger.Debugger().set_trace()
|
|
||||||
result = utils.format_grid(elements, width=78)
|
result = utils.format_grid(elements, width=78)
|
||||||
rows = result.split("\n")
|
rows = result.split("\n")
|
||||||
self.assertEqual(len(rows), 2)
|
self.assertEqual(len(rows), 2)
|
||||||
|
|
@ -322,4 +328,3 @@ class TestFormatGrid(TestCase):
|
||||||
print(f"'{row}'")
|
print(f"'{row}'")
|
||||||
for element in elements:
|
for element in elements:
|
||||||
self.assertTrue(element in result, f"element {element} is missing.")
|
self.assertTrue(element in result, f"element {element} is missing.")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1686,10 +1686,11 @@ def format_table(table, extra_space=1):
|
||||||
)
|
)
|
||||||
return ftable
|
return ftable
|
||||||
|
|
||||||
import functools
|
|
||||||
|
import functools # noqa
|
||||||
|
|
||||||
|
|
||||||
def percentile(iterable, percent, key=lambda x:x):
|
def percentile(iterable, percent, key=lambda x: x):
|
||||||
"""
|
"""
|
||||||
Find the percentile of a list of values.
|
Find the percentile of a list of values.
|
||||||
|
|
||||||
|
|
@ -1743,31 +1744,55 @@ def format_grid(elements, width=78, sep=" "):
|
||||||
row = ""
|
row = ""
|
||||||
for ie, element in enumerate(elements):
|
for ie, element in enumerate(elements):
|
||||||
wl = wls[ie]
|
wl = wls[ie]
|
||||||
|
lrow = len(row)
|
||||||
|
debug = row.replace(" ", ".")
|
||||||
# from evennia import set_trace;set_trace()
|
# from evennia import set_trace;set_trace()
|
||||||
if ic >= aver_per_row - 1 or ie >= nelements - 1:
|
if ie >= nelements - 1:
|
||||||
if ic == 0:
|
# last element in list - make sure to add it
|
||||||
row = crop(element)
|
if lrow + wl > width:
|
||||||
|
# last slot extends outside grid, move to next line
|
||||||
|
row += " " * (width - lrow)
|
||||||
|
rows.append(row)
|
||||||
|
row = crop(element, width)
|
||||||
|
else:
|
||||||
|
row += crop(element, width)
|
||||||
row += " " * max(0, (width - len(row)))
|
row += " " * max(0, (width - len(row)))
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
row = ""
|
elif ic >= aver_per_row - 1:
|
||||||
|
# last slot on the line
|
||||||
|
if ic == 0:
|
||||||
|
# one slot per line
|
||||||
|
row = crop(element, width)
|
||||||
|
row += " " * max(0, (width - len(row)))
|
||||||
|
rows.append(row)
|
||||||
|
else:
|
||||||
|
# finish line, put slot on next line
|
||||||
|
row += " " * max(0, (width - lrow))
|
||||||
|
rows.append(row)
|
||||||
|
row = crop(element, width)
|
||||||
ic = 0
|
ic = 0
|
||||||
elif indices[ic] + wl > width:
|
elif lrow + wl > width:
|
||||||
row += " " * (width - len(row))
|
# last slot extends outside grid, move to next line
|
||||||
|
row += " " * (width - lrow)
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
row = crop(element, width)
|
row = crop(element, width)
|
||||||
ic = 0
|
ic = 0
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
while len(row) > indices[ic] - 1:
|
while lrow > max(0, indices[ic]):
|
||||||
|
# slot too wide, extend into adjacent slot
|
||||||
ic += 1
|
ic += 1
|
||||||
|
row += " " * max(0, indices[ic] - lrow)
|
||||||
except IndexError:
|
except IndexError:
|
||||||
|
# we extended past edge of grid, crop or move to next line
|
||||||
if ic == 0:
|
if ic == 0:
|
||||||
row = crop(element, width)
|
row = crop(element, width)
|
||||||
else:
|
else:
|
||||||
row += " " * max(0, width - len(row))
|
row += " " * max(0, width - lrow)
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
ic = 0
|
ic = 0
|
||||||
else:
|
else:
|
||||||
|
# add a new slot
|
||||||
row += element + " " * max(0, averlen - wl)
|
row += element + " " * max(0, averlen - wl)
|
||||||
ic += 1
|
ic += 1
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue