]> git.sur5r.net Git - i3/i3/blobdiff - testcases/t/175-startup-notification.t
Merge branch 'release-4.16.1'
[i3/i3] / testcases / t / 175-startup-notification.t
index 7160399d3387fddc66bfd62caa6746a2de343b0f..cd6f3950b3642148699f8b46fd7e1291ab83e9b8 100644 (file)
@@ -2,13 +2,13 @@
 # vim:ts=4:sw=4:expandtab
 #
 # Please read the following documents before working on tests:
-# • http://build.i3wm.org/docs/testsuite.html
+# • https://build.i3wm.org/docs/testsuite.html
 #   (or docs/testsuite)
 #
-# • http://build.i3wm.org/docs/lib-i3test.html
+# • https://build.i3wm.org/docs/lib-i3test.html
 #   (alternatively: perldoc ./testcases/lib/i3test.pm)
 #
-# • http://build.i3wm.org/docs/ipc.html
+# • https://build.i3wm.org/docs/ipc.html
 #   (or docs/ipc)
 #
 # • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
@@ -21,6 +21,10 @@ use i3test;
 use POSIX qw(mkfifo);
 use File::Temp qw(:POSIX);
 
+SKIP: {
+
+    skip "X11::XCB too old (need >= 0.07)", 24 if $X11::XCB::VERSION < 0.07;
+
 use ExtUtils::PkgConfig;
 
 # setup dependency on libstartup-notification using pkg-config
@@ -42,16 +46,10 @@ static SnDisplay *sndisplay;
 static SnLauncheeContext *ctx;
 static xcb_connection_t *conn;
 
-// TODO: this should use $x
-void init_ctx() {
-    int screen;
-    if ((conn = xcb_connect(NULL, &screen)) == NULL ||
-        xcb_connection_has_error(conn))
-        errx(1, "x11 conn failed");
-
-    printf("screen = %d\n", screen);
+void init_ctx(void *connptr) {
+    conn = (xcb_connection_t*)connptr;
     sndisplay = sn_xcb_display_new(conn, NULL, NULL);
-    ctx = sn_launchee_context_new_from_environment(sndisplay, screen);
+    ctx = sn_launchee_context_new_from_environment(sndisplay, 0);
 }
 
 const char *get_startup_id() {
@@ -86,7 +84,7 @@ is_num_children($first_ws, 0, 'no containers on this workspace yet');
 # echo its $DESKTOP_STARTUP_ID. We (blockingly) read the variable into
 # $startup_id in the testcase.
 my $tmp = tmpnam();
-mkfifo($tmp, 0600) or die "Could not create FIFO in $tmp";
+mkfifo($tmp, 0600) or BAIL_OUT "Could not create FIFO in $tmp: $!";
 
 cmd qq|exec echo \$DESKTOP_STARTUP_ID >$tmp|;
 
@@ -101,7 +99,7 @@ isnt($startup_id, '', 'startup_id not empty');
 $ENV{DESKTOP_STARTUP_ID} = $startup_id;
 
 # Create a new libstartup-notification launchee context
-init_ctx();
+init_ctx($x->get_xcb_conn());
 
 # Make sure the context was set up successfully
 is(get_startup_id(), $startup_id, 'libstartup-notification returns the same id');
@@ -144,14 +142,24 @@ is_num_children($first_ws, 2, 'two containers on the first workspace');
 complete_startup();
 sync_with_i3;
 
+# even when renaming the workspace, windows should end up on the correct one
+cmd "rename workspace $first_ws to temp";
+
 # Startup has completed but the 30-second deletion time hasn't elapsed,
 # so this window should still go on the leader's initial workspace.
 $win = open_window({ dont_map => 1, client_leader => $leader });
 $win->map;
 sync_with_i3;
 
+cmd "rename workspace temp to $first_ws";
+
 is_num_children($first_ws, 3, 'three containers on the first workspace');
 
+# empty 'from' workspaces should not crash the renaming of startup sequences
+cmd "workspace $first_ws";
+cmd "rename workspace to temp";
+cmd "rename workspace to $first_ws";
+
 # Switch to the first workspace and move the focused window to the
 # second workspace.
 cmd "workspace $first_ws";
@@ -184,7 +192,7 @@ is_num_children($third_ws, 2, 'two containers on the third workspace');
 # environment variable.
 ######################################################################
 
-mkfifo($tmp, 0600) or die "Could not create FIFO in $tmp";
+mkfifo($tmp, 0600) or BAIL_OUT "Could not create FIFO in $tmp: $!";
 
 cmd qq|exec --no-startup-id echo \$DESKTOP_STARTUP_ID >$tmp|;
 
@@ -200,7 +208,7 @@ is($startup_id, '', 'startup_id empty');
 # 4) same thing, but with double quotes in exec
 ######################################################################
 
-mkfifo($tmp, 0600) or die "Could not create FIFO in $tmp";
+mkfifo($tmp, 0600) or BAIL_OUT "Could not create FIFO in $tmp: $!";
 
 cmd qq|exec --no-startup-id "echo \$DESKTOP_STARTUP_ID >$tmp"|;
 
@@ -211,5 +219,6 @@ close($fh);
 unlink($tmp);
 
 is($startup_id, '', 'startup_id empty');
+}
 
 done_testing;