Index: chrome/test/mini_installer/window_verifier.py |
diff --git a/chrome/test/mini_installer/window_verifier.py b/chrome/test/mini_installer/window_verifier.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fd5a37086ec3163ed4669afcb6540be031b44bb0 |
--- /dev/null |
+++ b/chrome/test/mini_installer/window_verifier.py |
@@ -0,0 +1,48 @@ |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import ctypes |
+ |
+ |
+def VerifyWindows(windows): |
+ """Verifies the current windows according to the expectation dictionaries. |
+ |
+ Args: |
+ windows: A dictionary whose keys are titles of windows and values are |
+ expectation dictionaries. An expectation dictionary is a dictionary with |
+ the following key and value: |
+ 'exists' a boolean indicating whether the window should exist. |
+ """ |
+ titles = WindowTitles() |
+ for window_title, expectation in windows.iteritems(): |
+ if window_title in titles: |
+ assert expectation['exists'], "Window '%s' exists" % window_title |
gab
2013/08/13 17:49:27
Isn't there a way to test both cases in 1 line, so
|
+ else: |
+ assert not expectation['exists'], \ |
+ "Window '%s' does not exist" % window_title |
+ |
+ |
+def WindowTitles(): |
+ """Retutn the titles of all top-level windows.""" |
+ titles = [] |
+ # Create a callback function to pass to the EnumWindows function. |
+ # The callback receives the handle to each top-level window. |
+ def EnumerateWindowCallback(hwnd, _): |
+ # If the window is visible, add its title to |titles|. |
+ if ctypes.windll.user32.IsWindowVisible(hwnd): |
+ length = ctypes.windll.user32.GetWindowTextLengthW(hwnd) |
+ buffer = ctypes.create_unicode_buffer(length + 1) |
+ ctypes.windll.user32.GetWindowTextW(hwnd, buffer, length + 1) |
+ titles.append(buffer.value) |
+ # Return True to continue enumerating windows. |
+ return True |
+ # Create a function prototype for the callback, which takes two pointers and |
+ # returns a boolean. |
+ callback_prototype = ctypes.WINFUNCTYPE(ctypes.c_bool, |
+ ctypes.POINTER(ctypes.c_int), |
+ ctypes.POINTER(ctypes.c_int)) |
+ callback = callback_prototype(EnumerateWindowCallback) |
+ # Enumerate all top-level windows. |
+ ctypes.windll.user32.EnumWindows(callback, 0) |
+ return titles |