Merge lp:~compiz-team/compiz/compiz.fix_1170013 into lp:compiz/0.9.10

Proposed by Sam Spilsbury
Status: Superseded
Proposed branch: lp:~compiz-team/compiz/compiz.fix_1170013
Merge into: lp:compiz/0.9.10
Diff against target: 532 lines (+500/-0)
5 files modified
debian/rules (+3/-0)
tests/acceptance-tests/CMakeLists.txt (+1/-0)
tests/acceptance-tests/autopilot/CMakeLists.txt (+12/-0)
tests/acceptance-tests/autopilot/README (+23/-0)
tests/acceptance-tests/autopilot/compiz_autopilot_acceptance_tests.cpp (+461/-0)
To merge this branch: bzr merge lp:~compiz-team/compiz/compiz.fix_1170013
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Needs Fixing
Compiz Maintainers Pending
Review via email: mp+159422@code.launchpad.net

This proposal has been superseded by a proposal from 2013-04-26.

Commit message

Add a small compiz_autopilot_acceptance_tests binary based on gtest.

This will find autopilot and run a predefined list of tests, wrapped
up in the familiar google test format.

The predefined list is basically a bunch of tests which effectively
interact with the window manager.

(LP: #1170013)

Description of the change

Add a small compiz_autopilot_acceptance_tests binary based on gtest.

This will find autopilot and run a predefined list of tests, wrapped
up in the familiar google test format.

The predefined list is basically a bunch of tests which effectively
interact with the window manager.

(LP: #1170013)

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
3659. By Sam Spilsbury

Actually add the autopilot tests

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
3660. By Sam Spilsbury

Make the pipes, file descriptor backup and file descriptor redirection
encapsulated in objects, make the code exception safe with the strong
guaruntee (eg, any changes in file descriptors will be reverted unless
close () fails).

poll () before reading.

Added comments to some sections to indicate what was going on.

Minor style changes.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
3661. By Sam Spilsbury

Remove iostreams dep and make the fd classes noncopayble

3662. By Sam Spilsbury

Add a note on why we call close () after the constructors

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
MC Return (mc-return) wrote :

Unfortunately I am not able to test this, because I get hit by bug #1171364.

3663. By Sam Spilsbury

Add a small README

3664. By Sam Spilsbury

Install the acceptance tests binary

3665. By Sam Spilsbury

Remove the acceptance tests from the debian install

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
3666. By Sam Spilsbury

Use a tab

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
MC Return (mc-return) wrote :

Here a whitespace is missing:

172 + /* Redirect backed up fd to old fd location*/

274 + * as the child is using them at return*/

You could remove the brackets here:

267 + else if (child == -1)
268 + {
269 + throw std::runtime_error (strerror (errno));
270 + }

306 + {
307 + /* waitpid () failed */
308 + throw std::runtime_error (strerror (errno));
309 + }

395 + else
396 + {
397 + /* There's nothing on the pipe, assume EOF */
398 + count = 0;
399 + }

445 + else
446 + {
447 + /* Extra space here to align with gtest output */
448 + std::cout << "[AUTOPILOT ] Pass test " << GetParam () << std::endl;
449 + }

Typo:

389 + /* Always nul-terminate */

Other than that LGTM AFAICT. ;)

3667. By Sam Spilsbury

Samll style cleanup

Revision history for this message
Sam Spilsbury (smspillaz) wrote :

> Here a whitespace is missing:
>
> 172 + /* Redirect backed up fd to old fd location*/
>
> 274 + * as the child is using them at return*/
>

Fixed,

> You could remove the brackets here:
>
> 267 + else if (child == -1)
> 268 + {
> 269 + throw std::runtime_error (strerror (errno));
> 270 + }
>
> 306 + {
> 307 + /* waitpid () failed */
> 308 + throw std::runtime_error (strerror (errno));
> 309 + }
>
> 395 + else
> 396 + {
> 397 + /* There's nothing on the pipe, assume EOF */
> 398 + count = 0;
> 399 + }
>
> 445 + else
> 446 + {
> 447 + /* Extra space here to align with gtest output */
> 448 + std::cout << "[AUTOPILOT ] Pass test " << GetParam () <<
> std::endl;
> 449 + }

I've decided to remove the brackets only on the first. The inline comment necessitates brackets for readability purposes on the others.
>
> Typo:
>
> 389 + /* Always nul-terminate */

Fixed.

>
> Other than that LGTM AFAICT. ;)

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
MC Return (mc-return) wrote :

