Merge lp:~compiz-team/compiz/compiz.fix_1170013 into lp:compiz/0.9.10
- compiz.fix_1170013
- Merge into 0.9.10
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 | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot (community) | continuous-integration | Needs Fixing | |
Compiz Maintainers | Pending | ||
Review via email:
|
This proposal has been superseded by a proposal from 2013-04-26.
Commit message
Add a small compiz_
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_
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)
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
- 3659. By Sam Spilsbury
-
Actually add the autopilot tests
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:3659
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 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.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:3660
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 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
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:3662
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
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
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:3665
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
- 3666. By Sam Spilsbury
-
Use a tab
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
PASSED: Continuous integration, rev:3666
http://
Executed test runs:
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
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
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
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. ;)
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:3667
http://
Executed test runs:
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
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
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)); |
FAILED: Continuous integration, rev:3658 jenkins. qa.ubuntu. com/job/ compiz- ci/136/ jenkins. qa.ubuntu. com/job/ compiz- gles-ci/ ./build= pbuilder, distribution= raring, flavor= amd64/174/ console jenkins. qa.ubuntu. com/job/ compiz- pbuilder/ ./build= pbuilder, distribution= raring, flavor= amd64/525/ console
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild: s-jenkins: 8080/job/ compiz- ci/136/ rebuild
http://