summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/test/curses_results.py48
-rw-r--r--lldb/test/lldbcurses.py7
2 files changed, 52 insertions, 3 deletions
diff --git a/lldb/test/curses_results.py b/lldb/test/curses_results.py
index 0b9aa2657a7..10a4d56dc45 100644
--- a/lldb/test/curses_results.py
+++ b/lldb/test/curses_results.py
@@ -29,11 +29,13 @@ class Curses(test_results.ResultsFormatter):
self.saved_first_responder = None
try:
self.main_window = lldbcurses.intialize_curses()
+ self.main_window.delegate = self.handle_main_window_key
self.main_window.refresh()
self.job_panel = None
self.results_panel = None
self.status_panel = None
self.info_panel = None
+ self.hide_status_list = list()
except:
self.have_curses = False
lldbcurses.terminate_curses()
@@ -64,6 +66,10 @@ class Curses(test_results.ResultsFormatter):
else:
return status
+ def handle_main_window_key(self, window, key):
+ if key == ord('\t'):
+ self.main_window.select_next_first_responder()
+
def handle_info_panel_key(self, window, key):
window.resign_first_responder(remove_from_parent=True, new_first_responder=self.saved_first_responder)
window.hide()
@@ -75,6 +81,7 @@ class Curses(test_results.ResultsFormatter):
return False
def handle_result_panel_key(self, window, key):
+ toggle_status = None
if key == ord('\r') or key == ord('\n') or key == curses.KEY_ENTER:
selected_idx = self.results_panel.get_selected_idx()
if selected_idx >= 0 and selected_idx < len(self.results):
@@ -85,7 +92,7 @@ class Curses(test_results.ResultsFormatter):
else:
self.info_panel.show()
- self.saved_first_responder = self.main_window.first_responder
+ self.saved_first_responder = self.main_window.first_responder
self.main_window.set_first_responder(self.info_panel)
test_start = self.results[selected_idx][0]
test_result = self.results[selected_idx][1]
@@ -101,10 +108,44 @@ class Curses(test_results.ResultsFormatter):
self.results_panel.select_prev()
elif key == curses.KEY_DOWN:
self.results_panel.select_next()
+ elif key == ord('.'):
+ toggle_status = 'success'
+ elif key == ord('e') or key == ord('E'):
+ toggle_status = 'error'
+ elif key == ord('f') or key == ord('F'):
+ toggle_status = 'failure'
+ elif key == ord('s') or key == ord('S'):
+ toggle_status = 'skip'
+ elif key == ord('x') or key == ord('X'):
+ toggle_status = 'expected_failure'
+ elif key == ord('?'):
+ toggle_status = 'unexpected_success'
else:
return False
- self.main_window.refresh()
+ if toggle_status:
+ # Toggle showing and hiding results whose status matches "toggle_status" in "Results" window
+ if toggle_status in self.hide_status_list:
+ self.hide_status_list.remove(toggle_status)
+ else:
+ self.hide_status_list.append(toggle_status)
+ self.update_results(update=False) # Will update below
+ self.main_window.refresh()
+
+ def update_results(self, update=True):
+ '''Called after a category of test have been show/hidden to update the results list with
+ what the user desires to see.'''
+ self.results_panel.clear(update=False)
+ for result in self.results:
+ test_result = result[1]
+ status = test_result['status']
+ if status in self.hide_status_list:
+ continue
+ name = test_result['test_class'] + '.' + test_result['test_name']
+ self.results_panel.append_line('%s (%6.2f sec) %s' % (self.status_to_short_str(status), test_result['elapsed_time'], name))
+ if update:
+ self.main_window.refresh()
+
def handle_event(self, test_event):
with self.lock:
super(Curses, self).handle_event(test_event)
@@ -138,7 +179,8 @@ class Curses(test_results.ResultsFormatter):
# if status != 'success' and status != 'skip' and status != 'expect_failure':
name = test_event['test_class'] + '.' + test_event['test_name']
elapsed_time = test_event['event_time'] - self.job_tests[worker_index]['event_time']
- self.results_panel.append_line('%s (%6.2f sec) %s' % (self.status_to_short_str(status), elapsed_time, name))
+ if not status in self.hide_status_list:
+ self.results_panel.append_line('%s (%6.2f sec) %s' % (self.status_to_short_str(status), elapsed_time, name))
self.main_window.refresh()
# Append the result pairs
test_event['elapsed_time'] = elapsed_time
diff --git a/lldb/test/lldbcurses.py b/lldb/test/lldbcurses.py
index cd9c89c86e7..3c866c3ce9f 100644
--- a/lldb/test/lldbcurses.py
+++ b/lldb/test/lldbcurses.py
@@ -271,6 +271,13 @@ class BoxedPanel(Panel):
self.selected_idx = -1
self.update()
+ def clear(self, update=True):
+ self.lines = list()
+ self.first_visible_idx = 0
+ self.selected_idx = -1
+ if update:
+ self.update()
+
def get_usable_width(self):
'''Valid usable width is 0 to (width - 3) since the left and right lines display the box around
this frame and we skip a leading space'''
OpenPOWER on IntegriCloud