>
> I've decided to remove the brackets only on the first. The inline comment
> necessitates brackets for readability purposes on the others.

No hard rule and no problem of course...

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/rules'
2--- debian/rules 2013-02-18 14:06:27 +0000
3+++ debian/rules 2013-04-26 03:37:26 +0000
4@@ -58,6 +58,9 @@
5 # remove .a files
6 rm -f debian/tmp/usr/lib/*.a
7
8+ # remove acceptance test binary
9+ rm -f debian/tmp/usr/bin/compiz_autopilot_acceptance_tests
10+
11 # remove gconf schema files
12 #rm -rf debian/tmp/usr/share/gconf/schemas/
13
14
15=== modified file 'tests/acceptance-tests/CMakeLists.txt'
16--- tests/acceptance-tests/CMakeLists.txt 2012-12-05 03:35:37 +0000
17+++ tests/acceptance-tests/CMakeLists.txt 2013-04-26 03:37:26 +0000
18@@ -1,1 +1,2 @@
19 add_subdirectory (xorg-gtest)
20+add_subdirectory (autopilot)
21
22=== added directory 'tests/acceptance-tests/autopilot'
23=== added file 'tests/acceptance-tests/autopilot/CMakeLists.txt'
24--- tests/acceptance-tests/autopilot/CMakeLists.txt 1970-01-01 00:00:00 +0000
25+++ tests/acceptance-tests/autopilot/CMakeLists.txt 2013-04-26 03:37:26 +0000
26@@ -0,0 +1,12 @@
27+add_executable (compiz_autopilot_acceptance_tests
28+ ${CMAKE_CURRENT_SOURCE_DIR}/compiz_autopilot_acceptance_tests.cpp)
29+
30+set (COMPIZ_AUTOPILOT_ACCEPTANCE_TEST_LIBRARIES
31+ ${GTEST_BOTH_LIBRARIES}
32+ ${CMAKE_THREAD_LIBS_INIT})
33+
34+target_link_libraries (compiz_autopilot_acceptance_tests
35+ ${COMPIZ_AUTOPILOT_ACCEPTANCE_TEST_LIBRARIES})
36+
37+install (TARGETS compiz_autopilot_acceptance_tests
38+ RUNTIME DESTINATION ${exec_prefix})
39
40=== added file 'tests/acceptance-tests/autopilot/README'
41--- tests/acceptance-tests/autopilot/README 1970-01-01 00:00:00 +0000
42+++ tests/acceptance-tests/autopilot/README 2013-04-26 03:37:26 +0000
43@@ -0,0 +1,23 @@
44+COMPIZ AUTOPILOT ACCEPTANCE TESTS
45+=================================
46+
47+compiz_autopilot_acceptance_tests is a simple Google Test wrapper around
48+a suite of Unity Autopilot tests which effectively validate window manager
49+functionality by actually interacting with a running instance.
50+
51+Note: These tests are very sensitive. There's a high chance of false-positives
52+unless your session is set up exactly as indicated below:
53+
54+ 1. Use a session with a completely default configuration. This might
55+ include an Ubuntu guest session, or a new user.
56+ 2. Do not have any external monitors plugged in, even in mirror mode.
57+ Gdk will detect any plugged in monitors and report them as
58+ part of the monitors available - autopilot assumes that the monitors
59+ are always in xinerama mode, which may cause tests to fail in very
60+ non-obvious ways.
61+ 3. Do not have any other windows open at the time the test binary is
62+ launched. It is suggested to launch the test binary from another
63+ session with the same environment variables present in the
64+ guest session.
65+
66+Do not add this binary to the auto-test discovery.
67
68=== added file 'tests/acceptance-tests/autopilot/compiz_autopilot_acceptance_tests.cpp'
69--- tests/acceptance-tests/autopilot/compiz_autopilot_acceptance_tests.cpp 1970-01-01 00:00:00 +0000
70+++ tests/acceptance-tests/autopilot/compiz_autopilot_acceptance_tests.cpp 2013-04-26 03:37:26 +0000
71@@ -0,0 +1,461 @@
72+/*
73+ * Compiz Autopilot GTest Acceptance Tests
74+ *
75+ * Copyright (C) 2013 Canonical Ltd.
76+ *
77+ * This library is free software; you can redistribute it and/or
78+ * modify it under the terms of the GNU Lesser General Public
79+ * License as published by the Free Software Foundation; either
80+ * version 2.1 of the License, or (at your option) any later version.
81+
82+ * This library is distributed in the hope that it will be useful,
83+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
84+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
85+ * Lesser General Public License for more details.
86+
87+ * You should have received a copy of the GNU Lesser General Public
88+ * License along with this library; if not, write to the Free Software
89+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
90+ *
91+ * Authored By:
92+ * Sam Spilsbury <smspillaz@gmail.com>
93+ */
94+
95+#include <stdexcept>
96+#include <boost/noncopyable.hpp>
97+
98+#ifndef _GNU_SOURCE
99+#define _GNU_SOURCE
100+#endif
101+
102+#include <unistd.h>
103+#include <sys/poll.h>
104+#include <fcntl.h>
105+#include <errno.h>
106+
107+#include <gtest/gtest.h>
108+
109+using ::testing::ValuesIn;
110+using ::testing::WithParamInterface;
111+
112+namespace
113+{
114+ class Pipe :
115+ boost::noncopyable
116+ {
117+ public:
118+
119+ Pipe ()
120+ {
121+ if (pipe2 (mPipe, O_CLOEXEC) == -1)
122+ throw std::runtime_error (strerror (errno));
123+ }
124+
125+ ~Pipe ()
126+ {
127+ if (mPipe[0] &&
128+ close (mPipe[0]) == -1)
129+ std::cerr << "mPipe[0] " << strerror (errno) << std::endl;
130+
131+ if (mPipe[1] &&
132+ close (mPipe[1]) == -1)
133+ std::cerr << "mPipe[0] " << strerror (errno) << std::endl;
134+ }
135+
136+ /* Read end descriptor is read-only */
137+ int ReadEnd ()
138+ {
139+ return mPipe[0];
140+ }
141+
142+ /* Write end descriptor is writable, we need to close it
143+ * from other objects */
144+ int & WriteEnd ()
145+ {
146+ return mPipe[1];
147+ }
148+
149+ private:
150+
151+ int mPipe[2];
152+ };
153+
154+ class FileDescriptorBackup :
155+ boost::noncopyable
156+ {
157+ public:
158+
159+ FileDescriptorBackup (int fd) :
160+ mOriginalFd (fd),
161+ mBackupFd (0)
162+ {
163+ mBackupFd = dup (mOriginalFd);
164+
165+ /* Save original */
166+ if (mBackupFd == -1)
167+ throw std::runtime_error (strerror (errno));
168+ }
169+
170+ ~FileDescriptorBackup ()
171+ {
172+ /* Redirect backed up fd to old fd location */
173+ if (mBackupFd &&
174+ dup2 (mBackupFd, mOriginalFd) == -1)
175+ std::cerr << "Failed to restore file descriptor "
176+ << strerror (errno) << std::endl;
177+ }
178+
179+ private:
180+
181+ int mOriginalFd;
182+ int mBackupFd;
183+ };
184+
185+ class RedirectedFileDescriptor :
186+ boost::noncopyable
187+ {
188+ public:
189+
190+ RedirectedFileDescriptor (int from,
191+ int &to) :
192+ mFromFd (from),
193+ mToFd (to)
194+ {
195+ /* Make 'to' take the old file descriptor's place */
196+ if (dup2 (to, from) == -1)
197+ throw std::runtime_error (strerror (errno));
198+ }
199+
200+ ~RedirectedFileDescriptor ()
201+ {
202+ if (mToFd &&
203+ close (mToFd) == -1)
204+ std::cerr << "Failed to close redirect-to file descriptor "
205+ << strerror (errno) << std::endl;
206+
207+ mToFd = 0;
208+ }
209+
210+ private:
211+
212+ int mFromFd;
213+ int &mToFd;
214+ };
215+
216+ pid_t launchBinary (const std::string &executable,
217+ const char **argv,
218+ int &stderrWriteEnd,
219+ int &stdoutWriteEnd)
220+ {
221+ FileDescriptorBackup stderr (STDERR_FILENO);
222+ FileDescriptorBackup stdout (STDOUT_FILENO);
223+
224+ /* Close the originals once they have been backed up
225+ * We have to do this here and not in the FileDescriptorBackup
226+ * constructors because of an order-of-operations issue -
227+ * namely if we close an original file descriptor name
228+ * before duplicating another one, then there's a possibility
229+ * that the duplicated other one will get the same name as
230+ * the one we just closed, making us unable to restore
231+ * the closed one properly */
232+ if (close (STDERR_FILENO) == -1)
233+ throw std::runtime_error (strerror (errno));
234+
235+ if (close (STDOUT_FILENO) == -1)
236+ throw std::runtime_error (strerror (errno));
237+
238+ /* Replace the current process stderr and stdout with the write end
239+ * of the pipes. Now when someone tries to write to stderr or stdout
240+ * they'll write to our pipes instead */
241+ RedirectedFileDescriptor pipedStderr (STDERR_FILENO, stderrWriteEnd);
242+ RedirectedFileDescriptor pipedStdout (STDOUT_FILENO, stdoutWriteEnd);
243+
244+ /* Fork process, child gets a copy of the pipe write ends
245+ * - the original pipe write ends will be closed on exec
246+ * but the duplicated write ends now taking the place of
247+ * stderr and stdout will not be */
248+ pid_t child = fork ();
249+
250+ /* Child process */
251+ if (child == 0)
252+ {
253+ if (execvpe (executable.c_str (),
254+ const_cast <char * const *> (argv),
255+ environ) == -1)
256+ {
257+ std::cerr << "execvpe failed with error "
258+ << errno
259+ << std::endl
260+ << " - binary "
261+ << executable
262+ << std::endl;
263+ abort ();
264+ }
265+ }
266+ /* Parent process - error */
267+ else if (child == -1)
268+ throw std::runtime_error (strerror (errno));
269+
270+ /* The old file descriptors for the stderr and stdout
271+ * are put back in place, and pipe write ends closed
272+ * as the child is using them at return */
273+
274+ return child;
275+ }
276+
277+ int launchBinaryAndWaitForReturn (const std::string &executable,
278+ const char **argv,
279+ int &stderrWriteEnd,
280+ int &stdoutWriteEnd)
281+ {
282+ int status = 0;
283+ pid_t child = launchBinary (executable,
284+ argv,
285+ stderrWriteEnd,
286+ stdoutWriteEnd);
287+
288+ do
289+ {
290+ /* Wait around for the child to get a signal */
291+ pid_t waitChild = waitpid (child, &status, 0);
292+ if (waitChild == child)
293+ {
294+ /* If it died unexpectedly, say so */
295+ if (WIFSIGNALED (status))
296+ {
297+ std::stringstream ss;
298+ ss << "child killed by signal "
299+ << WTERMSIG (status);
300+ throw std::runtime_error (ss.str ());
301+ }
302+ }
303+ else
304+ {
305+ /* waitpid () failed */
306+ throw std::runtime_error (strerror (errno));
307+ }
308+
309+ /* Keep going until it exited */
310+ } while (!WIFEXITED (status) && !WIFSIGNALED (status));
311+
312+ /* Return the exit code */
313+ return WEXITSTATUS (status);
314+ }
315+
316+ const char *autopilot = "/usr/bin/autopilot";
317+ const char *runOpt = "run";
318+ const char *dashV = "-v";
319+}
320+
321+class CompizAutopilotAcceptanceTest :
322+ public ::testing::Test,
323+ public ::testing::WithParamInterface <const char *>
324+{
325+ public:
326+
327+ CompizAutopilotAcceptanceTest ();
328+ const char ** GetAutopilotArgv ();
329+ void PrintChildStderr ();
330+ void PrintChildStdout ();
331+
332+ protected:
333+
334+ std::vector <const char *> autopilotArgv;
335+ Pipe childStdoutPipe;
336+ Pipe childStderrPipe;
337+};
338+
339+CompizAutopilotAcceptanceTest::CompizAutopilotAcceptanceTest ()
340+{
341+ autopilotArgv.push_back (autopilot);
342+ autopilotArgv.push_back (runOpt);
343+ autopilotArgv.push_back (dashV);
344+ autopilotArgv.push_back (GetParam ());
345+ autopilotArgv.push_back (NULL);
346+}
347+
348+const char **
349+CompizAutopilotAcceptanceTest::GetAutopilotArgv ()
350+{
351+ return &autopilotArgv[0];
352+}
353+
354+namespace
355+{
356+ std::string FdToString (int fd)
357+ {
358+ std::string output;
359+
360+ int bufferSize = 4096;
361+ char buffer[bufferSize];
362+
363+ ssize_t count = 0;
364+
365+ do
366+ {
367+ struct pollfd pfd;
368+ pfd.events = POLLIN | POLLERR | POLLHUP;
369+ pfd.revents = 0;
370+ pfd.fd = fd;
371+
372+ /* Check for 10ms if there's anything waiting to be read */
373+ int nfds = poll (&pfd, 1, 10);
374+
375+ if (nfds == -1)
376+ throw std::runtime_error (strerror (errno));
377+
378+ if (nfds)
379+ {
380+ /* Read as much as we have allocated for */
381+ count = read (fd, (void *) buffer, bufferSize - 1);
382+
383+ /* Something failed, bail */
384+ if (count == -1)
385+ throw std::runtime_error (strerror (errno));
386+
387+ /* Always null-terminate */
388+ buffer[count] = '\0';
389+
390+ /* Add it to the output */
391+ output += buffer;
392+ }
393+ else
394+ {
395+ /* There's nothing on the pipe, assume EOF */
396+ count = 0;
397+ }
398+
399+ /* Keep going until there's nothing left */
400+ } while (count != 0);
401+
402+ return output;
403+ }
404+}
405+
406+void
407+CompizAutopilotAcceptanceTest::PrintChildStderr ()
408+{
409+ std::string output = FdToString (childStderrPipe.ReadEnd ());
410+
411+ std::cout << "[== TEST ERRORS ==]" << std::endl
412+ << output
413+ << std::endl;
414+}
415+
416+void
417+CompizAutopilotAcceptanceTest::PrintChildStdout ()
418+{
419+ std::string output = FdToString (childStdoutPipe.ReadEnd ());
420+
421+ std::cout << "[== TEST MESSAGES ==]" << std::endl
422+ << output
423+ << std::endl;
424+}
425+
426+TEST_P (CompizAutopilotAcceptanceTest, AutopilotTest)
427+{
428+ std::string scopedTraceMsg ("Running Autopilot Test");
429+ scopedTraceMsg += GetParam ();
430+
431+ int status = launchBinaryAndWaitForReturn (std::string (autopilot),
432+ GetAutopilotArgv (),
433+ childStderrPipe.WriteEnd (),
434+ childStdoutPipe.WriteEnd ());
435+
436+ EXPECT_EQ (status, 0) << "expected exit status of 0";
437+
438+ if (status)
439+ {
440+ PrintChildStdout ();
441+ PrintChildStderr ();
442+ }
443+ else
444+ {
445+ /* Extra space here to align with gtest output */
446+ std::cout << "[AUTOPILOT ] Pass test " << GetParam () << std::endl;
447+ }
448+}
449+
450+namespace
451+{
452+const char *AutopilotTests[] =
453+{
454+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_clicking_icon_twice_initiates_spread",
455+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_expo_launcher_icon_initiates_expo",
456+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_expo_launcher_icon_terminates_expo",
457+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_launcher_activate_last_focused_window",
458+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_unminimize_initially_minimized_windows",
459+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_unminimize_minimized_immediately_after_show_windows",
460+ "unity.tests.launcher.test_icon_behavior.LauncherIconsTests.test_while_in_scale_mode_the_dash_will_still_open",
461+ "unity.tests.test_dash.DashRevealWithSpreadTests.test_command_lens_opens_when_in_spread",
462+ "unity.tests.test_dash.DashRevealWithSpreadTests.test_dash_closes_on_spread",
463+ "unity.tests.test_dash.DashRevealWithSpreadTests.test_dash_opens_when_in_spread",
464+ "unity.tests.test_dash.DashRevealWithSpreadTests.test_lens_opens_when_in_spread",
465+ "unity.tests.test_hud.HudBehaviorTests.test_alt_arrow_keys_not_eaten",
466+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_panel_title_updates_moving_window",
467+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_window_buttons_close_inactive_when_clicked_in_another_monitor",
468+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_window_buttons_dont_show_for_maximized_window_on_mouse_in",
469+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_window_buttons_dont_show_in_other_monitors_when_dash_is_open",
470+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_window_buttons_dont_show_in_other_monitors_when_hud_is_open",
471+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_window_buttons_minimize_inactive_when_clicked_in_another_monitor",
472+ "unity.tests.test_panel.PanelCrossMonitorsTests.test_window_buttons_unmaximize_inactive_when_clicked_in_another_monitor",
473+ "unity.tests.test_panel.PanelGrabAreaTests.test_focus_the_maximized_window_works",
474+ "unity.tests.test_panel.PanelGrabAreaTests.test_lower_the_maximized_window_works",
475+ "unity.tests.test_panel.PanelGrabAreaTests.test_panels_dont_steal_keynav_foucs_from_hud",
476+ "unity.tests.test_panel.PanelGrabAreaTests.test_unmaximize_from_grab_area_works",
477+ "unity.tests.test_panel.PanelHoverTests.test_menus_show_for_maximized_window_on_mouse_in_btn_area",
478+ "unity.tests.test_panel.PanelHoverTests.test_menus_show_for_maximized_window_on_mouse_in_grab_area",
479+ "unity.tests.test_panel.PanelHoverTests.test_menus_show_for_maximized_window_on_mouse_in_menu_area",
480+ "unity.tests.test_panel.PanelHoverTests.test_only_menus_show_for_restored_window_on_mouse_in_grab_area",
481+ "unity.tests.test_panel.PanelHoverTests.test_only_menus_show_for_restored_window_on_mouse_in_menu_area",
482+ "unity.tests.test_panel.PanelHoverTests.test_only_menus_show_for_restored_window_on_mouse_in_window_btn_area",
483+ "unity.tests.test_panel.PanelMenuTests.test_menus_dont_show_for_maximized_window_on_mouse_out",
484+ "unity.tests.test_panel.PanelMenuTests.test_menus_dont_show_for_restored_window_on_mouse_out",
485+ "unity.tests.test_panel.PanelMenuTests.test_menus_dont_show_if_a_new_application_window_is_opened",
486+ "unity.tests.test_panel.PanelMenuTests.test_menus_show_for_maximized_window_on_mouse_in",
487+ "unity.tests.test_panel.PanelMenuTests.test_menus_show_for_restored_window_on_mouse_in",
488+ "unity.tests.test_panel.PanelMenuTests.test_menus_shows_when_new_application_is_opened",
489+ "unity.tests.test_panel.PanelTitleTests.test_panel_shows_app_title_with_maximised_app",
490+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_doesnt_change_with_switcher",
491+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_on_empty_desktop",
492+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_updates_on_maximized_window_title_changes",
493+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_updates_when_switching_to_maximized_app",
494+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_with_maximized_application",
495+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_with_maximized_window_restored_child",
496+ "unity.tests.test_panel.PanelTitleTests.test_panel_title_with_restored_application",
497+ "unity.tests.test_panel.PanelWindowButtonsTests.test_double_click_unmaximize_window",
498+ "unity.tests.test_panel.PanelWindowButtonsTests.test_minimize_button_disabled_for_non_minimizable_windows",
499+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_dont_show_for_maximized_window_on_mouse_out",
500+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_dont_show_for_restored_window",
501+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_dont_show_for_restored_window_with_mouse_in_panel",
502+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_dont_show_on_empty_desktop",
503+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_minimize_button_works_for_window",
504+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_show_for_maximized_window_on_mouse_in",
505+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_unmaximize_button_works_for_window",
506+ "unity.tests.test_panel.PanelWindowButtonsTests.test_window_buttons_unmaximize_follows_fitts_law",
507+ "unity.tests.test_showdesktop.ShowDesktopTests.test_showdesktop_hides_apps",
508+ "unity.tests.test_showdesktop.ShowDesktopTests.test_showdesktop_switcher",
509+ "unity.tests.test_showdesktop.ShowDesktopTests.test_showdesktop_unhides_apps",
510+ "unity.tests.test_showdesktop.ShowDesktopTests.test_unhide_single_app",
511+ "unity.tests.test_spread.SpreadTests.test_scale_application_windows",
512+ "unity.tests.test_spread.SpreadTests.test_scaled_window_closes_on_close_button_click",
513+ "unity.tests.test_spread.SpreadTests.test_scaled_window_closes_on_middle_click",
514+ "unity.tests.test_spread.SpreadTests.test_scaled_window_is_focused_on_click",
515+ "unity.tests.test_switcher.SwitcherDetailsModeTests.test_detail_mode_selects_last_active_window",
516+ "unity.tests.test_switcher.SwitcherDetailsModeTests.test_detail_mode_selects_third_window",
517+ "unity.tests.test_switcher.SwitcherDetailsTests.test_no_details_for_apps_on_different_workspace",
518+ "unity.tests.test_switcher.SwitcherTests.test_application_window_is_fake_decorated",
519+ "unity.tests.test_switcher.SwitcherTests.test_application_window_is_fake_decorated_in_detail_mode",
520+ "unity.tests.test_switcher.SwitcherWindowsManagementTests.test_switcher_raises_only_last_focused_window",
521+ "unity.tests.test_switcher.SwitcherWindowsManagementTests.test_switcher_rises_next_window_of_same_application",
522+ "unity.tests.test_switcher.SwitcherWindowsManagementTests.test_switcher_rises_other_application",
523+ "unity.tests.test_switcher.SwitcherWorkspaceTests.test_switcher_all_mode_shows_all_apps",
524+ "unity.tests.test_switcher.SwitcherWorkspaceTests.test_switcher_can_switch_to_minimised_window",
525+ "unity.tests.test_switcher.SwitcherWorkspaceTests.test_switcher_is_disabled_when_wall_plugin_active",
526+ "unity.tests.test_switcher.SwitcherWorkspaceTests.test_switcher_shows_current_workspace_only"
527+};
528+}
529+
530+
531+INSTANTIATE_TEST_CASE_P (UnityIntegrationAutopilotTests, CompizAutopilotAcceptanceTest,
532+ ValuesIn (AutopilotTests));

Subscribers

People subscribed via source and target branches

to all changes: