#331 Add the I3 test suite
Merged 10 months ago by adamwill. Opened a year ago by lruzicka.

file modified
+1 -1
@@ -63,7 +63,7 @@ 

  # If this should change in the future, we would need to enhance this routine.

  sub x11_start_program {

      my ($self, $program, $timeout, $options) = @_;

-     send_key "alt-f2";

+     send_key(get_var("DESKTOP") eq "i3" ? "alt-d" : "alt-f2");

      assert_screen "desktop_runner";

      type_string $program, 20;

      sleep 5;    # because of KDE dialog - SUSE guys are doing the same!

file modified
+30 -14
@@ -4,7 +4,6 @@ 

  

  use base 'Exporter';

  use Exporter;

- 

  use lockapi;

  use testapi qw(is_serial_terminal :DEFAULT);

  our @EXPORT = qw/run_with_error_check type_safely type_very_safely desktop_vt boot_to_login_screen console_login console_switch_layout desktop_switch_layout console_loadkeys_us do_bootloader boot_decrypt check_release menu_launch_type setup_repos repo_setup get_workarounds disable_updates_repos cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop quit_firefox advisory_get_installed_packages acnp_handle_output advisory_check_nonmatching_packages start_with_launcher quit_with_shortcut disable_firefox_studies select_rescue_mode copy_devcdrom_as_isofile get_release_number check_left_bar check_top_bar check_prerelease check_version spell_version_number _assert_and_click is_branched rec_log repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable set_update_notification_timestamp kde_doublek_workaround dm_perform_login/;
@@ -813,12 +812,23 @@ 

  sub handle_welcome_screen {

      # handle the 'welcome' screen on GNOME and KDE since F38. shared

      # in a few places

-     if (check_screen "getting_started", 45) {

+     my %args = @_;

+     my $timeout = $args{timeout} || 45;

+     if (check_screen "getting_started", $timeout) {

          if (get_var("DESKTOP") eq "kde") {

              # just closing it seems to result in it running again on

              # next boot, so let's click Skip

              click_lastmatch;

          }

+         elsif (get_var("DESKTOP") eq "i3") {

+             # Press enter to start config, then move one line down

+             # and press enter once more to confirm.

+             send_key("ret");

+             sleep(1);

+             send_key("down");

+             sleep(1);

+             send_key("ret");

+         }

          else {

              send_key "alt-f4";

              # for GNOME 40, alt-f4 doesn't work
@@ -1108,6 +1118,7 @@ 

              last;

          }

      }

+ 

      if ($activematched) {

          # make sure we got to inactive after active

          die "never reached apps_menu_button_inactive!" unless (match_has_tag "apps_menu_button_inactive");
@@ -1372,18 +1383,23 @@ 

      my $app = shift;

      # To overcome BZ2097208, let's move the mouse out of the way

      # and give the launcher some time to take the correct focus.

-     if (get_var("DESKTOP") eq "kde") {

-         diag("Moving the mouse away from the launcher.");

-         mouse_set(1, 1);

+     if (get_var("DESKTOP") eq "i3") {

+         send_key("alt-d");

+     }

+     else {

+         if (get_var("DESKTOP") eq "kde") {

+             diag("Moving the mouse away from the launcher.");

+             mouse_set(1, 1);

+         }

+         wait_screen_change { send_key 'super'; };

+         # srsly KDE y u so slo

+         wait_still_screen 3;

+         type_very_safely $app;

+         # Wait for KDE to place focus correctly.

+         wait_still_screen 2;

+         send_key 'ret';

+         wait_still_screen 3;

      }

-     wait_screen_change { send_key 'super'; };

-     # srsly KDE y u so slo

-     wait_still_screen 3;

-     type_very_safely $app;

-     # Wait for KDE to place focus correctly.

-     wait_still_screen 2;

-     send_key 'ret';

-     wait_still_screen 3;

  }

  

  sub tell_source {
@@ -1639,7 +1655,7 @@ 

      }

      elsif ($desktop eq "gnome") {

          # Start the terminal to set up backgrounds.

-         menu_launch_type "terminal";

+         menu_launch_type("terminal");

          # wait to be sure it's fully open

          wait_still_screen(stilltime => 5, similarity_level => 38);

          # When the application opens, run command in it to set the background to black

@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "width": 30,

+       "height": 18,

+       "ypos": 508,

+       "xpos": 475,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "firefox_addon_add"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "width": 30,

+       "type": "match",

+       "xpos": 483,

+       "ypos": 511,

+       "height": 18

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "firefox_addon_add"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 520,

+       "type": "match",

+       "width": 62,

+       "height": 17,

+       "ypos": 508

+     },

+     {

+       "width": 20,

+       "ypos": 73,

+       "height": 19,

+       "type": "match",

+       "xpos": 951

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "firefox_addon_success"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "ypos": 511,

+       "xpos": 528,

+       "height": 17,

+       "type": "match",

+       "width": 62

+     },

+     {

+       "width": 20,

+       "type": "match",

+       "xpos": 951,

+       "ypos": 75,

+       "height": 19

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "firefox_addon_success"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 555,

+       "ypos": 24,

+       "width": 38,

+       "height": 17,

+       "type": "match"

+     },

+     {

+       "xpos": 513,

+       "ypos": 3,

+       "width": 64,

+       "height": 13,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "apps_run_blivetgui"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 762,

+       "ypos": 4,

+       "width": 51,

+       "height": 12,

+       "type": "match"

+     },

+     {

+       "xpos": 870,

+       "ypos": 23,

+       "width": 67,

+       "height": 20,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "apps_run_mousepad"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "ypos": 3,

+       "xpos": 2,

+       "height": 13,

+       "type": "match",

+       "width": 112

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "apps_run_terminal"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 52,

+       "ypos": 3,

+       "xpos": 2,

+       "height": 14

+     },

+     {

+       "xpos": 128,

+       "ypos": 26,

+       "width": 57,

+       "height": 15,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "apps_run_terminal"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,29 @@ 

+ {

+   "area": [

+     {

+       "xpos": 493,

+       "ypos": 300,

+       "width": 143,

+       "height": 17,

+       "type": "match"

+     },

+     {

+       "width": 201,

+       "type": "match",

+       "height": 16,

+       "xpos": 514,

+       "ypos": 401

+     },

+     {

+       "xpos": 519,

+       "ypos": 434,

+       "height": 14,

+       "width": 214,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "getting_started"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,29 @@ 

+ {

+   "area": [

+     {

+       "xpos": 492,

+       "ypos": 283,

+       "width": 142,

+       "height": 13,

+       "type": "match"

+     },

+     {

+       "xpos": 514,

+       "ypos": 364,

+       "width": 201,

+       "height": 16,

+       "type": "match"

+     },

+     {

+       "xpos": 519,

+       "ypos": 391,

+       "width": 214,

+       "height": 14,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "getting_started"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,31 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 16,

+       "height": 17,

+       "ypos": 748,

+       "xpos": 2

+     },

+     {

+       "height": 14,

+       "ypos": 751,

+       "xpos": 408,

+       "type": "match",

+       "width": 15

+     },

+     {

+       "height": 14,

+       "xpos": 460,

+       "ypos": 750,

+       "width": 18,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3-bar",

+     "apps_menu_button",

+     "apps_menu_button_inactive"

+   ]

+ }

empty or binary file added
@@ -0,0 +1,31 @@ 

+ {

+   "area": [

+     {

+       "xpos": 0,

+       "type": "match",

+       "width": 16,

+       "ypos": 751,

+       "height": 17

+     },

+     {

+       "height": 14,

+       "width": 15,

+       "ypos": 752,

+       "type": "match",

+       "xpos": 434

+     },

+     {

+       "type": "match",

+       "xpos": 486,

+       "height": 14,

+       "width": 18,

+       "ypos": 751

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3-bar",

+     "apps_menu_button",

+     "apps_menu_button_inactive"

+   ]

+ }

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 343,

+       "ypos": 3,

+       "width": 62,

+       "height": 15,

+       "type": "match"

+     },

+     {

+       "xpos": 7,

+       "ypos": 716,

+       "width": 123,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "blivet_gui_application"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,29 @@ 

+ {

+   "area": [

+     {

+       "ypos": 0,

+       "xpos": 1,

+       "height": 17,

+       "type": "match",

+       "width": 44

+     },

+     {

+       "ypos": 2,

+       "xpos": 998,

+       "height": 18,

+       "type": "match",

+       "width": 25

+     },

+     {

+       "xpos": 370,

+       "ypos": 5,

+       "width": 24,

+       "height": 15,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "desktop_runner"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 0,

+       "ypos": 0,

+       "width": 44,

+       "height": 17,

+       "type": "match"

+     },

+     {

+       "xpos": 999,

+       "ypos": 0,

+       "width": 25,

+       "height": 18,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "desktop_runner"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,25 @@ 

+ {

+   "area": [

+     {

+       "height": 41,

+       "ypos": 369,

+       "xpos": 460,

+       "type": "match",

+       "width": 130

+     },

+     {

+       "xpos": 599,

+       "ypos": 425,

+       "height": 24,

+       "width": 53,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_screen",

+     "graphical_login_input",

+     "graphical_login",

+     "lightdm_login_screen"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,25 @@ 

+ {

+   "area": [

+     {

+       "ypos": 369,

+       "width": 130,

+       "height": 41,

+       "type": "match",

+       "xpos": 460

+     },

+     {

+       "type": "match",

+       "height": 24,

+       "xpos": 599,

+       "width": 53,

+       "ypos": 424

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_screen",

+     "graphical_login_input",

+     "graphical_login",

+     "lightdm_login_screen"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,25 @@ 

+ {

+   "area": [

+     {

+       "xpos": 460,

+       "ypos": 369,

+       "width": 130,

+       "height": 41,

+       "type": "match"

+     },

+     {

+       "xpos": 599,

+       "ypos": 424,

+       "width": 53,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_screen",

+     "graphical_login_input",

+     "graphical_login",

+     "lightdm_login_screen"

+   ]

+ }

empty or binary file added
@@ -0,0 +1,26 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 180,

+       "height": 17,

+       "ypos": 7,

+       "xpos": 4

+     },

+     {

+       "click_point": {

+         "ypos": 7.5,

+         "xpos": 36.5

+       },

+       "type": "match",

+       "ypos": 9,

+       "width": 73,

+       "xpos": 891,

+       "height": 15

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3-logout-bar"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,26 @@ 

+ {

+   "area": [

+     {

+       "xpos": 4,

+       "ypos": 5,

+       "width": 180,

+       "height": 17,

+       "type": "match"

+     },

+     {

+       "xpos": 891,

+       "ypos": 7,

+       "width": 73,

+       "height": 15,

+       "type": "match",

+       "click_point": {

+         "xpos": 36.5,

+         "ypos": 7.5

+       }

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3-logout-bar"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,19 @@ 

+ {

+   "area": [

+     {

+       "ypos": 623,

+       "click_point": {

+         "xpos": 28,

+         "ypos": 10.5

+       },

+       "type": "match",

+       "xpos": 738,

+       "height": 21,

+       "width": 56

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_print"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,19 @@ 

+ {

+   "area": [

+     {

+       "xpos": 763,

+       "ypos": 601,

+       "width": 56,

+       "height": 21,

+       "type": "match",

+       "click_point": {

+         "xpos": 28,

+         "ypos": 10.5

+       }

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_print"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "height": 18,

+       "type": "match",

+       "xpos": 116,

+       "ypos": 18,

+       "width": 328

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_check_sentence"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,23 @@ 

+ {

+   "area": [

+     {

+       "height": 14,

+       "type": "match",

+       "ypos": 2,

+       "width": 38,

+       "xpos": 2

+     },

+     {

+       "type": "match",

+       "ypos": 33,

+       "xpos": 163,

+       "width": 37,

+       "height": 13

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "apps_run_terminal",

+     "i3_dunst_no_notification"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "height": 19,

+       "xpos": 713,

+       "ypos": 60,

+       "width": 285,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_dunst_foo_notification"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 720,

+       "type": "match",

+       "ypos": 58,

+       "width": 74,

+       "height": 35

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_dunst_foo_notification"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "height": 19,

+       "ypos": 29,

+       "width": 285,

+       "type": "match",

+       "xpos": 702

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_dunst_foo_notification"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,29 @@ 

+ {

+   "area": [

+     {

+       "ypos": 2,

+       "xpos": 0,

+       "height": 16,

+       "type": "match",

+       "width": 679

+     },

+     {

+       "type": "match",

+       "width": 373,

+       "height": 128,

+       "ypos": 396,

+       "xpos": 328

+     },

+     {

+       "xpos": 497,

+       "ypos": 42,

+       "height": 23,

+       "width": 132,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_split"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "ypos": 0,

+       "height": 47,

+       "width": 100,

+       "xpos": 630,

+       "type": "match"

+     },

+     {

+       "xpos": 309,

+       "ypos": 2,

+       "width": 69,

+       "height": 40,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_split"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,29 @@ 

+ {

+   "area": [

+     {

+       "width": 679,

+       "height": 16,

+       "ypos": 0,

+       "type": "match",

+       "xpos": 0

+     },

+     {

+       "ypos": 535,

+       "height": 128,

+       "width": 373,

+       "type": "match",

+       "xpos": 328

+     },

+     {

+       "xpos": 728,

+       "ypos": 7,

+       "width": 132,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_split"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "height": 55,

+       "ypos": 2,

+       "xpos": 0,

+       "type": "match",

+       "width": 117

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_stacked"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "ypos": 2,

+       "width": 117,

+       "height": 55,

+       "xpos": 0,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_stacked"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 0,

+       "ypos": 0,

+       "width": 133,

+       "height": 52,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_stacked"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "height": 18,

+       "xpos": 0,

+       "ypos": 2,

+       "width": 824,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_tabbed"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "xpos": 460,

+       "height": 46,

+       "width": 112,

+       "ypos": 0

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_tabbed"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 0,

+       "ypos": 0,

+       "width": 824,

+       "height": 18,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "i3_windows_tabbed"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,19 @@ 

+ {

+   "area": [

+     {

+       "xpos": 467,

+       "type": "match",

+       "ypos": 258,

+       "width": 89,

+       "height": 26,

+       "click_point": {

+         "xpos": 44.5,

+         "ypos": 13

+       }

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_jack"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,19 @@ 

+ {

+   "area": [

+     {

+       "xpos": 467,

+       "ypos": 347,

+       "width": 66,

+       "height": 23,

+       "type": "match",

+       "click_point": {

+         "xpos": 33,

+         "ypos": 11.5

+       }

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_jim"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 360,

+       "ypos": 407,

+       "width": 293,

+       "height": 22,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_wrong_password"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,33 @@ 

+ {

+   "area": [

+     {

+       "xpos": 966,

+       "height": 19,

+       "width": 54,

+       "ypos": 4,

+       "type": "match",

+       "click_point": {

+         "ypos": 9.5,

+         "xpos": 42

+       }

+     },

+     {

+       "width": 89,

+       "type": "match",

+       "xpos": 358,

+       "ypos": 321,

+       "height": 91

+     },

+     {

+       "width": 56,

+       "type": "match",

+       "xpos": 597,

+       "ypos": 424,

+       "height": 25

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,40 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 76,

+       "height": 85,

+       "ypos": 322,

+       "xpos": 366

+     },

+     {

+       "height": 21,

+       "ypos": 426,

+       "xpos": 599,

+       "type": "match",

+       "width": 54

+     },

+     {

+       "height": 21,

+       "xpos": 861,

+       "width": 82,

+       "ypos": 85,

+       "type": "match",

+       "click_point": {

+         "xpos": 41,

+         "ypos": 10.5

+       }

+     },

+     {

+       "width": 59,

+       "type": "match",

+       "xpos": 965,

+       "ypos": 1,

+       "height": 25

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu-reboot"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 663,

+       "ypos": 428,

+       "width": 51,

+       "height": 21,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu-reboot-confirm"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,40 @@ 

+ {

+   "area": [

+     {

+       "xpos": 366,

+       "ypos": 324,

+       "width": 76,

+       "height": 85,

+       "type": "match"

+     },

+     {

+       "xpos": 599,

+       "ypos": 425,

+       "width": 54,

+       "height": 21,

+       "type": "match"

+     },

+     {

+       "xpos": 855,

+       "ypos": 77,

+       "width": 82,

+       "height": 21,

+       "type": "match",

+       "click_point": {

+         "xpos": 41,

+         "ypos": 10.5

+       }

+     },

+     {

+       "xpos": 965,

+       "ypos": 0,

+       "width": 59,

+       "height": 25,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu-reboot"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 659,

+       "ypos": 428,

+       "width": 65,

+       "height": 20,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu-shutdown-confirm"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,33 @@ 

+ {

+   "area": [

+     {

+       "xpos": 333,

+       "ypos": 311,

+       "width": 76,

+       "height": 27,

+       "type": "match"

+     },

+     {

+       "xpos": 263,

+       "ypos": 309,

+       "width": 63,

+       "height": 64,

+       "type": "match"

+     },

+     {

+       "xpos": 675,

+       "ypos": 429,

+       "width": 70,

+       "height": 17,

+       "type": "match",

+       "click_point": {

+         "xpos": 35,

+         "ypos": 8.5

+       }

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu-shutdown-confirm"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,33 @@ 

+ {

+   "area": [

+     {

+       "xpos": 966,

+       "ypos": 3,

+       "width": 54,

+       "height": 19,

+       "type": "match",

+       "click_point": {

+         "xpos": 42,

+         "ypos": 9.5

+       }

+     },

+     {

+       "xpos": 358,

+       "ypos": 323,

+       "width": 89,

+       "height": 91,

+       "type": "match"

+     },

+     {

+       "xpos": 597,

+       "ypos": 423,

+       "width": 56,

+       "height": 25,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_power_menu"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,33 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 51,

+       "ypos": 426,

+       "xpos": 600,

+       "height": 21

+     },

+     {

+       "width": 43,

+       "xpos": 624,

+       "height": 47,

+       "type": "match",

+       "click_point": {

+         "ypos": 23.5,

+         "xpos": 21.5

+       },

+       "ypos": 320

+     },

+     {

+       "height": 90,

+       "ypos": 321,

+       "xpos": 364,

+       "type": "match",

+       "width": 81

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_user_selection"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,33 @@ 

+ {

+   "area": [

+     {

+       "xpos": 600,

+       "ypos": 442,

+       "width": 51,

+       "height": 21,

+       "type": "match"

+     },

+     {

+       "xpos": 624,

+       "ypos": 303,

+       "width": 43,

+       "height": 47,

+       "type": "match",

+       "click_point": {

+         "xpos": 21.5,

+         "ypos": 23.5

+       }

+     },

+     {

+       "xpos": 364,

+       "ypos": 306,

+       "width": 81,

+       "height": 90,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "lightdm_user_selection"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 465,

+       "ypos": 273,

+       "width": 87,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_jack"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 466,

+       "ypos": 366,

+       "width": 61,

+       "height": 25,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_jim"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 404,

+       "ypos": 408,

+       "width": 128,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "login_wrong_password"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "ypos": 6,

+       "xpos": 684,

+       "height": 19,

+       "type": "match",

+       "width": 182

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "mousepad_no_document_open"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 422,

+       "ypos": 27,

+       "width": 182,

+       "height": 19,

+       "type": "match"

+     },

+     {

+       "xpos": 684,

+       "ypos": 2,

+       "width": 129,

+       "height": 12,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "mousepad_no_document_open"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "ypos": 98,

+       "xpos": 447,

+       "width": 127,

+       "type": "match",

+       "height": 38

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "navigation_three_workspaces"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "width": 321,

+       "type": "match",

+       "height": 18,

+       "xpos": 118,

+       "ypos": 21

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_check_sentence"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 270,

+       "ypos": 428,

+       "width": 161,

+       "height": 18,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_kde_location_line"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 250,

+       "ypos": 244,

+       "width": 64,

+       "height": 20,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_use_cups_printer"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "xpos": 247,

+       "ypos": 221,

+       "width": 77,

+       "height": 20,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "printing_use_saveas_pdf"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -0,0 +1,15 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "height": 21,

+       "ypos": 666,

+       "xpos": 634,

+       "width": 19

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "leave_button"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
file modified
+74 -20
@@ -213,6 +213,20 @@ 

              },

              "version": "*"

          },

+         "fedora-i3-live-x86_64*": {

+             "arch": "x86_64",

+             "distri": "fedora",

+             "flavor": "i3-live-iso",

+             "settings": {

+                 "DESKTOP": "i3",

+                 "DEPLOY_UPLOAD_TEST": "install_default_upload",

+                 "LIVE": "1",

+                 "PACKAGE_SET": "default",

+                 "TEST_TARGET": "ISO",

+                 "USER_LOGIN": "i3-user"

+             },

+             "version": "*"

+         },

          "fedora-Minimal-raw_xz-raw.xz-aarch64-*": {

              "arch": "aarch64",

              "distri": "fedora",
@@ -368,7 +382,7 @@ 

              "flavor": "Workstation-upgrade",

              "settings": {

                  "DESKTOP": "gnome",

-                 "DEPLOY_UPLOAD_TEST": "upgrade_desktop" ,

+                 "DEPLOY_UPLOAD_TEST": "upgrade_desktop",

                  "HDDSIZEGB": "20",

                  "PACKAGE_SET": "default",

                  "TEST_TARGET": "COMPOSE"
@@ -513,6 +527,14 @@ 

              "machine": "bios",

              "product": "fedora-KDE-live-iso-x86_64-*"

          },

+         "fedora-i3-live-x86_64-*-bios": {

+             "machine": "uefi",

+             "product": "fedora-i3-live-x86_64*"

+         },

+         "fedora-i3-live-x86_64-*-64bit": {

+             "machine": "64bit",

+             "product": "fedora-i3-live-x86_64*"

+         },

          "fedora-Minimal-raw_xz-raw.xz-aarch64-*-aarch64": {

              "machine": "aarch64",

              "product": "fedora-Minimal-raw_xz-raw.xz-aarch64-*"
@@ -631,7 +653,8 @@ 

                  "fedora-Workstation-live-iso-ppc64le-*-ppc64le": 40,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-live-iso-x86_64-*-64bit": 40,

-                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70

+                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

+                 "fedora-Workstation-live-iso-x86_64-*-64bit": 40

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -663,7 +686,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

-                 "fedora-Workstation-upgrade-aarch64-*-aarch64": 40

+                 "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -696,7 +720,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -724,7 +749,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -752,7 +778,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -786,7 +813,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -819,7 +847,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -852,7 +881,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -912,7 +942,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -927,7 +958,8 @@ 

                  "fedora-Workstation-live-iso-x86_64-*-64bit": 30,

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

-                 "fedora-Workstation-live-iso-ppc64le-*-ppc64le": 30

+                 "fedora-Workstation-live-iso-ppc64le-*-ppc64le": 30,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -960,7 +992,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -974,7 +1007,8 @@ 

                  "fedora-KDE-live-iso-x86_64-*-64bit": 32,

                  "fedora-Workstation-live-iso-ppc64le-*-ppc64le": 30,

                  "fedora-Workstation-live-iso-x86_64-*-64bit": 30,

-                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70

+                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "ENTRYPOINT": "desktop_notifications"
@@ -986,7 +1020,9 @@ 

                  "fedora-Workstation-live-iso-ppc64le-*-ppc64le": 30,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-live-iso-x86_64-*-64bit": 30,

-                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70

+                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

+                 "fedora-Workstation-live-iso-x86_64-*-64bit": 30,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -1021,7 +1057,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -1040,7 +1077,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 22,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -1381,7 +1419,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 70,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 32

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 32,

+                 "fedora-Workstation-live-iso-x86_64-*-64bit": 30

              },

              "settings": {

                  "BOOTFROM": "c",
@@ -1390,6 +1429,17 @@ 

                  "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%"

              }

          },

+         "i3_tiling": {

+             "profiles": {

+                 "fedora-i3-live-x86_64-*-64bit": 70

+             },

+             "settings": {

+                 "BOOTFROM": "c",

+                 "HDD_1": "disk_%FLAVOR%_%MACHINE%.qcow2",

+                 "POSTINSTALL": "i3_tiling",

+                 "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%"

+             }

+         },

          "install_anaconda_text": {

              "profiles": {

                  "fedora-Server-dvd-iso-aarch64-*-aarch64": 20,
@@ -1648,7 +1698,9 @@ 

                  "fedora-Server-boot-iso-x86_64-*-64bit": 11,

                  "fedora-Server-dvd-iso-x86_64-*-bios": 11,

                  "fedora-Silverblue-dvd_ostree-iso-x86_64-*-bios": 51,

-                 "fedora-Workstation-live-iso-x86_64-*-bios": 11

+                 "fedora-Workstation-live-iso-x86_64-*-bios": 11,

+                 "fedora-Server-boot-iso-x86_64-*-64bit": 10,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "PACKAGE_SET": "default",
@@ -1669,7 +1721,8 @@ 

                  "fedora-Silverblue-dvd_ostree-iso-x86_64-*-64bit": 50,

                  "fedora-Workstation-live-iso-ppc64le-*-ppc64le": 10,

                  "fedora-Workstation-live-iso-x86_64-*-64bit": 10,

-                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 60

+                 "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 60,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "PACKAGE_SET": "default",
@@ -2512,7 +2565,8 @@ 

                  "fedora-Workstation-live_osbuild-iso-x86_64-*-64bit": 60,

                  "fedora-Workstation-upgrade-x86_64-*-64bit": 40,

                  "fedora-Workstation-upgrade-aarch64-*-aarch64": 40,

-                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42

+                 "fedora-Workstation-raw_xz-raw.xz-aarch64-*-aarch64": 42,

+                 "fedora-i3-live-x86_64-*-64bit": 70

              },

              "settings": {

                  "BOOTFROM": "c",

file modified
+30 -21
@@ -147,28 +147,37 @@ 

                  # on lives, we have to explicitly launch anaconda

                  my $launched = 0;

                  my $count = 5;

-                 while ($count > 0) {

-                     $count -= 1;

-                     assert_screen ["live_start_anaconda_icon", "apps_menu_button_active", "next_button"], 300;

-                     if (match_has_tag "next_button") {

-                         # we're looking at gnome-initial-setup - this

-                         # is what we expect on images that use anaconda

-                         # webui, though as of 2024-08 it's disabled due

-                         # to maintenance difficulty

-                         # completing g-i-s launches the installer

-                         gnome_initial_setup(live => 1);

-                         $launched = 1;

+                 # i3 got no real desktop, so we need to launch liveinst via the launcher

+                 if (get_var('DESKTOP') eq 'i3') {

+                     if (check_screen("getting_started", timeout => 300)) {

+                         send_key("esc");

                      }

-                     if (match_has_tag "apps_menu_button_active") {

-                         # give GNOME some time to be sure it's done starting up

-                         # and ready for input

-                         wait_still_screen 5;

-                         send_key "super";

-                         wait_still_screen 5;

-                     }

-                     else {

-                         # this means we saw the launcher, which is what we want

-                         last;

+                     x11_start_program("liveinst");

+                     # We have launched Anaconda, so we set $launched to skip

+                     # starting it again later in the general part of the code.

+                     $launched = 1;

+                 }

+                 else {

+                     while ($count > 0) {

+                         $count -= 1;

+                         assert_screen ["live_start_anaconda_icon", "apps_menu_button_active", "next_button"], 300;

+                         if (match_has_tag "next_button") {

+                             # we're on F39+ Workstation and looking at gnome-initial-setup

+                             # completing g-i-s launches the installer

+                             gnome_initial_setup(live => 1);

+                             $launched = 1;

+                         }

+                         if (match_has_tag "apps_menu_button_active") {

+                             # give GNOME some time to be sure it's done starting up

+                             # and ready for input

+                             wait_still_screen 5;

+                             send_key "super";

+                             wait_still_screen 5;

+                         }

+                         else {

+                             # this means we saw the launcher, which is what we want

+                             last;

+                         }

                      }

                  }

                  # if we hit the g-i-s flow we already launched

file modified
+9 -4
@@ -32,10 +32,15 @@ 

      $self->root_console(tty => 3);

      disable_firefox_studies;

      desktop_vt;

-     send_key 'super';

-     # wait out animations

-     wait_still_screen(stilltime => 4, similarity_level => 45);

-     assert_and_click 'browser_launcher';

+     if (get_var("DESKTOP") eq "i3") {

+         x11_start_program("firefox");

+     }

+     else {

+         send_key 'super';

+         # wait out animations

+         wait_still_screen(stilltime => 4, similarity_level => 45);

+         assert_and_click 'browser_launcher';

+     }

      unless (check_screen 'browser', 45) {

          if (check_screen 'browser', 45) {

              record_soft_failure "Browser start up is very slow - probably https://bugzilla.redhat.com/show_bug.cgi?id=2312900";

file modified
+103 -41
@@ -5,10 +5,6 @@ 

  

  our $desktop = get_var("DESKTOP");

  our $syspwd = get_var("USER_PASSWORD") || "weakpassword";

- our $term = "terminal";

- if ($desktop eq "kde") {

-     $term = "konsole";

- }

  

  sub type_password {

      # Safe typing prolongs the operation terribly.
@@ -21,12 +17,12 @@ 

  sub adduser {

      # Add user to the system.

      my %args = @_;

-     $args{termstop} //= 1;

      my $name = $args{name};

      my $login = $args{login};

      my $password = $args{password};

  

      assert_script_run "useradd -c '$name' $login";

+     assert_script_run "usermod -a -G dialout $login";

      if ($password ne "askuser") {

          # If we want to create a user with a defined password.

          assert_script_run "echo '$login:$password' | chpasswd";
@@ -39,16 +35,29 @@ 

          assert_script_run "chage --lastday 0 $login";

      }

      assert_script_run "grep $login /etc/passwd";

+     # Create Config file for $login.

+     if ($desktop eq "i3") {

+         assert_script_run("mkdir -p /home/$login/.config/i3/");

+         # ensure that no alias of cp prevents an existing config from being overwritten

+         assert_script_run("/usr/bin/cp -f /etc/i3/config /home/$login/.config/i3/config");

+         assert_script_run("sed -i '/i3-config-wizard/d' /home/$login/.config/i3/config");

+         assert_script_run "chown -R $login:$login /home/$login/.config";

+         assert_script_run "restorecon -vr /home/$login/.config";

+     }

  }

  

  sub lock_screen {

-     # Click on buttons to lock the screen.

-     #my $desktop = get_var("DESKTOP");

-     assert_and_click "system_menu_button";

-     if ($desktop eq "kde") {

-         assert_and_click "leave_button";

+     if ($desktop eq "i3") {

+         x11_start_program("i3lock");

+     }

+     else {

+         # Click on buttons to lock the screen.

+         assert_and_click "system_menu_button";

+         if ($desktop eq "kde") {

+             assert_and_click "leave_button";

+         }

+         assert_and_click "lock_button";

      }

-     assert_and_click "lock_button";

      wait_still_screen 10;

  }

  
@@ -61,14 +70,18 @@ 

      my $user = $args{user};

      my $password = $args{password};

      my $method = $args{method};

-     if ($method ne "unlock" && !check_screen "login_$user") {

+     if (($method ne 'unlock' && !check_screen "login_$user") || $desktop eq "i3") {

          # Sometimes, especially in SDDM, we do not get the user list

-         # but rather a "screensaver" screen for the DM. If this is the

-         # case, hit Escape to bring back the user list.

-         send_key "esc";

+         # but rather a "screensaver" screen for the DM.

+         # We send the Esc key to come back to the login screen.

+         send_key('esc');

          wait_still_screen(stilltime => 5, similarity_level => 45);

      }

      if ($method ne "unlock") {

+         # on lightdm we have to open the drop down menu to get to the user selection

+         if ($desktop eq "i3") {

+             assert_and_click('lightdm_user_selection');

+         }

          # When we do not just want to unlock the screen, we need to select a user.

          if (check_screen "login_$user", 30) {

              click_lastmatch;
@@ -84,7 +97,15 @@ 

          # of password typing.

          type_very_safely "$password\n";

      }

-     type_very_safely "$password\n";

+     if (get_var('DESKTOP') eq 'i3') {

+         # use essentially type_very_safely, but without wait_screen_change being

+         # set, because the i3lock screen does not change enough when typing a

+         # character and that just causes huge delays to unlock the screen

+         type_string("$password\n", max_interval => 1);

+     }

+     else {

+         type_very_safely "$password\n";

+     }

      check_desktop(timeout => 60) if ($args{checklogin});

      wait_still_screen(stilltime => 5, similarity_level => 45);

      if ($desktop eq "kde") {
@@ -101,10 +122,17 @@ 

      # Reading the login name from the terminal prompt seems to be

      # the most reliable thing to do.

      if ($desktop eq "gnome") {

-         menu_launch_type $term;

+         menu_launch_type("terminal");

          wait_still_screen 2;

          $exitkey = "alt-f4";

      }

+     elsif ($desktop eq "i3") {

+         send_key("alt-ret");

+         assert_screen("apps_run_terminal");

+         assert_script_run('[ $(whoami) = "' . "$user\" ]");

+         wait_screen_change { send_key("alt-shift-q"); };

+         return;

+     }

      # With KDE, the user is shown in the main menu, so let us just

      # open this and see.

      else {
@@ -117,13 +145,19 @@ 

  }

  

  sub logout_user {

-     # Do steps to log out the user to reach the login screen.

-     assert_and_click "system_menu_button";

-     assert_and_click "leave_button";

-     assert_and_click "log_out_entry";

-     assert_and_click "log_out_confirm";

-     wait_still_screen 5;

-     sleep 10;

+     if ($desktop eq "i3") {

+         send_key("alt-shift-e");

+         assert_and_click("i3-logout-bar");

+         assert_screen("graphical_login_input");

+     } else {

+         # Do steps to log out the user to reach the login screen.

+         assert_and_click "system_menu_button";

+         assert_and_click "leave_button";

+         assert_and_click "log_out_entry";

+         assert_and_click "log_out_confirm";

+         wait_still_screen 5;

+         sleep 10;

+     }

  }

  

  sub switch_user {
@@ -147,27 +181,50 @@ 

  }

  

  sub reboot_system {

-     # Reboots the system and handles everything until the next login screen.

-     assert_and_click "system_menu_button";

-     # In KDE the reboot entry is right here, on GNOME we need to

-     # enter some kind of power option submenu.

-     assert_screen ["power_entry", "reboot_entry"];

-     click_lastmatch;

-     assert_and_click "reboot_entry" if (match_has_tag("power_entry"));

-     assert_and_click "restart_confirm";

+     if ($desktop eq 'i3') {

+         # we are still in i3 if the bar is visible

+         if (check_screen('i3-bar')) {

+             logout_user();

+         }

+         assert_and_click('lightdm_power_menu');

+         assert_and_click('lightdm_power_menu-reboot');

+         assert_and_click('lightdm_power_menu-reboot-confirm');

+     }

+ 

+     # Reboots the system and handles everything until the next GDM screen.

+     else {

+         # In a logged in desktop, we access power options through system menu

+         assert_and_click "system_menu_button";

+         # In KDE reboot entry is right here, on GNOME we need to

+         # enter some kind of power option submenu

+         assert_screen ["power_entry", "reboot_entry"];

+         click_lastmatch;

+         assert_and_click "reboot_entry" if (match_has_tag("power_entry"));

+         assert_and_click "restart_confirm";

+     }

      boot_to_login_screen();

  }

  

  sub power_off {

      # Powers-off the machine.

-     assert_and_click "system_menu_button";

-     # in KDE, there's no submenu to access, the button is right here,

-     # in GNOME we need the submenu

-     assert_screen ["power_entry", "power_off_entry"];

-     click_lastmatch;

-     assert_and_click "power_off_entry" if (match_has_tag("power_entry"));

-     assert_and_click "power_off_confirm";

-     assert_shutdown 120;

+     if (get_var('DESKTOP') eq 'i3') {

+         # we are still in i3 if the bar is visible

+         if (check_screen('i3-bar')) {

+             logout_user();

+         }

+         assert_screen('lightdm_login_screen');

+         send_key('alt-f4');

+         assert_and_click('lightdm_power_menu-shutdown-confirm');

+     }

+     else {

+         assert_and_click "system_menu_button";

+         # in KDE since F34, there's no submenu to access, the button is right here

+         assert_screen ["power_entry", "power_off_entry"];

+         click_lastmatch;

+         assert_and_click "power_off_entry" if (match_has_tag("power_entry"));

+         assert_and_click "power_off_confirm";

+     }

+     assert_shutdown;

  }

  

  sub run {
@@ -238,7 +295,12 @@ 

  

      # Try to log in with either account, intentionally entering the wrong password.

      login_user(user => "jack", password => "wrongpassword", checklogin => 0);

-     # get back to the login screen if necessary (dismiss an error message)

+     my $relnum = get_release_number;

+     if ($desktop eq 'i3') {

+         # In LightDM (used by i3), a message is shown about an

+         # unsuccessful login and it can be asserted, so let's do it.

+         assert_screen "login_wrong_password";

+     }

      send_key 'esc' unless (check_screen "login_jim");

  

      # Now, log into the system again using the correct password. This will

@@ -10,6 +10,18 @@ 

  # tricky and involves likely-fragile needles to try and figure out

  # what notifications we have).

  

+ sub create_user_i3_config {

+     my %args = @_;

+     my $login = $args{login};

+ 

+     assert_script_run("mkdir -p /home/$login/.config/i3/");

+     # ensure that no alias of cp prevents an existing config from being overwritten

+     assert_script_run("/usr/bin/cp -f /etc/i3/config /home/$login/.config/i3/config");

+     assert_script_run("sed -i '/i3-config-wizard/d' /home/$login/.config/i3/config");

+     assert_script_run "chown -R $login:$login /home/$login/.config";

+     assert_script_run "restorecon -vr /home/$login/.config";

+ }

+ 

  sub run {

      my $self = shift;

      my $desktop = get_var("DESKTOP");
@@ -27,6 +39,7 @@ 

      $self->root_console(tty => 1);

      # ensure we actually have some package updates available

      prepare_test_packages;

+     my $user = get_var('USER_LOGIN', 'test');

      if ($desktop eq 'gnome') {

          # On GNOME, move the clock forward if needed, because it won't

          # check for updates before 6am(!)
@@ -47,7 +60,7 @@ 

              my $longago = $now - 14 * 24 * 60 * 60;

              # have to log in as the user to do this

              script_run 'exit', 0;

-             console_login(user => get_var('USER_LOGIN', 'test'), password => get_var('USER_PASSWORD', 'weakpassword'));

+             console_login(user => $user, password => get_var('USER_PASSWORD', 'weakpassword'));

              script_run "gsettings set org.gnome.software check-timestamp ${yyday}", 0;

              script_run "gsettings set org.gnome.software update-notification-timestamp ${longago}", 0;

              script_run "gsettings set org.gnome.software online-updates-timestamp ${longago}", 0;
@@ -58,6 +71,14 @@ 

              console_login(user => 'root', password => get_var('ROOT_PASSWORD', 'weakpassword'));

          }

      }

+     elsif ($desktop eq 'i3') {

+         assert_script_run('dnf install -y libnotify');

+         unless (get_var("BOOTFROM")) {

+             $user = "liveuser";

+         }

+         assert_script_run("usermod -a -G dialout $user");

+         create_user_i3_config(login => $user);

+     }

      if ($desktop eq 'kde' && get_var("BOOTFROM")) {

          # need to login as user for this

          script_run 'exit', 0;
@@ -121,6 +142,22 @@ 

              click_lastmatch;

          }

      }

+     if ($desktop eq 'i3') {

+         # we launch a terminal so that the top of the screen is filled with

+         # something that we know and can check that it is not covered by a

+         # notification popup from dunst

+         send_key('alt-ret');

+         assert_screen("apps_run_terminal");

+         assert_script_run('notify-send -t 10000 "foo"');

+         assert_screen("i3_dunst_foo_notification", timeout => 5);

+ 

+         sleep 11;

+         if (check_screen("i3_dunst_foo_notification")) {

+             # The notifications should not be shown any more.

+             record_soft_fail("i3 shows notifications longer than expected");

+         }

+         return;

+     }

      if (get_var("BOOTFROM")) {

          # we should see an update notification and no others

          assert_screen "desktop_update_notification_only";

file modified
+40 -14
@@ -6,21 +6,29 @@ 

  sub run {

      my $self = shift;

      my $usecups = get_var("USE_CUPS");

+     my $desktop = get_var("DESKTOP");

+     my $user = get_var("USER_LOGIN", "test");

+     my $password = get_var("USER_PASSWORD", "weakpassword");

      # Prepare the environment for the test.

      #

      # Some actions need a root account, so become root.

      $self->root_console(tty => 3);

  

      # Create a text file, put content to it to prepare it for later printing.

-     script_run "cd /home/test/";

+     script_run "cd /home/$user/";

      assert_script_run "echo 'A quick brown fox jumps over a lazy dog.' > testfile.txt";

      # Make the file readable and for everybody.

      script_run "chmod 666 testfile.txt";

+     if ($desktop eq "i3") {

+         assert_script_run("dnf -y install mupdf", timeout => 120);

+     }

  

      # If the test should be running with CUPS-PDF, we need to install it first.

      if ($usecups) {

+         my $pkgs = "cups-pdf";

          # Install the Cups-PDF package to use the Cups-PDF printer

-         assert_script_run "dnf -y install cups-pdf", 180;

+         assert_script_run "dnf -y install $pkgs", 120;

+         assert_script_run "systemctl restart cups", 30;

      }

  

      # Here, we were doing a version logic. This is no longer needed, because
@@ -28,7 +36,7 @@ 

      # We will list the directory where the printed file is put and we will

      # take the file name that will be returned. To make it work, the directory

      # must be empty, which it normally is, but to make sure let's delete everything.

-     script_run("rm /home/test/Desktop/*");

+     script_run("rm /home/$user/Desktop/*");

      # Verification commands need serial console to be writable and readable for

      # normal users, let's make it writable then.

      script_run("chmod 666 /dev/${serialdev}");
@@ -48,6 +56,11 @@ 

          $maximize = "super-pgup";

          $term = "konsole";

      }

+     elsif ($desktop eq "i3") {

+         $editor = "mousepad";

+         $viewer = "mupdf";

+         $maximize = undef;

+     }

  

      # give the desktop a few seconds to settle, we seem to be getting

      # a lot of mis-types in KDE if we do not, as of 2024-02
@@ -58,18 +71,28 @@ 

      }

      # Let's open the terminal. We will use it to start the applications

      # as well as to check for the name of the printed file.

-     menu_launch_type($term);

-     wait_still_screen(5);

+     if ($desktop eq "i3") {

+         send_key('alt-ret');

+         assert_screen("apps_run_terminal");

+         # switch to tabbed mode

+         send_key("alt-w");

+     }

+     else {

+         menu_launch_type($term);

+         wait_still_screen(5);

+     }

  

      # Open the text editor and maximize it.

-     wait_screen_change { type_very_safely "$editor /home/test/testfile.txt &\n"; };

-     wait_still_screen(stilltime => 2, similarity_level => 45);

-     wait_screen_change { send_key($maximize); };

+     wait_screen_change { type_very_safely "$editor /home/$user/testfile.txt &\n"; };

      wait_still_screen(stilltime => 2, similarity_level => 45);

+     if (defined($maximize)) {

+         wait_screen_change { send_key($maximize); };

+         wait_still_screen(stilltime => 2, similarity_level => 45);

+     }

  

      # Print the file using one of the available methods

      send_key "ctrl-p";

-     wait_still_screen(stilltime => 3, similarity_level => 45);

+     wait_still_screen(stilltime => 5, similarity_level => 45);

      # We will select the printing method

      # In case of KDE, we will need to select the printer first.

      if ($desktop eq "kde") {
@@ -84,7 +107,7 @@ 

          if ($desktop eq "kde") {

              assert_and_click "printing_kde_location_line";

              send_key("ctrl-a");

-             type_safely("/home/test/Documents/output.pdf");

+             type_safely("/home/$user/Documents/output.pdf");

          }

      }

      assert_and_click "printing_print";
@@ -95,7 +118,11 @@ 

      }

      else {

          # Exit the application

-         send_key "alt-f4";

+         my $killing_weapon = "alt-f4";

+         if ($desktop eq "i3") {

+             $killing_weapon = "alt-shift-q";

+         }

+         send_key($killing_weapon);

      }

  

      # Get the name of the printed file. The path location depends
@@ -103,7 +130,7 @@ 

      # no argument to script_output to make it type slowly, and

      # it often fails typing fast in a desktop terminal

      $self->root_console(tty => 3);

-     my $directory = $usecups ? "/home/test/Desktop" : "/home/test/Documents";

+     my $directory = $usecups ? "/home/$user/Desktop" : "/home/$user/Documents";

      my $filename = script_output("ls $directory");

      my $filepath = "$directory/$filename";

  
@@ -121,9 +148,8 @@ 

      wait_still_screen(stilltime => 3, similarity_level => 45);

      # Resize the window, so that the size of the document fits the bigger space

      # and gets more readable.

-     send_key $maximize;

+     send_key $maximize if (defined($maximize));

      wait_still_screen(stilltime => 2, similarity_level => 45);

-     # in KDE, make sure we're at the start of the document

      send_key "ctrl-home" if ($desktop eq "kde");

      # Check the printed pdf.

      assert_screen "printing_check_sentence";

file modified
+8 -2
@@ -6,10 +6,16 @@ 

  sub run {

      my $self = shift;

      my $relnum = get_release_number;

+     my $desktop = get_var("DESKTOP", "gnome");

      check_desktop;

      # try and avoid double-typing issues

-     kde_doublek_workaround(key => 't') if (get_var("DESKTOP") eq "kde");

-     menu_launch_type('terminal');

+     kde_doublek_workaround(key => 't') if ($desktop eq "kde");

+     if ($desktop eq "i3") {

+         send_key("alt-ret");

+     }

+     else {

+         menu_launch_type('terminal');

+     }

      assert_screen "apps_run_terminal";

      wait_still_screen(stilltime => 5, similarity_level => 42);

      # need to be root

file added
+47
@@ -0,0 +1,47 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ 

+ sub run {

+     my $password = get_var('USER_PASSWORD', 'weakpassword');

+ 

+     # launch a terminal first

+     send_key("alt-ret");

+     assert_screen("apps_run_terminal");

+ 

+     # start blivet_gui, mousepad and check that they are split on the screen

+     x11_start_program("blivet-gui");

+     wait_still_screen(2);

+     type_very_safely("$password\n");

+     assert_screen('apps_run_blivetgui');

+     x11_start_program("mousepad");

+     assert_screen('apps_run_mousepad');

+     assert_screen("i3_windows_split");

+ 

+     # switch to tabbed layout

+     send_key("alt-w");

+     assert_screen("i3_windows_tabbed");

+     send_key_until_needlematch("apps_run_terminal", "alt-j");

+     wait_still_screen(2);

+ 

+     send_key("alt-;");

+     assert_screen("blivet_gui_application");

+ 

+     send_key("alt-;");

+     assert_screen("mousepad_no_document_open");

+ 

+     # switch to stacked layout

+     send_key("alt-s");

+     assert_screen("i3_windows_stacked");

+ 

+     send_key_until_needlematch("apps_run_terminal", "alt-k");

+ 

+     send_key("alt-l");

+     assert_screen("mousepad_no_document_open");

+ 

+     send_key("alt-l");

+     assert_screen("blivet_gui_application");

+ }

+ 

+ 1;

This test suite is a rebase of the original I3 test suite made by @defolos that slowly got out of sync and could not be merged without a significant rebase. This is it.

The suite has been running on Staging for several days and it looked all right with a couple of small things that I have already corrected. I also updated the Staging with the latest features of this and we can see how it goes.

rebased onto 208fe91

a year ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
a year ago

rebased onto b5ad24c

a year ago

I deployed this on stg and made sure the tests actually ran, and there are failures in the tiling test and the notifications tests: https://openqa.stg.fedoraproject.org/tests/overview?build=Fedora-Rawhide-20240716.n.0&distri=fedora&groupid=1&version=Rawhide

rebased onto 30cceaf

a year ago

rebased onto 187e348

a year ago

1 new commit added

  • Try assert starting applications
a year ago

I deployed this on stg and made sure the tests actually ran, and there are failures in the tiling test and the notifications tests: https://openqa.stg.fedoraproject.org/tests/overview?build=Fedora-Rawhide-20240716.n.0&distri=fedora&groupid=1&version=Rawhide

The tests ran fine on my pet deployment, but yeah, I am going to revise the needles and the actual workflow (which I did not attempt to change) and make sure it passes on STG.

Pavucontrol has an issue at the moment, I have reported the bug. I will try to replace Pavucontrol with some other application.

https://github.com/i3/i3/issues/6164

1 new commit added

  • Replace a non-working application for another.
a year ago

1 new commit added

  • Add user password.
a year ago

1 new commit added

  • Add needles that have failed on Staging.
a year ago

1 new commit added

  • Delete unused needles.
a year ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
a year ago

rebased onto 107d7ce

a year ago

rebased onto c8822ac

a year ago

The whole "# Check whether the cups-pdf printer is actually present on the system" block in desktop_printing.pm should be behind a if ($usecups) conditional. Because it isn't, we install cups-pdf even on desktop_printing_builtin , which makes it work effectively identical to desktop_printing, which isn't meant to be the case.

This is why you had to create printing_use_saveas_pdf-kde-20240710 , which should not be needed.

1 new commit added

  • Move the check into the conditional.
a year ago

1 new commit added

  • Do not use the cups package twice.
a year ago

1 new commit added

  • Move version check
a year ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
a year ago

rebased onto 56fc429

a year ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
a year ago

Why do we have the whole mechanism to set I3_MODIFIER as a variable when it's never used? Why don't we just hardcode it as alt?

Similarly, firstlaunch_setup's modifier arg is very weird. We never use the value of it as a modifier key, it's just treated as a boolean which sends the function down one of two different paths which neither use a modifier key. And it's never actually called with the modifier arg anyway, so we can just get rid of it and only keep the "alt" path.

Ditto the remove_config_wizard arg to create_user_i3_config, nothing ever sets it, so we can just get rid of it and keep the default code path (always do the removal).

For handle_welcome_screen we are currently wasting 45 seconds, if we know i3 doesn't have a welcome screen. Instead of skipping the record_soft_failure when the desktop is i3, we should just exit the subroutine immediately at the start if the desktop is i3 (or if the desktop is not GNOME or KDE, whichever way you prefer to word it).

I feel like the no_firstlaunch_check arg to check_desktop is awkward and it would be a bit nicer if you make it firstlaunch_check and default it to 1, then the condition can be if ($args{firstlaunch_check}) . As it is we have a double negative, which feels awkward.

Why the defined? Is it necessary? Wouldn't just if (check_screen('i3_firstlaunch_wizard')); work? We use that form in dozens of other places.

Also in check_desktop, I don't like the introduction of a separate path for i3. It should be possible to reuse the existing logic by just giving the i3-bar needle the apps_menu_button and apps_menu_button_inactive tags. Strictly speaking the _inactive tag isn't needed, but it's a good idea to add it just in case we change the logic again.

The firstlaunch check can just be tacked on at the end of the sub, only for i3. (Although, really, we might want to do the same for GNOME and KDE, I guess...we can look at that as a follow-up, maybe).

I don't love if (get_var("DESKTOP") ne "i3") in menu_launch_type, positive conditionals are always nicer if possible. Why not just an if (get_var("DESKTOP") eq "i3") block first, then the block for GNOME and KDE second?

All the i3 tests should have a lower priority (higher number) in the templates, as i3 is not release blocking. I'd give them all priority 70. There was one straight-up error in the templates (added a second Workstation line instead of an i3 line) but I'll fix that.

I would prefer the Product be called fedora-i3-live-iso-x86_64-* to match all the other products. The test i3_tilling should be called i3_tiling (one l, not two).

Looking at firstlaunch_setup again...it feels like it's just the i3 version of handle_welcome_screen. Why don't we roll the logic into that instead of having a separate sub? It's only used in three places.

  1. I think the use in desktop_background.pm is actually useless - I don't think we ever hit that block. Maybe we did back when the i3 PR was first written, but I'm pretty sure we don't any more. BOOTFROM is always set when desktop_background runs, you can check this for yourself in the templates. So I think we can drop that block, including the firstlaunch_setupcall, entirely. (This also means we can drop the no_firstlaunch_check thing from check_desktop entirely, in fact).

  2. The use in _boot_to_anaconda could just be a call to handle_welcome_screen instead of firstlaunch_setup.

  3. In _graphical_wait_login, there's a call to handle_welcome_screen just before the call to firstlaunch_setup for i3. So if handle_welcome_screen handled the first launch screen for i3, that call could simply be removed.

In fact, I think all we have to do to make handle_welcome_screen work for i3 is give the i3_firstlaunch_wizard needle the tag getting_started (in fact it should be called getting_started-i3 or whatever). Then it works without changes, I'm pretty sure.

The GNOME stuff added back to desktop_login.pm - starting with # Disable Gnome initial setup on accounts when testing - should not be added back, it's obsolete. The only thing we need added there is the create_user_i3_config call for i3, nothing else should be added.

The comment "# We do want to skip this with lightdm though, as we would then deselect the password entry field" is confusing. It reads like there should be an earlier comment about not skipping something, but there isn't. That text should be revised together with the existing comment above it so it makes sense and explains why we're hitting Esc for i3 there.

Also in desktop_login.pm, the conditional if (check_screen('lightdm_login_screen')) feels like it could be if ($desktop eq "i3")? Avoids having to do a needle match.

And this block:

 if (check_screen('getting_started', 45)) {
     click_lastmatch() if $desktop eq 'kde';
     send_key("alt-f4") if $desktop eq 'gnome';
 }

looks like stray old code that's got back in again, it looks like a primitive version of handle_welcome_screen. I don't think it should be added back in this PR.

And there's another awkward negative condition check, if (get_var('DESKTOP') ne 'i3'). Again I think it's better to make that a positive if (get_var('DESKTOP') eq 'i3') and rearrange.

The change from menu_launch_type $term; to menu_launch_type "terminal; in check_user_logged_in looks bogus, again probably older code sneaking back in. Please drop that change.

In reboot_system, I don't understand why reboot_system_i3 was made a separate sub that reboot_system calls, it's only ever called there. I think the i3 logic can just be inline.

The PR seems to revert the block for KDE and GNOME to an earlier code state that mentions F34. Please drop this change and make the KDE/GNOME block exactly the same as the current block one. Similarly in power_off, this PR changes the non-i3 block unnecessarily, please undo that. And the block that does assert_screen "login_wrong_password"; later similarly is reverting to an earlier state for GNOME; we dropped that check for GNOME once F34 went EOL, so this PR should just reintroduce it specifically for i3, it shouldn't reanimate it for GNOME. It also I think wrongly drops the comment # get back to the login screen if necessary (dismiss an error message).

In desktop_notifications, the PR sets $user as a variable...then only uses it once, in a line that isn't really to do with the i3 change. Either get rid of the setting of $user, or use it again in the i3 block, so we do my $target_user = $user; instead of my $target_user = get_var("USER_LOGIN");. In the condition if (!defined(get_var("BOOTFROM"))), again, why the use of defined? I don't think it's necessary. I think we can set $targetuser with just a single line, in fact: my $targetuser = get_var("BOOTFROM") ? $user : "liveuser";

The syntax of the i3-specific check added there is pretty weird. Why an unless / else block? Why not just a simple if / else? Also, isn't that check...broken? It seems to be doing the opposite of what it means to do. Unless I'm misreading it, you can rewrite the current logic as: "if we match the needle 'i3_dunst_no_notification', die with a message 'i3 shows notifications where it should not!'". That doesn't make any sense? Why would we die claiming i3 showed notifications if we match a needle called no_notification? I think the test is only passing because the only needle with the tag 'i3_dunst_no_notification' is the needle i3-urxvt-run.json, which is an old one from the original version of this PR that is never matched, if you check the needle admin interface on openqa.stg, you can see that needle has never been matched. I think we need to get rid of that needle and completely revise this check to actually do what it's supposed to do.

I'm not clear why, on i3, we have this variant logic that manually triggers a notification, instead of expecting the desktop update notification to show up, as we do for KDE and GNOME. I would be happier if the i3 test just followed the same logic as KDE and GNOME. Do we know if there's a reason it can't? Does the update notification not show up for i3?

Like in other places, desktop_printing.pm is returning zombie old code for non-i3 paths. Please remove all that stuff and just leave in the i3-specific addition (the install of mupdf). It also has another weirdly-phrased conditional, unless ($desktop eq "i3") - just make this if ($desktop eq "i3") and re-order.

I kinda like the idea of using whether $maximize is defined to decide whether to do maximize actions, but it's only used in one place, the other place uses a unless ($desktop eq "i3") check. Why not make this consistent and positive, and in both places, do the maximize actions if (defined($maximize))?

This file is also the only place we call launch_terminal, from i3.pm. It's a tiny sub. Why not just in-line it here and get rid of it from i3.pm?

I'm not sure why we change from hardcoded "test" to a $user variable in this test as part of this PR, but eh, I guess it doesn't hurt anything.

The change to the comment "# in KDE, make sure we're at the start of the document" seems invalid, since the code still is KDE-specific. Please make this PR leave that comment alone.

In the tiling test, the die "This test is only for the i3 desktop" unless $desktop eq "i3"; check seems kinda unnecessary, and is the only use of the $desktop var, so I'd say just get rid of the check and the variable set.

The comment "# start pavucontrol, mousepad and check that they are split on the screen" seems wrong, we aren't launching pavucontrol, but blivet-gui.

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
a year ago

rebased onto a2ca3fc

11 months ago

1 new commit added

  • Get rid of I3_MODIFIER variable
11 months ago

2 new commits added

  • Remove the remove_config_wizard variable and always remove config.
  • Modify firstlaunch_setup to only use alt mod key.
11 months ago

1 new commit added

  • Do not wait 45 seconds, but exit immediately on i3 desktop.
11 months ago

1 new commit added

  • Change no_firstlaunch_check to firstlaunch_check.
11 months ago

2 new commits added

  • Rewrite i3 condition to a positive way
  • Remove the i3 path and add tags to i3 needles.
11 months ago

1 new commit added

  • Set lower priority to i3 tests.
11 months ago

1 new commit added

  • Remove obsolete Gnome content.
11 months ago

1 new commit added

  • Edit comment in order not to be confusing.
11 months ago

1 new commit added

  • Remove obsolete block and reword conditions.
11 months ago

The change from menu_launch_type $term; to menu_launch_type "terminal; in check_user_logged_in looks bogus, again probably older code sneaking back in. Please drop that change.

The check_user_logged_in in desktop_login has different paths for gnome, kde, and i3, so running "terminal" in the gnome path seems valid with me. The $term variable is not set anywhere. Or do you mean some other place?

1 new commit added

  • Rewrite the reboot_system to have i3 path.
11 months ago

1 new commit added

  • Reuse the variable correctly.
11 months ago

The syntax of the i3-specific check added there is pretty weird. Why an unless / else block? Why not just a simple if / else? Also, isn't that check...broken? It seems to be doing the opposite of what it means to do. Unless I'm misreading it, you can rewrite the current logic as: "if we match the needle 'i3_dunst_no_notification', die with a message 'i3 shows notifications where it should not!'". That doesn't make any sense? Why would we die claiming i3 showed notifications if we match a needle called no_notification? I think the test is only passing because the only needle with the tag 'i3_dunst_no_notification' is the needle i3-urxvt-run.json, which is an old one from the original version of this PR that is never matched, if you check the needle admin interface on openqa.stg, you can see that needle has never been matched. I think we need to get rid of that needle and completely revise this check to actually do what it's supposed to do.

I will need to investigate this more and spin another i3 installation. I have not invented this.

I'm not clear why, on i3, we have this variant logic that manually triggers a notification, instead of expecting the desktop update notification to show up, as we do for KDE and GNOME. I would be happier if the i3 test just followed the same logic as KDE and GNOME. Do we know if there's a reason it can't? Does the update notification not show up for i3?

I will see.

1 new commit added

  • Add brackets.
11 months ago

16 new commits added

  • Add brackets.
  • Reuse the variable correctly.
  • Rewrite the reboot_system to have i3 path.
  • Remove obsolete block and reword conditions.
  • Edit comment in order not to be confusing.
  • Remove obsolete Gnome content.
  • Set lower priority to i3 tests.
  • Rewrite i3 condition to a positive way
  • Remove the i3 path and add tags to i3 needles.
  • Change no_firstlaunch_check to firstlaunch_check.
  • Do not wait 45 seconds, but exit immediately on i3 desktop.
  • Remove the remove_config_wizard variable and always remove config.
  • Modify firstlaunch_setup to only use alt mod key.
  • Get rid of I3_MODIFIER variable
  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
11 months ago

1 new commit added

  • Delete zombie content from desktop_printing and rearrange conditions.
11 months ago

1 new commit added

  • Edit the i3 tiling test.
11 months ago

Looking at firstlaunch_setup again...it feels like it's just the i3 version of handle_welcome_screen. Why don't we roll the logic into that instead of having a separate sub? It's only used in three places.

  1. I think the use in desktop_background.pm is actually useless - I don't think we ever hit that block. Maybe we did back when the i3 PR was first written, but I'm pretty sure we don't any more. BOOTFROM is always set when desktop_background runs, you can check this for yourself in the templates. So I think we can drop that block, including the firstlaunch_setupcall, entirely. (This also means we can drop the no_firstlaunch_check thing from check_desktop entirely, in fact).

  2. The use in _boot_to_anaconda could just be a call to handle_welcome_screen instead of firstlaunch_setup.

  3. In _graphical_wait_login, there's a call to handle_welcome_screen just before the call to firstlaunch_setup for i3. So if handle_welcome_screen handled the first launch screen for i3, that call could simply be removed.

In fact, I think all we have to do to make handle_welcome_screen work for i3 is give the i3_firstlaunch_wizard needle the tag getting_started (in fact it should be called getting_started-i3 or whatever). Then it works without changes, I'm pretty sure.

This still needs to be adressed.

The change from menu_launch_type $term; to menu_launch_type "terminal; in check_user_logged_in looks bogus, again probably older code sneaking back in. Please drop that change.

The check_user_logged_in in desktop_login has different paths for gnome, kde, and i3, so running "terminal" in the gnome path seems valid with me. The $term variable is not set anywhere. Or do you mean some other place?

I'm talking about the one in desktop_login, yeah. $term is set right at the top of the file, here:

our $term = "terminal";
if ($desktop eq "kde") {
    $term = "konsole";
}

1 new commit added

  • Get rid of settings.
11 months ago

Merge Failed.

This change or one of its cross-repo dependencies was unable to be automatically merged with the current state of its repository. Please rebase the change and upload a new patchset.
Warning:
Error merging pagure.io/fedora-qa/os-autoinst-distri-fedora for 331,4ef8bd5955c3196e9f465679595f193ddfcf5dbe

rebased onto 00665f2

11 months ago

1 new commit added

  • Fix the notifications stuff.
11 months ago

The syntax of the i3-specific check added there is pretty weird. Why an unless / else block? Why not just a simple if / else? Also, isn't that check...broken? It seems to be doing the opposite of what it means to do. Unless I'm misreading it, you can rewrite the current logic as: "if

I changed the logic of this so it makes sense for me.

I'm not clear why, on i3, we have this variant logic that manually triggers a notification, instead of expecting the desktop update notification to show up, as we do for KDE and GNOME. I would be happier if the i3 test just followed the same logic as KDE and GNOME. Do we know if there's a reason it can't? Does the update notification not show up for i3?

I waited for 30 minutes and did not get any update notification on i3. libnotify is installed. Packagekit is installed and running. The system should be aware about updates as they are updates which I checked for with dnf.

From that perspective, I tend to believe that manually doing it is the easiest option.

1 new commit added

  • Move firstlaunch_setup to handle_welcome_screen
11 months ago

1 new commit added

  • Get rid of non-existent subroutine.
11 months ago

1 new commit added

  • Use ALT instead of function.
11 months ago

1 new commit added

  • Use ALT instead of function and clear lib file.
11 months ago

1 new commit added

  • Fix missing alt
11 months ago

1 new commit added

  • These variables will kill me.
11 months ago

1 new commit added

  • Run terminal correctly on I3
11 months ago

1 new commit added

  • Restart cups
11 months ago

rebased onto 9130518

11 months ago
  • Looks like you got rid of all uses of firstlaunch_setup now, but it's still present and exported - let's get rid of it completely
  • re handle_welcome_screen - why the separate path for i3 when ultimately we're doing the same thing as the other paths here? my suggestion is we just rename the i3_firstlaunch_wizard needle to getting_started_i3 and give it the getting_started tag - then we should simply be able to use handle_welcome_screen without modification. well...looking at what that prompt actually means, the fact that we're pressing 'esc' means it keeps coming back. I would suggest we tweak handle_welcome_screen so we hit 'enter' on i3, and then the behaviour should be the same as the other paths (the screen won't appear on subsequent boots), so we can use the same logic, unless creating the config file causes some problem. this might also mean we no longer need create_user_i3_config ? see below note on _graphical_wait_login.pm
  • the use i3; in _boot_to_anaconda.pm , _graphical_wait_login.pm, desktop_background.pm and desktop_printing.pm are no longer needed
  • in _graphical_wait_login.pm - if ($sat ne $dut && !get_var("_WELCOME_DONE") or $desktop eq "i3"); - see above note about handle_welcome_screen. if we tweak it so we hit 'enter' when we see the "Do you want me to generate a config?" question, then things should behave the same as on the other desktops, so we should not need custom logic here.
  • in desktop_login.pm - in the @@ -84,12 +93,20 @@ block, why is the code being changed moved after the if ($desktop eq "kde") { block? that doesn't seem valid. it seems like the 'get rid of the getting started screen on kde' block should still come after the 'type the password and check we're at a desktop' block
  • at the end of desktop_login.pm - there's a zombie you missed. :D we don't need any logic for GNOME before fedora 34 any more. just make the 'look for the error' block unique to i3

rebased onto a9412b1

10 months ago

1 new commit added

  • Remove firstlaunch_setup
10 months ago

1 new commit added

  • Do not use i3 where not necessary.
10 months ago

1 new commit added

  • Change handle_welcome_screen
10 months ago

1 new commit added

  • Tweak handle welcome screen
10 months ago

1 new commit added

  • Move KDE block after the login.
10 months ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
10 months ago

1 new commit added

  • Deliver some fixes to make tests pass.
10 months ago

1 new commit added

  • Tidy scripts.
10 months ago

I was not able to make the login test pass without the config commands, but I will move them into the main script and we will be able to delete the I3.pm library.

Huh, I wonder what the automatic account creation does differently from the manual one. Have you diffed the resulting config, for interest?

Huh, I wonder what the automatic account creation does differently from the manual one. Have you diffed the resulting config, for interest?

I realized that for some reason the handle_welcome_screen does not run correctly in graphical_wait_login.pm on I3 during install_default_upload. The rendition of the subroutine should be correct because it works when I invoke again if the dialogue is still visible after the installation when the tests are started.
It seems to me, however, that the condition that runs it is met on that installation. The video shows that it does not run. I will need to find out tomorrow.

rebased onto a9412b1

10 months ago

It's because it was already run during _boot_to_anaconda . handle_welcome_screen has a mechanism to only run once (with exceptions), on the assumption that once it's run once we won't see it again. Of course this isn't true if the first time it ran was pre-install, as in this case.

We can tweak the mechanism, but the thought also occurs: do we need to do handle_welcome_screen during _boot_to_anaconda? will leaving the welcome screen there cause any problems? my instinct is that it won't, so I'm testing a run with that line commented out now.

I also removed the i3_firstlaunch_wizard-20240708 needle because it was completely bogus (matched on a random area of screen that has nothing to do with the wizard window) and unnecessary - I just edited the original needle to match on some content of the window instead of its title, so it should match regardless of whether the window is active.

ugh i fucked up that rebase...fix pending...

rebased onto a9412b1

10 months ago

OK, so just dropping the handle_welcome_screen doesn't work, but this does:

-                    handle_welcome_screen(timeout => 300);
+                    assert_screen "getting_started", 300;
+                    send_key "esc";

i.e. wait till we see the getting started screen, then just dismiss it. Apparently launching the installer doesn't work if it's still visible. Alternatively we can give handle_welcome_screen a mode where it does not set _WELCOME_DONE, but on the whole I think I prefer just doing a minimal "reimplementation" here...WDYT?

rebased onto 21222f6

10 months ago

OK, so just dropping the handle_welcome_screen doesn't work, but this does:
- handle_welcome_screen(timeout => 300); + assert_screen "getting_started", 300; + send_key "esc";
i.e. wait till we see the getting started screen, then just dismiss it. Apparently launching the installer doesn't work if it's still visible. Alternatively we can give handle_welcome_screen a mode where it does not set _WELCOME_DONE, but on the whole I think I prefer just doing a minimal "reimplementation" here...WDYT?

I think that this is probably the best option. Do not bother with the Live system configuration, as it is thrown away anyway, and only focus on running the handle_welcome_screen after the system has been installed which hopefully creates a persistent configuration file and other tests will not be affected by that being non-existent. I will test it today.

I am also one problem with this failure, which seems to be systemic:

[2024-09-10T11:27:14.440281+02:00] [info] [pid:526521] ::: backend::baseclass::die_handler: Backend process died, backend errors are reported below in the following lines:
  QMP command migrate-set-capabilities failed: GenericError; Parameter 'capability' does not accept value 'compress' at /usr/lib/os-autoinst/backend/qemu.pm line 1105.
[2024-09-10T11:27:14.441729+02:00] [info] [pid:526521] ::: OpenQA::Qemu::Proc::save_state: Saving QEMU state to qemu_state.json

1 new commit added

  • Just skip configuration on I3
10 months ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
10 months ago

And once more - the desktop_printing fails because the printer does not add itself after the package installation, which will have to be addressed. I am trying to get some resolution on the status quo and will file a bug, if this prevails.

EDIT: The cups maintainer is out of office until the 16th of September. I have switched the test to desktop_printing_builtin instead where it works normally.

Apart from that, the I3 tests still pass, so I am moving them to staging again for further observations.

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
10 months ago

Where are you seeing that os-autoinst/qemu failure? that looks pretty weird.

rebased onto 22387fd

10 months ago

rebased onto 4ca41e5

10 months ago

rebased onto 358695e

10 months ago

rebased onto 5309466

10 months ago

rebased onto 381a79f

10 months ago

2 new commits added

  • Rebase the PR to fit within the current status quo.
  • Add openQA tests for i3
10 months ago

now we only create the user config in one test, we could move the function there and drop the i3 library entirely (and all use i3; statements).

rebased onto a7dbff2

10 months ago

1 new commit added

  • Move the content from i3 library to the files.
10 months ago

I have deleted the library and moved the content.

rebased onto 7657b8b

10 months ago

OK, thanks! I'll try and juggle a final test of this with my extend-desktop-update-tests branch that I'm working on, and finally get it merged. thanks for all the work on it.

rebased onto 82abc61

10 months ago

1 new commit added

  • Rename i3_tilling to i3_tiling
10 months ago

OK, I rebased this, ran it on stg and all tests passed, fixed one more thing (renamed 'tilling' to 'tiling'), and merging. yay! thanks for all the work on this, lukas.

Pull-Request has been merged by adamwill

10 months ago
Metadata
Changes Summary 128
+1 -1
file changed
lib/fedoradistribution.pm
+30 -14
file changed
lib/utils.pm
+15
file added
needles/i3/addon_add-i3-20210719.json
+0
file added
needles/i3/addon_add-i3-20210719.png
+15
file added
needles/i3/addon_add-i3-20240708.json
+0
file added
needles/i3/addon_add-i3-20240708.png
+22
file added
needles/i3/addon_success-i3-20210719.json
+0
file added
needles/i3/addon_success-i3-20210719.png
+22
file added
needles/i3/addon_success-i3-20240708.json
+0
file added
needles/i3/addon_success-i3-20240708.png
+22
file added
needles/i3/apps_run_blivetgui-i3.json
+0
file added
needles/i3/apps_run_blivetgui-i3.png
+22
file added
needles/i3/apps_run_mousepad.json
+0
file added
needles/i3/apps_run_mousepad.png
+15
file added
needles/i3/apps_run_terminal-i3-20240708.json
+0
file added
needles/i3/apps_run_terminal-i3-20240708.png
+22
file added
needles/i3/apps_run_terminal-i3.json
+0
file added
needles/i3/apps_run_terminal-i3.png
+29
file added
needles/i3/getting_started_i3-20240708.json
+0
file added
needles/i3/getting_started_i3-20240708.png
+29
file added
needles/i3/getting_started_i3.json
+0
file added
needles/i3/getting_started_i3.png
+31
file added
needles/i3/i3-bar-20240708.json
+0
file added
needles/i3/i3-bar-20240708.png
+31
file added
needles/i3/i3-bar.json
+0
file added
needles/i3/i3-bar.png
+22
file added
needles/i3/i3-blivet_gui_application.json
+0
file added
needles/i3/i3-blivet_gui_application.png
+29
file added
needles/i3/i3-dmenu-20240708.json
+0
file added
needles/i3/i3-dmenu-20240708.png
+22
file added
needles/i3/i3-dmenu.json
+0
file added
needles/i3/i3-dmenu.png
+25
file added
needles/i3/i3-lightdm-login_screen-20240708.json
+0
file added
needles/i3/i3-lightdm-login_screen-20240708.png
+25
file added
needles/i3/i3-lightdm-login_screen-no_cursor.json
+0
file added
needles/i3/i3-lightdm-login_screen-no_cursor.png
+25
file added
needles/i3/i3-lightdm-login_screen.json
+0
file added
needles/i3/i3-lightdm-login_screen.png
+26
file added
needles/i3/i3-logout-bar-20240708.json
+0
file added
needles/i3/i3-logout-bar-20240708.png
+26
file added
needles/i3/i3-logout-bar.json
+0
file added
needles/i3/i3-logout-bar.png
+19
file added
needles/i3/i3-mousepad-printing_print-20240708.json
+0
file added
needles/i3/i3-mousepad-printing_print-20240708.png
+19
file added
needles/i3/i3-mousepad-printing_print.json
+0
file added
needles/i3/i3-mousepad-printing_print.png
+15
file added
needles/i3/i3-mupdf-printing_check_sentence.json
+0
file added
needles/i3/i3-mupdf-printing_check_sentence.png
+23
file added
needles/i3/i3-urxvt-run.json
+0
file added
needles/i3/i3-urxvt-run.png
+15
file added
needles/i3/i3_dunst_foo_notification-20240708.json
+0
file added
needles/i3/i3_dunst_foo_notification-20240708.png
+15
file added
needles/i3/i3_dunst_foo_notification-20240718.json
+0
file added
needles/i3/i3_dunst_foo_notification-20240718.png
+15
file added
needles/i3/i3_dunst_foo_notification.json
+0
file added
needles/i3/i3_dunst_foo_notification.png
+29
file added
needles/i3/i3_windows_split-20240708.json
+0
file added
needles/i3/i3_windows_split-20240708.png
+22
file added
needles/i3/i3_windows_split-20240718.json
+0
file added
needles/i3/i3_windows_split-20240718.png
+29
file added
needles/i3/i3_windows_split.json
+0
file added
needles/i3/i3_windows_split.png
+15
file added
needles/i3/i3_windows_stacked-20240708.json
+0
file added
needles/i3/i3_windows_stacked-20240708.png
+15
file added
needles/i3/i3_windows_stacked-20240718.json
+0
file added
needles/i3/i3_windows_stacked-20240718.png
+15
file added
needles/i3/i3_windows_stacked.json
+0
file added
needles/i3/i3_windows_stacked.png
+15
file added
needles/i3/i3_windows_tabbed-20240708.json
+0
file added
needles/i3/i3_windows_tabbed-20240708.png
+15
file added
needles/i3/i3_windows_tabbed-20240718.json
+0
file added
needles/i3/i3_windows_tabbed-20240718.png
+15
file added
needles/i3/i3_windows_tabbed.json
+0
file added
needles/i3/i3_windows_tabbed.png
+19
file added
needles/i3/lightdm-login_jack.json
+0
file added
needles/i3/lightdm-login_jack.png
+19
file added
needles/i3/lightdm-login_jim.json
+0
file added
needles/i3/lightdm-login_jim.png
+15
file added
needles/i3/lightdm-login_wrong_password.json
+0
file added
needles/i3/lightdm-login_wrong_password.png
+33
file added
needles/i3/lightdm_power_menu-20240708.json
+0
file added
needles/i3/lightdm_power_menu-20240708.png
+40
file added
needles/i3/lightdm_power_menu-reboot-20240708.json
+0
file added
needles/i3/lightdm_power_menu-reboot-20240708.png
+15
file added
needles/i3/lightdm_power_menu-reboot-confirm.json
+0
file added
needles/i3/lightdm_power_menu-reboot-confirm.png
+40
file added
needles/i3/lightdm_power_menu-reboot.json
+0
file added
needles/i3/lightdm_power_menu-reboot.png
+15
file added
needles/i3/lightdm_power_menu-shutdown-confirm-20240709.json
+0
file added
needles/i3/lightdm_power_menu-shutdown-confirm-20240709.png
+33
file added
needles/i3/lightdm_power_menu-shutdown-confirm.json
+0
file added
needles/i3/lightdm_power_menu-shutdown-confirm.png
+33
file added
needles/i3/lightdm_power_menu.json
+0
file added
needles/i3/lightdm_power_menu.png
+33
file added
needles/i3/lightdm_user_selection-20240708.json
+0
file added
needles/i3/lightdm_user_selection-20240708.png
+33
file added
needles/i3/lightdm_user_selection.json
+0
file added
needles/i3/lightdm_user_selection.png
+15
file added
needles/i3/login_jack-i3.json
+0
file added
needles/i3/login_jack-i3.png
+15
file added
needles/i3/login_jim-i3.json
+0
file added
needles/i3/login_jim-i3.png
+15
file added
needles/i3/login_wrong_password-20240709.json
+0
file added
needles/i3/login_wrong_password-20240709.png
+15
file added
needles/i3/mousepad_no_document_open-20240708.json
+0
file added
needles/i3/mousepad_no_document_open-20240708.png
+22
file added
needles/i3/mousepad_no_document_open.json
+0
file added
needles/i3/mousepad_no_document_open.png
+15
file added
needles/i3/navigation_three_workspaces-20240607.json
+0
file added
needles/i3/navigation_three_workspaces-20240607.png
+15
file added
needles/i3/printing_check_sentence-i3.json
+0
file added
needles/i3/printing_check_sentence-i3.png
+15
file added
needles/i3/printing_kde_location_line-i3.json
+0
file added
needles/i3/printing_kde_location_line-i3.png
+15
file added
needles/i3/printing_use_cups_printer-i3.json
+0
file added
needles/i3/printing_use_cups_printer-i3.png
+15
file added
needles/i3/printing_use_saveas_pdf-i3.json
+0
file added
needles/i3/printing_use_saveas_pdf-i3.png
+15
file added
needles/kde/leave_button-20240715.json
+0
file added
needles/kde/leave_button-20240715.png
+74 -20
file changed
templates.fif.json
+30 -21
file changed
tests/_boot_to_anaconda.pm
+9 -4
file changed
tests/desktop_browser.pm
+103 -41
file changed
tests/desktop_login.pm
+38 -1
file changed
tests/desktop_notifications.pm
+40 -14
file changed
tests/desktop_printing.pm
+8 -2
file changed
tests/desktop_terminal.pm
+47
file added
tests/i3_tiling.pm