Author: gclayton
Date: Tue Sep 22 12:18:15 2015
New Revision: 248290

URL: http://llvm.org/viewvc/llvm-project?rev=248290&view=rev
Log:
Allow TAB key to switch first responder when tests are running or completed.

Typing the shortcut key ('.' for 'pass', 'e' for 'error', etc) will toggle the 
visibility of the test in the Results window.


Modified:
    lldb/trunk/test/curses_results.py
    lldb/trunk/test/lldbcurses.py

Modified: lldb/trunk/test/curses_results.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/test/curses_results.py?rev=248290&r1=248289&r2=248290&view=diff
==============================================================================
--- lldb/trunk/test/curses_results.py (original)
+++ lldb/trunk/test/curses_results.py Tue Sep 22 12:18:15 2015
@@ -29,11 +29,13 @@ class Curses(test_results.ResultsFormatt
         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.ResultsFormatt
         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.ResultsFormatt
         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.ResultsFormatt
                 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.ResultsFormatt
             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.ResultsFormatt
                         # 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

Modified: lldb/trunk/test/lldbcurses.py
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbcurses.py?rev=248290&r1=248289&r2=248290&view=diff
==============================================================================
--- lldb/trunk/test/lldbcurses.py (original)
+++ lldb/trunk/test/lldbcurses.py Tue Sep 22 12:18:15 2015
@@ -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'''


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to