def test_shown(self): pages = 50 tests = [{'label': 'left edge', 'current': 0, 'expect': [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ], [47, 48, 49]]}, {'label': 'middle', 'current': 25, 'expect': [[0, 1, 2], [ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, ], [47, 48, 49]]}, {'label': 'right edge', 'current': 49, 'expect': [[0, 1, 2], [ 41, 42, 43, 44, 45, 46, 47, 48, 49, ]]}] for test in tests: page_list = PageList(pages, current_page=test['current']) self.assertEqual(page_list.shown(), test['expect']) return
def test_is_shown(self): # rules: # left and right edge have a minimum 3 # left edge: if current page <= 9, and i <= 9 show # right edge: if current page > pages - 9 and i >= pages - 9 show # middle: if abs(current page - i ) <= 9/2 show # If the number of pages is 9 or less, then all page numbers are shown # regardless of the current page pages = 9 expect_true = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, ] for current_page in range(-2, pages + 2): page_list = PageList(pages, current_page) shown_true = [] # The range intentionally extends prior and beyond normal page # numbers. for page in range(-2, pages + 2): if page_list.is_shown(page): shown_true.append(page) self.assertEqual(expect_true, shown_true) # Ensure the left edge is always 3 or more # Ensure the right edge is always 3 or more pages = 50 left_edge = [0, 1, 2] right_edge = [47, 48, 49] for current_page in range(-2, pages + 2): page_list = PageList(pages, current_page) shown_true = [] # The range intentionally extends prior and beyond normal page # numbers. for page in range(-2, pages + 2): if page_list.is_shown(page): shown_true.append(page) min_len = page_list.min_edge + page_list.surround self.assertEqual(left_edge, shown_true[0:3]) self.assertEqual(right_edge, shown_true[-3:]) self.assertTrue(len(shown_true) >= min_len) # Ensure the surround is always at least 9. pages = 50 for current_page in range(-2, pages + 2): page_list = PageList(pages, current_page) shown_true = [] # The range intentionally extends prior and beyond normal page # numbers. for page in range(-2, pages + 2): if page_list.is_shown(page): shown_true.append(page) start = current_page - 1 - page_list.surround / 2 if start < 0: start = 0 end = current_page + page_list.surround / 2 if end >= pages: end = page - 1 surround_range = range(start, end) self.assertTrue(set(surround_range).issubset(set(shown_true))) return