From 25faa458b9f7d9c7e990564986dd0e8511b0cb74 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 28 Nov 2011 13:39:37 -0500 Subject: [PATCH] [#181 state:fixed] Fixed a bug where performing actions like Mark All under a filtered environment would mark dupes even if they weren't in the filter. --- core/markable.py | 12 ++++++++++++ core/results.py | 20 +++++++++++++++++++- core/tests/results_test.py | 7 +++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/core/markable.py b/core/markable.py index 2281f873..06c3ca1d 100644 --- a/core/markable.py +++ b/core/markable.py @@ -51,6 +51,10 @@ class Markable: return False return self.mark_toggle(o) + def mark_multiple(self, objects): + for o in objects: + self.mark(o) + def mark_all(self): self.mark_none() self.__inverted = True @@ -75,11 +79,19 @@ class Markable: self._did_mark(o) return True + def mark_toggle_multiple(self, objects): + for o in objects: + self.mark_toggle(o) + def unmark(self, o): if not self.is_marked(o): return False return self.mark_toggle(o) + def unmark_multiple(self, objects): + for o in objects: + self.unmark(o) + #--- Properties @property def mark_count(self): diff --git a/core/results.py b/core/results.py index 9ff046bd..04c66c34 100644 --- a/core/results.py +++ b/core/results.py @@ -23,7 +23,7 @@ from .markable import Markable class Results(Markable): #---Override def __init__(self, app): - super(Results, self).__init__() + Markable.__init__(self) self.__groups = [] self.__group_of_duplicate = {} self.__groups_sort_descriptor = None # This is a tuple (key, asc) @@ -59,6 +59,24 @@ class Results(Markable): return False return True + def mark_all(self): + if self.__filters: + self.mark_multiple(self.__filtered_dupes) + else: + Markable.mark_all(self) + + def mark_invert(self): + if self.__filters: + self.mark_toggle_multiple(self.__filtered_dupes) + else: + Markable.mark_invert(self) + + def mark_none(self): + if self.__filters: + self.unmark_multiple(self.__filtered_dupes) + else: + Markable.mark_none(self) + #---Private def __get_dupe_list(self): if self.__dupes is None: diff --git a/core/tests/results_test.py b/core/tests/results_test.py index e9b49c77..c748312f 100644 --- a/core/tests/results_test.py +++ b/core/tests/results_test.py @@ -715,6 +715,13 @@ class TestCaseResultsFilter: expected = '1 / 1 (1.00 B / 1.00 B) duplicates marked. filter: foo' eq_(expected, self.results.stat_line) + def test_mark_all_only_affects_filtered_items(self): + # When performing actions like mark_all() and mark_none in a filtered environment, only mark + # items that are actually in the filter. + self.results.mark_all() + self.results.apply_filter(None) + eq_(self.results.mark_count, 1) + def test_sort_groups(self): self.results.apply_filter(None) self.results.make_ref(self.objects[1]) # to have the 1024 b obkect as ref