Percentage bars: non-blocking solution for values out of range

pull/717/head
Alessio Sergi 2015-11-06 22:33:11 +01:00
parent 4426487e63
commit 25816ceae7
2 changed files with 24 additions and 12 deletions

View File

@ -45,6 +45,9 @@ class Bar(object):
self.__size = size self.__size = size
# Bar current percent # Bar current percent
self.__percent = 0 self.__percent = 0
# Min and max value
self.min_value = 0
self.max_value = 100
# Char used for the decoration # Char used for the decoration
self.__pre_char = pre_char self.__pre_char = pre_char
self.__post_char = post_char self.__post_char = post_char
@ -69,9 +72,10 @@ class Bar(object):
@percent.setter @percent.setter
def percent(self, value): def percent(self, value):
if value < 0 or value > 100: if value <= self.min_value:
raise AssertionError('The percent must be between 0 and 100.') value = self.min_value
if value >= self.max_value:
value = self.max_value
self.__percent = value self.__percent = value
@property @property

View File

@ -179,17 +179,25 @@ class TestGlances(unittest.TestCase):
# self.assertEqual(total, len(stats_grab)) # self.assertEqual(total, len(stats_grab))
def test_011_output_bars_must_be_between_0_and_100_percent(self): def test_011_output_bars_must_be_between_0_and_100_percent(self):
"""Test quick look plugin.""" """Test quick look plugin.
> bar.min_value
0
> bar.max_value
100
> bar.percent = -1
> bar.percent
0
> bar.percent = 101
> bar.percent
100
"""
print('INFO: [TEST_011] Test progress bar') print('INFO: [TEST_011] Test progress bar')
bar = Bar(size=1) bar = Bar(size=1)
with self.assertRaises(AssertionError):
bar.percent = -1 bar.percent = -1
self.assertLessEqual(bar.percent, bar.min_value)
bar.percent = 101 bar.percent = 101
self.assertGreaterEqual(bar.percent, bar.max_value)
# 0 - 100 is an inclusive range, so these should not error.
bar.percent = 0
bar.percent = 100
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()