#256 Create a test suite for Gnome Software.
Opened 3 years ago by lruzicka. Modified 2 years ago

file modified
+12
@@ -130,6 +130,18 @@ 

      testliterals.append(f"maps_info_{location}")

  # variable-y in custom_change_device but we only have one value

  testliterals.append("anaconda_part_device_sda")

+ # For various application needles used by installation, removal, and

+ # checking methods.

+ for application in ("mahjongg","gvim","emacs","inkscape"):

+     testliterals.append(f"software_{application}-found")

+     testliterals.append(f"software_{application}-found_installed")

+     testliterals.append(f"software_{application}-listed")

+     testliterals.append(f"software_{application}-install_pane")

+     testliterals.append(f"apps_run_{application}")

+ # For RPM and Flatpak source used by installation methods.

+ for source in ("rpm", "flatpak"):

+     testliterals.append(f"software_source_available_{source}")

+     testliterals.append(f"software_source_fedora_{source}")

  # for Anaconda help related needles.

  testliterals.extend(f"anaconda_help_{fsys}" for fsys in ('install_destination',

  'installation_progress', 'keyboard_layout', 'language_support', 'network_host_name',

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

+ package desktoptools;

+ 

+ use strict;

+ 

+ use base 'Exporter';

+ use Exporter;

+ 

+ use testapi;

+ use utils;

+ 

+ our @EXPORT = qw/find_application install_application check_application_information start_application_via_packagemanager check_app_installed remove_application restart_application/;

+ 

+ # This subroutine searches for the application using the package manager's

+ # search method. Currently, the routine is only available for Gnome Software.

+ sub find_application {

+     my $application = shift;

+     assert_and_click("gnome_search_button");

+     wait_still_screen(2);

+     type_safely($application);

+     # Confirm that the application has been found and shown

+     # in the overview, click on it to enter the installation

+     # tab and confirm it has opened.

+     assert_and_click("software_$application-found");

+     wait_still_screen(2);

+     assert_screen("software_$application-install_pane");

+ }

+ 

+ # This subroutine checks that the application shows appropriate

+ # information.

+ sub check_application_information {

+     my $application = shift;

+     # The logo, the screenshot, and the description should be visible

+     # without any intervention needed.

+     assert_screen("software_logo_$application");

+     assert_screen("software_screenshot_$application");

+     assert_screen("software_description_$application");

+ 

+     # Other elements are placed below the visible area

+     # so we need to move there, if we want to see it.

+     # The safest option is to hit the tab key until

+     # we reach that element.

+     send_key_until_needlematch("software_download_size_$application", "tab");

+     # Now, other metadata should be visible two, so let's check them

+     assert_screen("software_safestatus_$application");

+     assert_screen("software_usage_$application");

+     assert_screen("software_rating_$application");

+     

+     # Again, let's move a bit down

+     send_key_until_needlematch("software_website_$application", "tab");

+     # Let's click on the link to open the website

+     click_lastmatch();

+ 

+     # Check, that the webpage has opened with correct information.

+     assert_screen("software_weblink_$application");

+     assert_screen("software_webcontent_$application");

+ 

+     # Close the browser

+     send_key("alt-f4");

+     wait_still_screen(2);

+ }

+ 

+ # This subroutine installs an application via the

+ # GUI application, such as Gnome Software, or Discover.

+ # Currently, only Gnome Software is supported.

+ # The $application takes the name of the application, while

+ # $source takes the installation source, rpm or flatpak.

+ # The subroutine does not start the application itself,

+ # you need to start it before running this.

+ sub install_application {

+     my ($application, $source) = @_;

+     # For some applications, there are more installation sources

+     # available. Pick the desired one.

+     if (check_screen("software_sources_available", timeout => 5)) {

+         click_lastmatch();

+         wait_still_screen(2);

+         assert_and_click("software_source_fedora_$source");

+         wait_still_screen(2);

+         # Confirm that the source is indeed correctly selected.

+         assert_screen("software_sources_available_$source");

+     }

+     # Click the Install button to start the installation.

+     assert_and_click("gnome_install_button");

+     # When the installation is finished, the Open button

+     # will be shown. We are going to wait for this for

+     # a certain time. In case of Flatpak, this should be longer.

+     my $wait_time = 180;

+     if ($source eq "flatpak") {

+         $wait_time = 1200;

+     }

+     assert_screen("gnome_button_open", timeout => $wait_time);

+     # After the installation, return to the previous page.

+     if (check_screen("software_back_button")) {

+         click_lastmatch();

+     }

+ }

+ 

+ # This subroutine opens the $application using Gnome Software.

+ # It is useful to check that the installed application can

+ # be run immediately from withing the application.

+ sub start_application_via_packagemanager {

+     my $application = shift;

+     # We do not have to be on the application tab, so let's

+     # start over and navigate there from scratch if needed -

+     # if no Open button is visible.

+     unless (check_screen("gnome_button_open")) {

+         assert_and_click("gnome_search_button");

+         wait_still_screen(2);

+         type_safely($application);

+         assert_and_click("software_$application-found");

+         wait_still_screen(2);

+         assert_screen("software_$application-install_pane");

+     }

+     # An Open button must be visible now, if the application

+     # has been installed, otherwise the command will fail.

+     assert_and_click("gnome_button_open");

+     wait_still_screen(3);

+     assert_screen("apps_run_$application");

+ }

+ 

+ # This subroutine checks that the $application has been found

+ # in the list of installed applications.

+ # It will send a key and circle through the GUI list until the

+ # application has been found (or it will fail).

+ sub check_app_installed {

+     my $application = shift;

+     # Look for the application and confirm that it is listed as installed

+     # in the application overview.

+     assert_and_click("gnome_search_button");

+     type_safely($application);

+     send_key("ret");

+     assert_screen("software_$application-found_installed");

+ 

+     # Enter the Installed application view and circle through the items

+     # until the desired application has been found.

+     assert_and_click("software_installed_button");

+     send_key_until_needlematch("software_$application-listed", "tab", 70);

+ }

+ 

+ # This subroutine removes the application using a default package manager.

+ # This will not start the package manager application, you need to start

+ # it manualy or using a different subroutine.

+ # Currently only works for Software.

+ sub remove_application {

+     my $application = shift;

+ 

+     # Find the application.

+     assert_and_click("gnome_search_button");

+     wait_still_screen(2);

+     type_safely($application);

+ 

+     assert_and_click("software_$application-found_installed");

+     wait_still_screen(2);

+     assert_screen("software_$application-install_pane");

+ 

+     # Click the Delete button to delete the application.

+     assert_and_click("software_remove_button");

+ 

+     # Confirm to progress with the removal

+     assert_and_click("gnome_uninstall_button");

+ 

+     # Wait until the Open button changes to Install to indicate

+     # that the application has been removed.

+     assert_screen("gnome_install_button", timeout => 180);

+ }

+ 

+ # This routine records a soft failure and starts the application.

+ # We have identified tests where the tested application crashes

+ # after the VM has been rolled back, probably due to changes

+ # to the underlying system, such as in Software.

+ sub restart_application {

+     my $application = shift;

+ 

+     record_soft_failure("$application crashed and had to be restarted to continue the tests.");

+     menu_launch_type($application);

+     wait_still_screen(2);

+     assert_screen("apps_run_$application");

+ }

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

  sub become_root {

      # If ROOT_PASSWORD exists, it means that the root account exists, too.

      # To become root, we will use the real root account and we'll switch to it.

-     if (check_var("ROOT_PASSWORD")) {

+     if (get_var("ROOT_PASSWORD")) {

          my $password = get_var("ROOT_PASSWORD");

          enter_cmd("su -", max_interval => 15, wait_screen_changes => 3);

          type_password($password, max_interval => 15);

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

  

  use lockapi;

  use testapi;

- 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 repo_setup setup_workaround_repo disable_updates_repos cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop download_modularity_tests quit_firefox advisory_get_installed_packages 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 click_unwanted_notifications repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable/;

+ 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 repo_setup setup_workaround_repo cleanup_workaround_repo console_initial_setup handle_welcome_screen gnome_initial_setup anaconda_create_user check_desktop download_modularity_tests quit_firefox advisory_get_installed_packages 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 click_unwanted_notifications repos_mirrorlist register_application get_registered_applications solidify_wallpaper check_and_install_git download_testdata make_serial_writable start_gnome_software/;

  

  # We introduce this global variable to hold the list of applications that have

  # registered during the apps_startstop_test when they have sucessfully run.
@@ -1618,7 +1618,25 @@ 

  # We agree that this is not the "correct" way, to enable users to type onto serial console

  # and that it correctly should be done via groups (dialout) but that would require rebooting

  # the virtual machine. Therefore we do it this way, which has immediate effect.

+ #

+ # Use "cli" or "desktop" as an argument to use this either from CLI or desktop.

  sub make_serial_writable {

+     my $env = shift;

+     # Get the name of the desktop

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

+     # If we are running it from the desktop

+     if ($env eq "desktop") {

+         # The default terminal  application is gnome-terminal

+         my $term = "gnome-terminal";

+         # On KDE, change this to konsole

+         if ($desktop eq "kde") {

+             $term = "konsole";

+         }

+         # Run the terminal application

+         menu_launch_type($term);

+         wait_still_screen(3);

+     }

+     # Become root

      become_root();

      sleep 2;

      # Make serial console writable for everyone.
@@ -1627,6 +1645,30 @@ 

      # Exit the root account

      enter_cmd("exit");

      sleep 2;

+     # If we are on the desktop, than a terminal was

+     # started for us. Leave it now.

+     if ($env eq "desktop") {

+         # Exit the terminal

+         enter_cmd("exit");

+         sleep 2;

+     }

+ }

+ 

+ # This subroutine start Gnome Software and deals with

+ # the welcome dialogue and checks that the application

+ # has started successfully. If 'started' is true, skip

+ # actually running the app and just do the welcome

+ # screen check.

+ # FIXME: the welcome screen was removed upstream between

+ # F35 and F36. When F35 goes EOL we can just drop this

+ # whole thing and have things that call it just launch the

+ # app and do `assert_screen "apps_run_software";`

+ sub start_gnome_software {

+     my %args = @_;

+     $args{started} //= 0;

+     menu_launch_type "gnome-software" unless $args{started};

+     click_lastmatch if (check_screen "gnome_software_welcome", timeout => 15);

+     assert_screen "apps_run_software";

  }

  

  1;

needles/gnome/apps/apps_run_inkscape.json needles/gnome/apps/nautilus/nautilus_star_selected_file-20220811.json
file renamed
+5 -5
@@ -1,15 +1,15 @@ 

  {

    "area": [

      {

-       "xpos": 971,

-       "ypos": 191,

-       "width": 19,

-       "height": 18,

+       "xpos": 211,

+       "ypos": 122,

+       "width": 250,

+       "height": 65,

        "type": "match"

      }

    ],

    "properties": [],

    "tags": [

-     "nautilus_star_selected_file"

+     "apps_run_inkscape"

    ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 115,

+       "ypos": 5,

+       "width": 98,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "apps_run_mahjongg"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 29,

+       "type": "match",

+       "ypos": 41,

+       "height": 28,

+       "xpos": 9

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "gnome_search_button"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
needles/gnome/apps/gnome_uninstall_button.json needles/gnome/gnome_button_credits-eog-dark.json
file renamed
+6 -6
@@ -1,15 +1,15 @@ 

  {

    "area": [

      {

-       "xpos": 543,

-       "ypos": 227,

-       "width": 56,

-       "height": 15,

+       "xpos": 602,

+       "ypos": 441,

+       "width": 72,

+       "height": 25,

        "type": "match"

      }

    ],

    "properties": [],

    "tags": [

-     "gnome_button_credits"

+     "gnome_uninstall_button"

    ]

- }

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 481,

+       "ypos": 321,

+       "width": 62,

+       "height": 64,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_about"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 94,

+       "ypos": 510,

+       "width": 140,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_application_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 393,

+       "ypos": 613,

+       "width": 181,

+       "height": 29,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_application_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 398,

+       "ypos": 498,

+       "width": 121,

+       "height": 25,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_application_clocks"

+   ]

+ } 

\ No newline at end of file

needles/gnome/apps/software/software_automatic_disabled.json needles/gnome/apps/evince/evince_search_button-20220219.json
file renamed
+5 -5
@@ -1,15 +1,15 @@ 

  {

    "area": [

      {

-       "xpos": 897,

-       "width": 26,

+       "width": 511,

        "type": "match",

-       "ypos": 42,

-       "height": 24

+       "xpos": 265,

+       "ypos": 411,

+       "height": 25

      }

    ],

    "properties": [],

    "tags": [

-     "evince_search_button"

+     "software_automatic_disabled"

    ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "ypos": 411,

+       "height": 23,

+       "xpos": 264,

+       "width": 129,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_automatic_updates"

+   ]

+ } 

\ No newline at end of file

needles/gnome/apps/software/software_back_button.json needles/gnome/apps/evince/evince_search_button.json
file renamed
+5 -5
@@ -1,15 +1,15 @@ 

  {

    "area": [

      {

-       "xpos": 897,

        "type": "match",

-       "ypos": 42,

-       "width": 26,

-       "height": 24

+       "width": 24,

+       "xpos": 13,

+       "height": 20,

+       "ypos": 45

      }

    ],

    "properties": [],

    "tags": [

-     "evince_search_button"

+     "software_back_button"

    ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 209,

+       "ypos": 478,

+       "width": 61,

+       "height": 22,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_category_create"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 503,

+       "ypos": 560,

+       "width": 58,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_category_learn"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
needles/gnome/apps/software/software_category_play.json needles/gnome/apps/weather/weather_report_hourly_later.json
file renamed
+14 -14
@@ -1,15 +1,15 @@ 

- {

-   "area": [

-     {

-       "xpos": 707,

-       "ypos": 221,

-       "width": 45,

-       "height": 21,

-       "type": "match"

-     }

-   ],

-   "properties": [],

-   "tags": [

-     "weather_report_hourly"

-   ]

+ {

+   "area": [

+     {

+       "xpos": 803,

+       "ypos": 478,

+       "width": 45,

+       "height": 22,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_category_play"

+   ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 505,

+       "ypos": 473,

+       "width": 58,

+       "height": 29,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_category_work"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 160,

+       "type": "match",

+       "xpos": 338,

+       "ypos": 201,

+       "height": 20

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_credits"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 422,

+       "ypos": 461,

+       "height": 20,

+       "width": 160,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_credits"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 97,

+       "ypos": 726,

+       "width": 349,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_description_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 98,

+       "ypos": 723,

+       "width": 255,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_description_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 98,

+       "ypos": 726,

+       "width": 252,

+       "height": 26,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_description_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 148,

+       "ypos": 641,

+       "width": 107,

+       "height": 70,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_download_size_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 144,

+       "ypos": 634,

+       "width": 114,

+       "height": 76,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_download_size_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 154,

+       "ypos": 640,

+       "width": 96,

+       "height": 70,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_download_size_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 248,

+       "ypos": 164,

+       "width": 149,

+       "height": 27,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_emacs-found"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 248,

+       "ypos": 165,

+       "width": 147,

+       "height": 24,

+       "type": "match"

+     },

+     {

+       "xpos": 700,

+       "ypos": 183,

+       "width": 80,

+       "height": 27,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_emacs-found_installed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 121,

+       "ypos": 134,

+       "width": 281,

+       "height": 42,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_emacs-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "height": 30,

+       "width": 537,

+       "type": "match",

+       "ypos": 602,

+       "xpos": 249

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_emacs-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 249,

+       "ypos": 695,

+       "type": "match",

+       "height": 30,

+       "width": 537

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_emacs-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 238,

+       "ypos": 163,

+       "width": 120,

+       "height": 26,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_gvim-found"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 242,

+       "ypos": 168,

+       "width": 118,

+       "height": 21,

+       "type": "match"

+     },

+     {

+       "xpos": 702,

+       "ypos": 185,

+       "width": 77,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_gvim-found_installed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 113,

+       "ypos": 116,

+       "width": 210,

+       "height": 58,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_gvim-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 242,

+       "ypos": 232,

+       "width": 548,

+       "height": 26,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_gvim-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 246,

+       "ypos": 166,

+       "width": 128,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-found"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 312,

+       "ypos": 170,

+       "width": 468,

+       "height": 40,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-found_installed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "height": 43,

+       "width": 245,

+       "xpos": 123,

+       "type": "match",

+       "ypos": 120

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 122,

+       "ypos": 120,

+       "height": 43,

+       "width": 245,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 123,

+       "ypos": 131,

+       "width": 245,

+       "height": 43,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 245,

+       "ypos": 508,

+       "height": 31,

+       "type": "match",

+       "width": 547

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 245,

+       "ypos": 322,

+       "width": 547,

+       "height": 31,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_inkscape-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 92,

+       "type": "match",

+       "xpos": 463,

+       "ypos": 40,

+       "height": 27

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_installed_button"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "ypos": 41,

+       "height": 27,

+       "xpos": 463,

+       "type": "match",

+       "width": 92

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_installed_button"

+   ]

+ } 

\ No newline at end of file

needles/gnome/apps/software/software_installed_button_active.json needles/gnome/apps/weather/weather_report_hourly_later-20220820.json
file renamed
+4 -4
@@ -1,15 +1,15 @@ 

  {

    "area": [

      {

-       "xpos": 403,

+       "width": 85,

        "height": 21,

-       "ypos": 221,

        "type": "match",

-       "width": 45

+       "ypos": 44,

+       "xpos": 470

      }

    ],

    "properties": [],

    "tags": [

-     "weather_report_hourly"

+     "software_installed_button"

    ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 99,

+       "ypos": 103,

+       "width": 128,

+       "height": 131,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_logo_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 109,

+       "ypos": 109,

+       "width": 101,

+       "height": 117,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_logo_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 106,

+       "ypos": 109,

+       "width": 118,

+       "height": 119,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_logo_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "height": 40,

+       "xpos": 241,

+       "ypos": 165,

+       "width": 545

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "ypos": 158,

+       "height": 40,

+       "xpos": 241,

+       "width": 545

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found"

+   ]

+ } 

\ No newline at end of file

needles/gnome/apps/software/software_mahjongg-found-20230322.json needles/gnome/apps/evince/evince_search_button-20210916.json
file renamed
+4 -4
@@ -1,15 +1,15 @@ 

  {

    "area": [

      {

-       "width": 26,

+       "width": 211,

        "type": "match",

-       "ypos": 42,

+       "ypos": 165,

        "height": 24,

-       "xpos": 897

+       "xpos": 235

      }

    ],

    "properties": [],

    "tags": [

-     "evince_search_button"

+     "software_mahjongg-found"

    ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 545,

+       "height": 37,

+       "ypos": 165,

+       "xpos": 240

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 243,

+       "ypos": 168,

+       "width": 545,

+       "height": 40,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "ypos": 160,

+       "type": "match",

+       "xpos": 241,

+       "width": 546,

+       "height": 42

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found_installed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 546,

+       "xpos": 239,

+       "height": 42,

+       "ypos": 163

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found_installed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 241,

+       "ypos": 167,

+       "width": 546,

+       "height": 42,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-found_installed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "height": 51,

+       "width": 383,

+       "ypos": 117,

+       "xpos": 104

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-install_pane"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "xpos": 104,

+       "height": 51,

+       "ypos": 117,

+       "type": "match",

+       "width": 383

+     },

+     {

+       "xpos": 356,

+       "ypos": 127,

+       "width": 137,

+       "height": 40,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-install_pane"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,22 @@ 

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 120,

+       "height": 51,

+       "ypos": 117,

+       "xpos": 103

+     },

+     {

+       "xpos": 246,

+       "ypos": 129,

+       "width": 133,

+       "height": 36,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "ypos": 117,

+       "height": 51,

+       "xpos": 103,

+       "width": 280,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 383,

+       "height": 51,

+       "ypos": 117,

+       "type": "match",

+       "xpos": 0

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-install_pane"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 237,

+       "height": 58,

+       "type": "match",

+       "width": 555,

+       "ypos": 484

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 555,

+       "ypos": 298,

+       "xpos": 237,

+       "height": 58,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 235,

+       "ypos": 228,

+       "width": 214,

+       "height": 34,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 237,

+       "height": 36,

+       "ypos": 599,

+       "type": "match",

+       "width": 555

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 236,

+       "ypos": 205,

+       "width": 555,

+       "height": 58,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg-listed"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 95,

+       "ypos": 693,

+       "width": 328,

+       "height": 51,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_description"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 108,

+       "ypos": 119,

+       "width": 110,

+       "height": 85,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_icon"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 248,

+       "ypos": 130,

+       "width": 241,

+       "height": 37,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_name"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 165,

+       "height": 44,

+       "width": 76,

+       "ypos": 642,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_place"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 161,

+       "ypos": 641,

+       "width": 84,

+       "height": 45,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_place"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 374,

+       "ypos": 639,

+       "width": 67,

+       "height": 74,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_safety"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 463,

+       "ypos": 423,

+       "width": 128,

+       "height": 89,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_mahjongg_slide"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 111,

+       "type": "match",

+       "ypos": 162,

+       "height": 19,

+       "xpos": 857

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_menu_about"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 858,

+       "ypos": 162,

+       "width": 111,

+       "height": 19,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_menu_about"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 860,

+       "height": 24,

+       "ypos": 94,

+       "width": 148,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_menu_repositories"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 261,

+       "height": 23,

+       "ypos": 468,

+       "width": 512,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_notifications_disabled"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 778,

+       "ypos": 641,

+       "width": 85,

+       "height": 71,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_rating_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 783,

+       "ypos": 639,

+       "width": 79,

+       "height": 76,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_rating_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 786,

+       "ypos": 642,

+       "width": 76,

+       "height": 68,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_rating_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 895,

+       "ypos": 160,

+       "width": 25,

+       "height": 20,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_remove_button"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "ypos": 452,

+       "height": 22,

+       "xpos": 628,

+       "width": 62,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_disable"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 253,

+       "ypos": 410,

+       "width": 520,

+       "height": 48,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_fedora_modular",

+     "software_repo_fedora_modular-off"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "ypos": 409,

+       "width": 516,

+       "type": "match",

+       "height": 46,

+       "xpos": 254

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_fedora_modular",

+     "software_repo_fedora_modular-on"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 123,

+       "type": "match",

+       "xpos": 254,

+       "height": 33,

+       "ypos": 409

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_fedora_modular"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "width": 515,

+       "ypos": 593,

+       "xpos": 257,

+       "height": 61,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_test_updates",

+     "software_repo_test_updates-off"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "xpos": 249,

+       "ypos": 597,

+       "width": 522,

+       "height": 57,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_test_updates",

+     "software_repo_test_updates-on"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 373,

+       "ypos": 595,

+       "width": 152,

+       "height": 46,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repo_test_updates"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 434,

+       "height": 20,

+       "ypos": 126,

+       "width": 156,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_repositories"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 383,

+       "ypos": 642,

+       "width": 51,

+       "height": 68,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_safestatus_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 385,

+       "ypos": 638,

+       "width": 47,

+       "height": 76,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_safestatus_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 378,

+       "ypos": 638,

+       "width": 60,

+       "height": 73,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_safestatus_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 171,

+       "ypos": 262,

+       "width": 267,

+       "height": 157,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_screenshot_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 381,

+       "ypos": 324,

+       "width": 260,

+       "height": 136,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_screenshot_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 371,

+       "ypos": 256,

+       "width": 275,

+       "height": 120,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_screenshot_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 757,

+       "height": 25,

+       "ypos": 275,

+       "type": "match",

+       "width": 147

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_source_fedora_flatpak"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 147,

+       "ypos": 106,

+       "height": 25,

+       "xpos": 786

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_source_fedora_flatpak"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "ypos": 217,

+       "height": 24,

+       "xpos": 783,

+       "type": "match",

+       "width": 139

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_source_fedora_rpm"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 756,

+       "height": 24,

+       "ypos": 358,

+       "type": "match",

+       "width": 76

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_source_fedora_rpm"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 742,

+       "ypos": 241,

+       "width": 139,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_source_fedora_rpm"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "width": 141,

+       "type": "match",

+       "xpos": 788,

+       "ypos": 183,

+       "height": 22

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_sources_available",

+     "software_sources_available_flatpak"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "width": 179,

+       "type": "match",

+       "xpos": 795,

+       "ypos": 45,

+       "height": 22

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_sources_available",

+     "software_sources_available_flatpak"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "ypos": 184,

+       "height": 21,

+       "xpos": 796,

+       "type": "match",

+       "width": 122

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_sources_available",

+     "software_sources_available_rpm"

+   ]

+ } 

\ No newline at end of file

@@ -0,0 +1,16 @@ 

+ {

+   "area": [

+     {

+       "height": 21,

+       "ypos": 46,

+       "xpos": 810,

+       "width": 160,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_sources_available",

+     "software_sources_available_rpm"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 858,

+       "height": 23,

+       "ypos": 130,

+       "width": 140,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_update_preferences"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 565,

+       "ypos": 643,

+       "width": 105,

+       "height": 67,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_usage_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 563,

+       "ypos": 637,

+       "width": 101,

+       "height": 75,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_usage_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 570,

+       "ypos": 642,

+       "width": 87,

+       "height": 70,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_usage_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 209,

+       "ypos": 185,

+       "width": 269,

+       "height": 33,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_webcontent_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 102,

+       "ypos": 504,

+       "width": 228,

+       "height": 22,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_webcontent_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "width": 541,

+       "ypos": 571,

+       "height": 28,

+       "xpos": 191

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_webcontent_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 242,

+       "ypos": 86,

+       "width": 164,

+       "height": 23,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_weblink_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 240,

+       "ypos": 85,

+       "width": 248,

+       "height": 22,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_weblink_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 238,

+       "ypos": 85,

+       "width": 332,

+       "height": 24,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_weblink_clocks"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 526,

+       "ypos": 273,

+       "width": 164,

+       "height": 43,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_website_amarok"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 530,

+       "ypos": 544,

+       "width": 223,

+       "height": 42,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_website_chess"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "xpos": 530,

+       "ypos": 526,

+       "width": 295,

+       "height": 40,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "software_website_clocks"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
@@ -10,7 +10,8 @@ 

    ],

    "properties": [],

    "tags": [

+     "apps_run_software",

      "desktop_package_tool_update",

      "DESKTOP-gnome"

    ]

- } 

\ No newline at end of file

+ }

@@ -10,7 +10,8 @@ 

      ],

      "properties": [],

      "tags": [

+         "apps_run_software",

          "desktop_package_tool_update",

          "DESKTOP-gnome"

      ]

- } 

\ No newline at end of file

+ }

@@ -10,7 +10,8 @@ 

    ],

    "properties": [],

    "tags": [

+     "apps_run_software",

      "desktop_package_tool_update",

      "DESKTOP-gnome"

    ]

- } 

\ No newline at end of file

+ }

@@ -10,7 +10,8 @@ 

    ],

    "properties": [],

    "tags": [

+     "apps_run_software",

      "desktop_package_tool_update",

      "DESKTOP-gnome"

    ]

- } 

\ No newline at end of file

+ }

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

  {

    "area": [

      {

-       "xpos": 550,

-       "ypos": 221,

-       "width": 56,

+       "xpos": 858,

+       "ypos": 162,

+       "width": 111,

        "height": 19,

        "type": "match"

      }

    ],

    "properties": [],

    "tags": [

-     "gnome_button_credits"

+     "software_menu_about"

    ]

  } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "type": "match",

+       "ypos": 224,

+       "height": 20,

+       "xpos": 545,

+       "width": 52

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "gnome_credits_button"

+   ]

+ } 

\ No newline at end of file

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

+ {

+     "area": [

+         {

+             "height": 20,

+             "type": "match",

+             "width": 58,

+             "xpos": 551,

+             "ypos": 243

+         }

+     ],

+     "properties": [],

+     "tags": [

+         "gnome_credits_button"

+     ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 49,

+       "type": "match",

+       "height": 22,

+       "ypos": 159,

+       "xpos": 846

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "gnome_install_button"

+   ]

+ } 

\ No newline at end of file

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

+ {

+   "area": [

+     {

+       "width": 29,

+       "type": "match",

+       "ypos": 41,

+       "height": 28,

+       "xpos": 9

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "gnome_search_button"

+   ]

+ } 

\ No newline at end of file

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

+ {

+     "area": [

+         {

+             "height": 24,

+             "type": "match",

+             "match": 90,

+             "width": 24,

+             "xpos": 11,

+             "ypos": 44

+         }

+     ],

+     "properties": [],

+     "tags": [

+         "gnome_search_button"

+     ]

+ }

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

+ {

+   "area": [

+     {

+       "xpos": 602,

+       "ypos": 441,

+       "width": 72,

+       "height": 25,

+       "type": "match"

+     }

+   ],

+   "properties": [],

+   "tags": [

+     "gnome_uninstall_button"

+   ]

+ } 

\ No newline at end of file

empty or binary file added
file modified
+18
@@ -1206,6 +1206,7 @@ 

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

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

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

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

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

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

              },
@@ -1216,6 +1217,23 @@ 

                  "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%"

              }

          },

+         "software": {

+             "profiles": {

+                 "fedora-Silverblue-dvd_ostree-iso-ppc64le-*-ppc64le": 50,

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

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

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

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

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

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

+             },

+             "settings": {

+                 "BOOTFROM": "c",

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

+                 "POSTINSTALL_PATH": "tests/applications/software",

+                 "START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%"

+             }

+         },

          "weather": {

              "profiles": {

                  "fedora-Silverblue-dvd_ostree-iso-ppc64le-*-ppc64le": 50,

@@ -14,7 +14,7 @@ 

      # Click on About Clocks to see the About info.

      assert_and_click("clocks_menu_about");

      assert_screen("clocks_about_displayed");

-     assert_and_click("gnome_button_credits");

+     assert_and_click("gnome_credits_button");

      assert_screen("clocks_credits_shown");

  

  }

@@ -9,7 +9,7 @@ 

      my $self = shift;

  

      # Click on the Search button to search for text

-     assert_and_click("evince_search_button", button => "left", timeout => 30);

+     assert_and_click("gnome_search_button", button => "left", timeout => 30);

  

      # Type *pages*.

      type_very_safely("pages");

@@ -0,0 +1,45 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script will prepare the installation for Software tests:

+ # a) it will switch off blanking the monitor on inactivity

+ # b) it will make serial console writable for normal users.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Switch to console to make necessary settings and

+     # make the serial console writable.

+     # First, we will log onto a user console.

+     send_key("ctrl-alt-f3");

+     wait_still_screen(3);

+     console_login(user => get_var("USER_LOGIN", "test"), password => get_var("USER_PASSWORD", "weakpassword"));

+     # Make serial console writable for normal users.

+     make_serial_writable();

+ 

+     # Use gsettings to disable the power management in the VM.

+     assert_script_run("gsettings set org.gnome.desktop.screensaver idle-activation-enabled false");

+     assert_script_run("gsettings set org.gnome.desktop.session idle-delay 0");

+     assert_script_run("gsettings set org.gnome.settings-daemon.plugins.power idle-dim false");

+ 

+     # Return to the Desktop

+     desktop_vt();

+ 

+     # Start the Software

+     start_gnome_software();

+     # Wait for things to settle a bit before snapshotting

+     wait_still_screen(5);

+ }

+ 

+ sub test_flags {

+     # If this script fails, there is no need to continue. If it passes

+     # it will set up a milestone for the following tests.

+     return {fatal => 1, milestone => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

@@ -0,0 +1,36 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ 

+ # This script checks that the About section can be displayed

+ # in Software.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Open the menu

+     assert_and_click("gnome_burger_menu");

+     wait_still_screen(2);

+ 

+     # Click on the About menu item.

+     assert_and_click("software_menu_about");

+ 

+     # Check that About is shown.

+     assert_screen("software_about");

+ 

+     # The About dialogue also has a Credits tab, click on that.

+     assert_and_click("gnome_credits_button");

+ 

+     # Check that the Credits tab is displayed.

+     assert_screen("software_credits");

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to the last milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

@@ -0,0 +1,56 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can browse through lists of applications.

+ 

+ # As we cannot browse through all of the applications, we will only

+ # browse through three categories and pick one application from

+ # the editor's choice list.

+ # Hopefully, the application will be listed as we cannot move

+ # through the list except with scrolling the wheel, which is

+ # currently not supported by openQA.

+ 

+ sub run {

+     my $self = shift;

+     

+     # Open the Create category.

+     assert_and_click("software_category_create");

+     assert_and_click("software_application_amarok");

+     check_application_information("amarok");

+     # Come back to the main screen

+     while (! check_screen("gnome_search_button")) {

+         assert_and_click("gnome_back_button");

+     }

+ 

+     # Open the Play category.

+     assert_and_click("software_category_work");

+     assert_and_click("software_application_clocks");

+     check_application_information("clocks");

+     # Come back to the main screen

+     while (! check_screen("gnome_search_button")) {

+         assert_and_click("gnome_back_button");

+     }

+ 

+     # Open the Play category.

+     assert_and_click("software_category_play");

+     if (check_screen("software_application_chess")) {

+         click_lastmatch();

+         check_application_information("chess");

+     }

+     else {

+         record_soft_failure("The application was not listed on the first screen.");

+     }

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,46 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can install applications from Flatpaks.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Sometimes, Software crashes after the VM has been rolled back.

+     # If so, restart the application.

+     unless (check_screen("apps_run_software")) {

+         restart_application("software");

+     }

+ 

+     # Find the application

+     find_application("inkscape");

+ 

+     # Install the application using Flatpak

+     install_application("inkscape", "flatpak");

+ 

+     # Check that it has been installed using the GUI tools.

+     check_app_installed("inkscape");

+ 

+     # Start the application using the Software to confirm

+     # it can be opened directly.

+     start_application_via_packagemanager("inkscape");

+ 

+     # Although the GUI tells us that the installation was successful,

+     # we should also check in the background, so we move to the CLI

+     # and perform an easy check there.

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

+     assert_script_run("flatpak list | grep Inkscape");

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to the milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,51 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can install applications from RPMs, verify

+ # the installation and open the application directly from Software.

+ 

+ # We copied the subroutine from the install_multi_rpms.pm and adapted it

+ # to only install one single application.

+ # We have decided to duplicate that code here and not place in the library,

+ # as we will probably not use it anywhere else than this Software test.

+ 

+ 

+ 

+ sub run {

+     my $self = shift;

+ 

+     unless (get_var("SUBVARIANT") eq "Silverblue") {

+ 

+         # Find the application.

+         find_application("inkscape");

+         # Install the application.

+         install_application("inkscape", "rpm");

+         wait_still_screen(10);

+         # Check that it is installed.

+         check_app_installed("inkscape");

+         # Start it from Software.

+         start_application_via_packagemanager("inkscape");

+ 

+         # Confirm that it has been installed using CLI tools.

+         # Switch to console

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

+         # Check that the rpm is installed.

+         assert_script_run("rpm -qa inkscape");

+     }

+     else {

+         record_info("Silverblue override", "This test has been skipped because the functionality is not available on Silverblue.");

+     }

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,58 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can install multiple applications

+ # one after another without waiting for any installation to complete.

+ # In order not to spend time waiting, we will only use RPM as installation

+ # sources in this test.

+ 

+ # As we will perform three consecutive installations, we do not want to

+ # repeat the code, so let's create a subroutine to handle one installation.

+ 

+ # Main part

+ sub run {

+     my $self = shift;

+ 

+     unless (get_var("SUBVARIANT") eq "Silverblue") {

+ 

+         # Sometimes, Software crashes after the VM has been rolled back.

+         # If so, restart the application.

+         unless (check_screen("apps_run_software")) {

+             restart_application("software");

+         }

+         # Perform all installations one after another.

+         find_application("mahjongg");

+         install_application("mahjongg", "rpm");

+         find_application("gvim");

+         install_application("gvim", "rpm");

+         find_application("emacs");

+         install_application("emacs", "rpm");

+ 

+         # Check that the installations have completed successfully.

+         check_app_installed("mahjongg");

+         check_app_installed("gvim");

+         check_app_installed("emacs");

+ 

+         # Also confirm using the CLI method.

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

+         assert_script_run("rpm -qa gnome-mahjongg");

+         assert_script_run("rpm -qa vim-X11");

+         assert_script_run("rpm -qa emacs");

+     }

+     else {

+         record_info("Silverblue override", "The test has been skipped because the functionality is not available on Silverblue.");

+     }

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,58 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ 

+ # With installation tests, we have already proven that Software

+ # can list applications installed with it. This test checks

+ # if applications installed using different methods (DNF)

+ # are also listed correctly.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # We will switch to the console and perform the installation

+     # of the packages.

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

+     script_run("dnf install -y gnome-mahjongg", timeout => 240);

+ 

+     # Sometimes, PackageKit does not know about the changed status

+     # until the computer is restared, or PackageKit is refreshed. 

+     # Let us kill it so that when it gets restarted, it will

+     # be in sync.

+     script_run("pkill gnome-software");

+ 

+     # Return to the GUI

+     desktop_vt();

+     

+     # Sometimes, Software crashes after the VM has been rolled back.

+     # If so, restart the application.

+     unless(check_screen("apps_run_software")) {

+         restart_application("software");

+     }

+ 

+     # Search for the application and confirm its status

+     assert_and_click("gnome_search_button");

+     type_very_safely("mahjongg");

+     send_key("ret");

+     assert_screen("software_mahjongg_found_installed");

+ 

+     # Go to the Installed view to see the list of all installed

+     # applications and find the new application there.

+     assert_and_click("software_installed_button");

+     wait_still_screen(2);

+     # We know that currently this part of the test will fail as there is

+     # a known and reported bug #1950037. 

+     send_key_until_needlematch("software_mahjongg_listed", "tab", 100);

+     record_info("Known bug", "This is due to a long known bug.", result => "ok");

+ 

+ }

+ 

+ sub test_flags {

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,57 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ 

+ # With installation tests, we have already proven that Software

+ # can list applications installed with it. This test checks

+ # if applications installed using different methods (DNF)

+ # are also listed correctly.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # We will switch to the console and perform the installation

+     # of the packages.

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

+     script_run("dnf install -y gnome-mahjongg", timeout => 240);

+ 

+     # Sometimes, PackageKit does not know about the changed status

+     # until the computer is restared, or PackageKit is refreshed.

+     # Let's refresh it by force to make sure we have done all we could.

+     script_run("pkcon refresh force", timeout => 240);

+ 

+     # Return to the GUI

+     desktop_vt();

+     

+     # Sometimes, Software crashes after the VM has been rolled back.

+     # If so, restart the application.

+     unless(check_screen("apps_run_software")) {

+         restart_application("software");

+     }

+ 

+     # Search for the application and confirm its status

+     assert_and_click("gnome_search_button");

+     type_very_safely("mahjongg");

+     send_key("ret");

+     assert_screen("software_mahjongg_found_installed");

+ 

+     # Go to the Installed view to see the list of all installed

+     # applications and find the new application there.

+     assert_and_click("software_installed_button");

+     wait_still_screen(2);

+     # We know that currently this part of the test will fail as there is

+     # a known and reported bug #1950037. 

+     send_key_until_needlematch("software_mahjongg_listed", "tab", 100);

+     record_info("Known bug", "This is due to a long known bug.", result => "ok");

+ 

+ }

+ 

+ sub test_flags {

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,46 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can remove a previously installed Flatpak applications.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Prerequisites for the test.

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

+     script_run("flatpak install -y org.inkscape.Inkscape", timeout => 1000);

+     desktop_vt();

+ 

+     # Sometimes, Software crashes at this point.

+     # If that is the case, restart it.

+     unless (check_screen("apps_run_software", timeout => 10)) {

+         restart_application("software");

+     }

+ 

+     # Remove the application

+     remove_application("inkscape");

+ 

+     # Now, let us check that the application has been correctly installed.

+     # We use the CLI method.

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

+     # Check that the application is not installed.

+     # The following command returns 0 if successful which is interpreted as False

+     # by Perl. The test will pass if the number is different from 0 and therefore

+     # True.

+     unless (script_run("flatpak list | grep Inkscape")) {

+         die("The application is still installed, but it should not be.");

+     }

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,46 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can remove a previously installed RPM applications.

+ 

+ sub run {

+     my $self = shift;

+ 

+     unless (get_var("SUBVARIANT") eq "Silverblue") {

+         #  Test prerequisites.

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

+         script_run("dnf install -y gnome-mahjongg", timeout => 240);

+         script_run("pkcon refresh force", timeout => 240);

+         desktop_vt();

+ 

+         # Sometimes, the Software might crash here. If that happens,

+         # let's restart it.

+         #

+         unless (check_screen("apps_run_software")) {

+             restart_application("software");

+         }

+ 

+         # Remove the application

+         remove_application("mahjongg");

+ 

+         # Check in the CLI that the application has been correctly removed.

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

+         assert_script_run("! rpm -q gnome-mahjongg");

+     }

+     else {

+         record_info("Silverblue override", "This test has been skipped because the functionality is not available on Silverblue.");

+     }

+ }

+ 

+ sub test_flags {

+     # When finish, rollback to milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,109 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script checks that the Software repositories can be shown

+ # and toggled in Software.

+ 

+ # This subroutine does the repository switching.

+ sub toggle_repo_status {

+     # The $status identifies the status we want to end up with.

+     my ($repository, $status) = @_;

+     # If the $status differ from the current status quo, then

+     # we need to do the actually toggle.

+     unless (check_screen("software_repo_$repository-$status")) {

+         # Click on the $needle to toggle the repository

+         assert_and_click($repository);

+         # If we want to switch the repository to "off", then a dialogue appears that asks us

+         # to confirm that we want to disable the repository. Let's click on the disable button.

+         if ($status eq "off") {

+             assert_and_click("software_repo_disable");

+         }

+         # Toggling a repo is an administrative task that needs permissions. When no permission

+         # has been obtained prior to this operation, an authentication dialogue appears

+         # and we need to provide the user password to enable the operation.

+         if (check_screen("auth_required", timeout => 10)) {

+             type_safely(get_var('USER_PASSWORD') || "weakpassword");

+             send_key("ret");

+             # Wait for the screen to get still.

+             wait_still_screen(3);

+         }

+     }

+     # Now, let us check that the repository was successfully toggled by

+     # comparing the repository status against the off needle.

+     # If this time, the statuses still don't match, let's die with a message,

+     # as it seems that the repository cannot be toggled.

+     # However, sometimes it takes a little time before the toggle button

+     # reacts, so wait a bit to give it some time.

+     wait_still_screen(10);

+     # Check the repo status or die

+     if (check_screen("software_repo_$repository-$status")) {

+         die("The repository status does not match the expected situation.");

+     }

+ }

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Sometimes, Software crashes after the VM has been rolled back.

+     # If so, restart the application.

+     unless (check_screen("apps_run_software")) {

+         restart_application("software");

+     }

+ 

+     # Open the menu

+     assert_and_click("gnome_burger_menu");

+     wait_still_screen(2);

+     # Open the Repositories overview

+     assert_and_click("software_menu_repositories");

+     # Check that Repositories are shown

+     assert_screen("software_repositories");

+     wait_still_screen(5);

+ 

+     # Find the Fedora Test Updates repository, switch to the switcher button

+     # and toggle the repo to ON.

+     send_key_until_needlematch("software_repo_test_updates", 'tab');

+ 

+     toggle_repo_status("software_repo_test_updates", "on");

+ 

+     # Find Fedora Modular repository, switch to the switcher button

+     # and toggle the repo to OFF.

+     send_key_until_needlematch("software_repo_fedora_modular", 'tab');

+     toggle_repo_status("software_repo_fedora_modular", "off");

+ 

+     # Switch to the root console to check if the repositories were

+     # correctly switched off and on.

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

+     # Check that updates testing is switched on.

+     # Mind that the script_run returns the exit code, which is interpreted by Perl

+     # in an opposite way, therefore if the exit code is 1, we expect True in Perl.

+     if (script_run("dnf repolist | grep updates-testing")) {

+         die("The updates testing repository is not switched on, but should be.");

+     }

+     # On Rawhide, the installation actually includes the fedora-modular

+     # as well as the rawhide-modular repository and the one that gets

+     # switched off is the rawhide-modular. Therefore, we need to distinguish

+     # according to the version.

+     my $version = "fedora";

+     if (get_var('VERSION') eq "Rawhide") {

+         $version = "rawhide";

+         diag("VERSION: $version");

+     }

+     script_run("dnf repolist");

+     unless (script_run("dnf repolist | grep $version-modular")) {

+         die("The Modular repository is not switched off, but should be.");

+     }

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

+ 

@@ -0,0 +1,40 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software can browse through various applications.

+ 

+ # The concept of this is to look for applications using the Search function.

+ # We are not going to check for metadata anymore, as this would require

+ # another set of needles.

+ 

+ sub run {

+     my $self = shift;

+     

+     # Find KTurtle and check for its details,

+     # use a keyword.

+     find_application("educational");

+     assert_and_click("gnome_back_button");

+ 

+     # Find IDLE3 and check for its details,

+     # use a name.

+     find_application("idle3");

+     assert_and_click("gnome_back_button");

+ 

+     # Find Midori and check for its details

+     # use a category.

+     find_application("browser");

+     assert_and_click("gnome_back_button");

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,46 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script tests if Software shows some details on the application screen.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Sometimes, Software crashes after the VM has been rolled back.

+     # If so, restart the application.

+     unless (check_screen("apps_run_software")) {

+         restart_application("software");

+     }

+ 

+     #  Search for the application and navigate to its screen.

+     assert_and_click("gnome_search_button");

+     wait_still_screen(2);

+     type_safely("mahjongg");

+     assert_and_click("software_mahjongg-found");

+     wait_still_screen(2);

+     assert_screen("software_mahjongg-install_pane");

+ 

+     # Check various info.

+     assert_and_click("software_mahjongg_name");

+     assert_screen("software_mahjongg_icon");

+     assert_screen("software_mahjongg_slide");

+     assert_screen("software_mahjongg_description");

+ 

+     # Hit several down arrows to reach more informations.

+     send_key_until_needlematch("software_mahjongg_place", "down");

+     # Check for application safety.

+     assert_and_click("software_mahjongg_safety");

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

+ 

@@ -0,0 +1,52 @@ 

+ use base "installedtest";

+ use strict;

+ use testapi;

+ use utils;

+ use desktoptools;

+ 

+ # This script checks that automatic updates can be switched on.

+ 

+ sub run {

+     my $self = shift;

+ 

+     # Sometimes, Software crashes after the VM has been rolled back.

+     # If so, restart the application.

+     unless (check_screen("apps_run_software")) {

+         restart_application("software");

+     }

+ 

+ 

+     # Open the menu

+     assert_and_click("gnome_burger_menu");

+     wait_still_screen(2);

+ 

+     # Open the Update selections information

+     assert_and_click("software_update_preferences");

+     wait_still_screen(2);

+ 

+     # Disable automatic updates and check that the status changes

+     assert_and_click("software_automatic_updates");

+     assert_screen("software_automatic_disabled");

+ 

+     # Disable updates notifications and check that the status changes

+     assert_and_click("software_update_notifications");

+     assert_screen("software_notifications_disabled");

+ 

+     # Switch to console to run background checks, too.

+     send_key("ctrl-alt-f3");

+     sleep 5;

+     console_login(user => "test", password => get_var("USER_PASSWORD") || "weakpassword");

+     # Check that the settings above was switched off.

+     validate_script_output("gsettings get org.gnome.software download-updates", sub { m/false/ });

+     validate_script_output("gsettings get org.gnome.software download-updates-notify", sub { m/false/ });

+ 

+ }

+ 

+ sub test_flags {

+     # When finished, rollback to milestone.

+     return {always_rollback => 1};

+ }

+ 

+ 1;

+ 

+ # vim: set sw=4 et:

@@ -32,8 +32,6 @@ 

          wait_still_screen 2;

      }

      else {

-         # this launches GNOME Software on GNOME, dunno for any other

-         # desktop yet

          sleep 3;

          menu_launch_type('update');

      }

This PR brings a series of scripts to test the functionality of Gnome Software.

Build succeeded.

This seems like a good start, I kinda would like if we could wait to merge it until the criteria revision is agreed on and merged, though, then we will want to implement everything the criteria cover. This doesn't cover everything in the current draft, I don't think.

1 new commit added

  • Add waiting times to make more defensive.
3 years ago

Build succeeded.

@lruzicka the "new criterion proposal: Graphical package managers (take #2)" thread on test@ - here.

I see. I will go through them and try to implement them into the suite.

rebased onto 02594ff2eef0d4df4ffb5d07fbfe58f4cef60b9a

3 years ago

Build succeeded.

So, I have gone through the proposed criteria and put the current status to them. This should be a roadmap for further implementation.

  • install software - this is implemented for RPM and Flatpak
  • update software - this could be skipped here, as there is another update test available
  • remove software - to be implemented
  • List locally-installed software coming from the official Fedora
    repositories - this is implemented as part of installation tests
  • List available software - partly implemented, to be covered more
  • Display metadata relevant to the selected software (e.g. the description,
    screenshots, the size) - to be implemented
  • Start the selected installed software - to be implemented
  • Configure software sources by enabling/disabling pre-defined official
    repositories and then adjust the available software pool accordingly - partly implemented in repositories.pm, could be enhanced
  • Notify the user when system updates are available (taking into account
    the intended frequency of such notifications) - could be skipped, as this is covered by the update test.

The following must hold true:

  • mutltiple operations - not implemented yet
  • The displayed state of software or software sources must not differ from
    their actual state. (E.g. an RPM package must not be shown as installed
    when it is not, a repository must not be shown as disabled or missing when
    it is enabled, etc). - implemented
  • Usual GUI interactivity must not break operations covered by this
    criterion - not implemented, but could be easily
  • The package manager must never make the system enter an inconsistent or
    unbootable state. - I would skip this as this will be difficult to test and we will get enough data from the community if something like this happens.

1 new commit added

  • Make little changes.
3 years ago

Build succeeded.

1 new commit added

  • Enhance this method.
3 years ago

1 new commit added

  • Update the way serial is writable.
3 years ago

Build succeeded.

1 new commit added

  • Change make_console_writable
3 years ago

1 new commit added

  • Use my
3 years ago

Build succeeded.

1 new commit added

  • lib/utils.pm
3 years ago

1 new commit added

  • Change the way we check for results in install_flatpak.
3 years ago

Build succeeded.

1 new commit added

  • Change test to Inkscape.
3 years ago

Build succeeded.

1 new commit added

  • Change way to look if app installed.
3 years ago

Build succeeded.

1 new commit added

  • Rename needle tag.
3 years ago

Build succeeded.

1 new commit added

  • Increase waiting time.
3 years ago

Build succeeded.

1 new commit added

  • Change the way we check if package installed.
3 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 4a9bcecb02c2202317b6ec31d0e559cd58f84770

3 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

15 new commits added

  • Change the way we check if package installed.
  • Increase waiting time.
  • Rename needle tag.
  • Change way to look if app installed.
  • Change test to Inkscape.
  • Change the way we check for results in install_flatpak.
  • Add waiting time to let VM settle.
  • lib/utils.pm
  • Use my
  • Change make_console_writable
  • Update the way serial is writable.
  • Enhance this method.
  • Make little changes.
  • Add waiting times to make more defensive.
  • Create a test suite for Gnome Software.
3 years ago

Build succeeded.

I think it might be better to do prep actions like this from a VT; it's more reliable than launching a graphical terminal and becoming root in it.

similarly here, this is just toggling some dconf/gsettings key, so we could do that much more reliably with gsettings at a console. See things in lib/utils.pm and desktop_notifications.pm that do gsettings set commands for examples. The key to set is probably org.gnome.settings-daemon.plugins.power idle-dim.

we already have this needle as gnome_software_welcome, no need to duplicate it. also, as per later, you can use click_lastmatch, no need to redo the assertion.

is this the same as the already-existing evince_search_button needle? If so, maybe rename that, move it to a more generic directory, and update the evince tests, instead of creating a duplicate needle.

you can just do click_lastmatch, you don't need to re-do the assertion.

I think this is identical to evince_about_credits (eog's is the same, only dark themed). It seems to be a standard layout shared between many apps. So maybe we could rename the evince needle to something more generic and move it to a more generic location, then re-use it here.

wait, what? this looks weird. what you have here is an else die for the if (check_screen("software_sources_available", timeout => 5)) above. For one thing, that's weird - if what we do when a check_screen fails is die, that seems like the check_screen should be an assert_screen. For another thing, the comment reads like this is intended to be reached if the check_screen("software_sources_available_flatpak"); above fails, but it's not. That check_screen is doing nothing at all, in fact - it's nonsensical to use check_screen but not check the return value.

basically this whole block looks weird, please look at it again and redo it to make more sense. :D

we already have a gnome_button_open which seems identical. here, and elsewhere where this new needle is used, please use that instead and drop this new needle.

the comment says "click", but this isn't clicking.

again, I think this is safer done from a VT.

again, I think using a VT is better here.

this seems like it could be done much more simply. uh, off the top of my head: my $result = check_screen("software_repository_status_off"); $status eq "off" ? return $result : return !$result;

Relies on a slightly hinky bit of perl behaviour (negating 0 and 1), but I think it does the right thing. You could do it a few other ways, but this one seems a bit convoluted for what it's ultimately doing.

why is this a milestone, and why is it not always_rollback? do any of the subsequent modules need this one to have been completed before they run? if not, it would seem safer to make this not milestone, but make it always_rollback. that would save wasting time making a snapshot, and cause the state for modules that run after this to be more consistent no matter what happens in this module.

why is this fatal? why is it a milestone?

@lruzicka ping? Just making sure we don't forget about this :)

Hey, thanks for letting me know. I will go through the comments.

@lruzicka ping again, please remember we have this to polish before getting into new PRs...

@lruzicka ping again, please remember we have this to polish before getting into new PRs...

On my way :)

rebased onto c72cfececc2f277e89e71038bbcacef4d7f22afe

2 years ago

1 new commit added

  • Use console for preparatory works and delete orphaned needles.
2 years ago

1 new commit added

  • Update about.pm and delete useless needles.
2 years ago

1 new commit added

  • Replace needles.
2 years ago

1 new commit added

  • Update after review
2 years ago

This is still in progress.

1 new commit added

  • Make the suite work again.
2 years ago

Build succeeded.

this seems like it could be done much more simply. uh, off the top of my head: my $result = check_screen("software_repository_status_off"); $status eq "off" ? return $result : return !$result;

Relies on a slightly hinky bit of perl behaviour (negating 0 and 1), but I think it does the right thing. You could do it a few other ways, but this one seems a bit convoluted for what it's ultimately doing.

I am sorry, but this does not work. The way it is written is magical, but it does not cover half of the cases. The routine checks whether the repository has certain status (based on the displayed GUI), so it needs to be able to let us know if:

  1. The repository is OFF (needle available) and that it is expected.
  2. The repository is ON (needle not available) and that it is expected.
  3. The repository is in a state which is not expected.

The suggested variant did not cover when the repository was on and when it was expected, it took me some time (when it started failing) to discover the condition was to blame. Finally, I rewrote that using the if, elsif, else strategy.

1 new commit added

  • Increase timeout
2 years ago

Build succeeded.

rebased onto 5a0bd789250b7153129a5ca8edf784f2cc82769b

2 years ago

rebased onto 41fe3017409ceec7c02e36264157b54f7e3890a9

2 years ago

Build succeeded.

So, I think this is better now and doing the same stuff as before. I will add more functionality to it later as discussed somewhere above.

1 new commit added

  • Add installation to prepare future removals.
2 years ago

rebased onto 2e421ceb4b793ad303233a2606eae691f752564f

2 years ago

Build succeeded.

1 new commit added

  • Add waittime.
2 years ago

Build succeeded.

Build succeeded.

this seems like it could be done much more simply. uh, off the top of my head: my $result = check_screen("software_repository_status_off"); $status eq "off" ? return $result : return !$result;

Relies on a slightly hinky bit of perl behaviour (negating 0 and 1), but I think it does the right thing. You could do it a few other ways, but this one seems a bit convoluted for what it's ultimately doing.

I am sorry, but this does not work. The way it is written is magical, but it does not cover half of the cases. The routine checks whether the repository has certain status (based on the displayed GUI), so it needs to be able to let us know if:

  1. The repository is OFF (needle available) and that it is expected.
  2. The repository is ON (needle not available) and that it is expected.
  3. The repository is in a state which is not expected.

The suggested variant did not cover when the repository was on and when it was expected, it took me some time (when it started failing) to discover the condition was to blame. Finally, I rewrote that using the if, elsif, else strategy.

I didn't test it, but it is intended to cover the "expected on" case. In that case, we return the opposite of $result - that's what the ternary is for.

The logic of my suggestion is basically this: first we do the check_screen and get the result as $result, as your code does. Then we check $status. If it's "off", we return $result, i.e., "positive" if the needle matched, "negative" if it didn't. If it's anything else, we return !$result, i.e., "positive" if the needle didn't match, negative if it did match.

Having just checked the os-autoinst source, I can see one problem with my suggestion: check_screen doesn't return 1 or 0, it returns the "matched needle" (not sure what that means exactly - the tag as a string? Some kind of object ref? Anyway...) on a match, and undef on no match. So the negation logic in my suggestion probably doesn't work. That should be fixable, though.

Here's a silly test script with both versions in it:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/perl

sub check_screen {
    #return "someneedle";
    return undef;
}

sub check_repo_status_lukas {
    # The $status is what we want to check and the $result is what we
    # get by inspecting the needle.
    my $status = shift;
    # The $result will be defined when the off needle is found.
    my $result = check_screen("software_repository_status_off");
    # If $status is off then return $result (see line above) otherwise
    # return the opposite of $result.
    if ($status eq "off" && $result) {
        print("Repository status confirmed: OFF\n");
        return 1;
    }
    elsif ($status ne "off" && !$result) {
        print("Repository status confirmed: ON\n");
        return 1;
    }
    else {
        print("Repository status not confirmed.\n");
        return 0;
    }
}

sub check_repo_status_adam {
    my $status = shift;
    my $result = check_screen("software_repository_status_off");
    $status eq "off" ? return $result : return !$result;
}


check_repo_status_lukas("off") ? print "Lukas off: true\n" : print "Lukas off: false\n";
check_repo_status_adam("off") ? print "Adam off: true\n" : print "Adam off: false\n";
check_repo_status_lukas("on") ? print "Lukas on: true\n" : print "Lukas on: false\n";
check_repo_status_adam("on") ? print "Adam on: true\n" : print "Adam on: false\n";

You can flip between testing a check_screen that 'matches' or 'doesn't match' by changing which line of check_screen is commented out. For me, both pairs of results are identical for both paths through check_screen. If there's a scenario where my check gives a different result from yours, can you add to the test script to illustrate it?

Note the two don't strictly return the same values - yours returns 1 or 0, mine can return undef, "someneedle", 1 (which is the inversion of undef) or perl's "special false-y value" (which is the inversion of "someneedle" and looks like "" if treated as a string or 0 if treated as a number). But since your code only ever uses the return value for true or false testing, they seem to be functionally identical.

what does this mean? we use gsettings fine elsewhere, e.g. in desktop_notifications. What's not reliable about it here?

we do not need a new needle here. we use desktop_package_tool_update in the Software startstop test, and we can use that here too.

why do we do this? it's not immediately obvious. it kinda reads like you want to check that the app shows up as installed on this list, but we don't do that? we just click 'back', then open the list of installed apps, then...switch to a console? it seems like either we should check inkspace is shown as installed, or we could just skip the 'back' and 'software_application_installed' clicks?

same comment as for flatpak. also, since this is almost identical between this test and the flatpak test - could we maybe make it a shared function that we just pass the name of the app and the type (flatpak or rpm) to?

A final thought on the check_repo_status thing: it does occur to me that it'll behave slightly oddly if the GNOME UI changes slightly so the "off" needle doesn't match when the toggle actually is off. Currently, both your version and mine treat "off not matched" as meaning "on". This saves one needle, but perhaps at the cost of slightly more complicated code, and a not-entirely-obvious failure case.

Maybe we could just add the "on" needle and simplify the code somewhat? The cost of that is we have two needles not one to update when the UI changes, but that's not a huge cost...

1 new commit added

  • Add removal test.
2 years ago

Build succeeded.

2 new commits added

  • Add needles for the tests.
  • Add new tests.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Update needle to remove version number.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Change routine.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Change routine.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Wait time.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Wait time.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Move code into subroutines.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add multi install test.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add step back.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add step back.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Prolong send keys
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Start the application after installation.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add wait time.
2 years ago

1 new commit added

  • Add needles to support tests.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Change needle.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 0dcd9e9e8b7adba01aa8d40b20bb25302926eabe

2 years ago

rebased onto af8fbaeee58ae57d8c7be8da94e92c9d409e3580

2 years ago

Build succeeded.

rebased onto 6205bedfda21d3313a1fe5543392a5db450fe0d2

2 years ago

rebased onto fc7cb7c6f930e9302ffb3e3d211580dede835843

2 years ago

rebased onto ec0e153f8f8f0d8c1362be238c7db8cf5beef469

2 years ago

Build succeeded.

rebased onto 838998e49025ab9d07e9e5c4f0cc5f84f4039468

2 years ago

Build succeeded.

rebased onto 872ac10f961ffded3e284508940aade1f8fdd6e3

2 years ago

Build succeeded.

So, I guess, that most of the requirements are now covered and the tests are passing except for list_installed which is failing due to a known bug.

Build succeeded.

doesn't this mean that on the CLI path, we exit the console at this point? is that desired?

the part above is basically duplicated with both desktop_update_graphical and apps_startstop/gnome/software.pm. Could we maybe factor all these 'start up Software and get rid of the welcome screen' paths into a single one?

also, I don't think you actually addressed all my comments from last time, e.g. the way large chunks of the rpm and flatpak tests are identical and could probably be factored out into shared functions?

what does this mean? we use gsettings fine elsewhere, e.g. in desktop_notifications. What's not reliable about it here?

I am sorry to having overseen a bunch of your comments, but I am getting lost in all that comments that are interrupted by passed and failed Zuul tests and that become unconnected to the code whenever there is a change.

Anyway, the problem that I am seeing is that I could not update the variable using gsettings from a root console because whenever I acquired the user accound using both su or su -l, I could not manipulate the settings and it resulted in an error message, see the picture link.

dconf problems after su

However, I realized that tweaking this is possible when the user logs in before root. So I could acquire the root console instead. I will try it.

Also, it looks like these are needed to switch it off:

gsettings set org.gnome.desktop.screensaver idle-activation-enabled false

gsettings set org.gnome.desktop.session idle-delay 0

gsettings set org.gnome.settings-daemon.plugins.power idle-dim false

1 new commit added

  • Unify the search buttons for Evince and Software.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

2 new commits added

  • Unify the search buttons for Evince and Software.
  • Create a test suite for Gnome Software.
2 years ago

Build succeeded.

1 new commit added

  • Introduce a subroutine to handle Software welcome screen
2 years ago

Build succeeded.

3 new commits added

  • Introduce a subroutine to start Software.
  • Unify the search buttons for Evince and Software.
  • Create a test suite for Gnome Software.
2 years ago

3 new commits added

  • Introduce a subroutine to start Software.
  • Unify the search buttons for Evince and Software.
  • Create a test suite for Gnome Software.
2 years ago

Build succeeded.

1 new commit added

  • Unify starting routine and use it.
2 years ago

the part above is basically duplicated with both desktop_update_graphical and apps_startstop/gnome/software.pm. Could we maybe factor all these 'start up Software and get rid of the welcome screen' paths into a single one?

Well, I created a new subroutine in lib/utils.pm that start the Software, deals with the welcome dialogue and checks that the application has started.

I have used it in the aaa_setup.pm here and in the desktop_update_graphical, but I am reluctant to use it the startstop test, because these tests are using the start_with_launcher subroutine that actually clicks in the menu and does not simply start the application. I did not want to break that functionality, but I think that starting the application using the super key and typing is better anywhere else.

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

we do not need a new needle here. we use desktop_package_tool_update in the Software startstop test, and we can use that here too.

I am not sure if the desktop_package_tool_update was used to identify the running status quo of the application, when all other applications are using something like apps_run_$application. I believe we should keep it that way to make things stay similar. So, I made the starting subroutines to use the apps_run_software needle for clarity, but we need to keep the "Update" needle for the Update test where it is necessary.

If you terribly want all tests to use the update needle, this could be changed, of course.

1 new commit added

  • Move code to external subroutines.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Fix typo.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Use external subroutines on flatpak tests.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Fix another typo
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add different time for installation check.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Move code into a subroutine for removals
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Restart in case of failure
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Export function.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Restart in case of failure.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add new needles.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Use external subroutines.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Make the subroutine be able to leave Installation tab.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Restart if crashes.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Change application
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Check var behaves differently now, change check.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add refresh command.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add timeout.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Use a correct package name.
2 years ago

1 new commit added

  • Add needles to support changes.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

2 new commits added

  • Add method to restart application.
  • Make application restartable.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

1 new commit added

  • Add a needle to compensate for failure.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 45391f2828311d566d0b6888d8a3d744ac0484be

2 years ago

Build succeeded.

1 new commit added

  • Add correct Inkscape needles.
2 years ago

rebased onto f5779a3d20d2ad5b46c1cdf4cf3ff8b66a49783c

2 years ago

rebased onto 4345749794ce77b1dd3bbcf8cb11b13543f62e67

2 years ago

Build succeeded.

I guess this is meant to be timeout => $wait_time?

wouldn't it be easier to just die if rpm -q gnome-mahjongg works? Or, even better, do assert_script_run '! rpm -q gnome-mahjongg;?

  • This adds a gnome_open_button needle...but we already have gnome_button_open. Please use that instead.
  • There's a list_installed.pm.mask. This should either be renamed list_installed.pm (if it's meant to be used) or removed, I guess.
  • Why do we use different apps for the Flatpak 'install' and 'remove' tests? Doesn't this mean we need more needles than we would if we just used the same app for both?
  • find_repo and check_repo_status really only 'do' a single action each, now. Arguably this means there's no benefit to having them. It would be reasonable to just inline the thing they do everywhere they're used. e.g. change all find_repo 'foo'; calls to send_key_until_needlematch('foo', 'tab');, and all check_repo_status 'foo', 'status'; calls to assert_screen 'software_repo_foo-status'; or `check_screen 'software_repo_foo-status';

Thanks, looks better now! Few more notes. :)

1 new commit added

  • Use variable instead of fixed time, change to gnome_button_open!
2 years ago

1 new commit added

  • Use different type of assertion.
2 years ago

Build succeeded.

1 new commit added

  • Use Inkscape instead of Chess to save some needles.
2 years ago

1 new commit added

  • Update check-needles.py to not allow chess needles, delete them.
2 years ago

Build succeeded.

1 new commit added

  • Delete useless subroutines, use code directly.
2 years ago

Build succeeded.

Build succeeded.

1 new commit added

  • Renew failing needle.
2 years ago

rebased onto a81907759102ec24ef69c90d478b2b3815ba120b

2 years ago

Build succeeded.

1 new commit added

  • mend
2 years ago

rebased onto 32abedbe955bfff44a103bdff429adde1db5172b

2 years ago

Build succeeded.

So, I incorporated the requested changes except for one:

The list_installed.pm.mask is a test that is currently failing because of a reported bug. I hope that it will be ok when the bug is fixed, but until then, it would keep failing all the time. Therefore I have masked it (it will not be loaded) but it will be immediately available, when the functionality is there. I thought that it is a good idea.

we do not need a new needle here. we use desktop_package_tool_update in the Software startstop test, and we can use that here too.

I am not sure if the desktop_package_tool_update was used to identify the running status quo of the application, when all other applications are using something like apps_run_$application. I believe we should keep it that way to make things stay similar. So, I made the starting subroutines to use the apps_run_software needle for clarity, but we need to keep the "Update" needle for the Update test where it is necessary.

If you terribly want all tests to use the update needle, this could be changed, of course.

I would still prefer we use desktop_package_tool_update here. It will always match on the 'start page' of Software unless the UI is completely re-designed, we've been doing it this way for years, and changing it actually broke F35 update tests because there's no 'apps_run_software' needle that matches on F35:

https://openqa.stg.fedoraproject.org/tests/1887647#step/desktop_update_graphical/23

adding all these new tests is adding a lot of needles and I do want to keep the maintenance burden down as much as is practical. The next time GNOME twiddle their fonts or something we're going to have hundreds of needles to retake. Every little bit to cut that number down helps.

There are some other 'application run' tests where we do the same, too. It's not entirely "inconsistent". If you really want the tag name to be different in the 'application run' tests we could just add the apps_run_software tag to the desktop_package_tool_update needles.

rebased onto 8df0fae43f2294a937b3dac58f842fc177837c12

2 years ago

Build succeeded.

rebased onto f0182a9caf99fca01caaf8858b1df3ccb2e0d349

2 years ago

Build succeeded.

rebased onto 02fc8eed06966892ff9f4044a66cbcb140ffb754

2 years ago

Build succeeded.

So I pushed my own attempt to clean up the 'start Software' stuff. Of note, desktop_update_graphical was actually written to handle a case where GNOME shows a "Software catalog is loading..." screen (and nothing else) for a long time at start up. So at first I wanted to add that handling to start_gnome_software(). But I looked around at recent test results, and that does not seem to happen in any of them any more. So I figured we can try just leaving that out to simplify things.

I made the function use menu_launch_type() - it was reinventing it - and made the whole 'check for the welcome screen and get rid of it if it shows up' thing more efficient. I also made the actual 'run the app' part optional, so we can use the 'handle the welcome screen' logic from the app startstop test but let it launch the app differently. And I dropped the apps_run_software needle but added the tag to the desktop_package_tool_update needles.

We can actually get rid of the 'handle the welcome screen' stuff when F35 goes EOL; the welcome screen has been removed upstream since F36.

rebased onto 9e31c56ddc29aeeeb942a4a723e9433524e7b548

2 years ago

Build succeeded.

Sorry, one other thing I forgot to mention yesterday: I feel like most of the added subs (except for start_gnome_software) are kind of special purpose, they're not generally usable things, which is what should be in 'utils'. I think it might be better to put these in their own new lib, or maybe add them to lib/packagetest.pm. Obviously the tests that use them should then import the other lib as well as utils.

rebased onto ca8f92740e96579c4d4489e1e97f87cd4bc319ce

2 years ago

Build succeeded.

rebased onto b65159c5aa062ad82f5e20c321ec945b05822e7a

2 years ago

Build succeeded.

rebased onto d949096055eb3ff875322e8a1b54c8ae706a657d

2 years ago

Build succeeded.

rebased onto 5dd2d1287fb454b11899cf723b4882013f0c8584

2 years ago

Build succeeded.

rebased onto 5a4eeee0ca9af9c26f9a60d0cb96db2a17285e8f

2 years ago

Build succeeded.

rebased onto 03126341743e80ff10cf807643c70ebbe40f7f47

2 years ago

Build succeeded.

Sorry, one other thing I forgot to mention yesterday: I feel like most of the added subs (except for start_gnome_software) are kind of special purpose, they're not generally usable things, which is what should be in 'utils'. I think it might be better to put these in their own new lib, or maybe add them to lib/packagetest.pm. Obviously the tests that use them should then import the other lib as well as utils.

Ok, I will move it.

1 new commit added

  • Move functions into a specific library.
2 years ago

1 new commit added

  • Use utils in the package.
2 years ago

Build succeeded.

rebased onto c872ddab1c8362a2dd0fb2074d8df341caf57858

2 years ago

Build succeeded.

rebased onto f0e9adcdc702b8256b6bb46423a9da063671f1ba

2 years ago

We needed a new needle variant for Rawhide, so I've added that. Still, if you look at the openQA results from today's Rawhide, there are two obvious problems:

  • All the RPM tests fail on Silverblue, not surprisingly
  • aaa_setup fails on Workstation upgrade, because the user test is not an admin, so sudo -i doesn't work. This is I guess because we start from a createhdds-built base image, not an install_default_upload-created image. Oddly, looking at the pykickstart docs, there isn't an obvious way for the kickstart to say the user should be an admin; maybe just including the user in the wheel group would be enough, but I'm not sure.

Build succeeded.

rebased onto 8813979a8a00a3539fe65041c6898016553e4919

2 years ago

Build succeeded.

We needed a new needle variant for Rawhide, so I've added that. Still, if you look at the openQA results from today's Rawhide, there are two obvious problems:

  • All the RPM tests fail on Silverblue, not surprisingly
  • aaa_setup fails on Workstation upgrade, because the user test is not an admin, so sudo -i doesn't work. This is I guess because we start from a createhdds-built base image, not an install_default_upload-created image. Oddly, looking at the pykickstart docs, there isn't an obvious way for the kickstart to say the user should be an admin; maybe just including the user in the wheel group would be enough, but I'm not sure.

Thanks for the remarks. I will put a condition in those rpm tests to make them skip on Silverblue. Also, I will try to fix the admin thing.

1 new commit added

  • Pass rpm tests on Silverblue and record info about it.
2 years ago

Build succeeded.

  • aaa_setup fails on Workstation upgrade, because the user test is not an admin, so sudo -i doesn't work. This is I guess because we start from a createhdds-built base image, not an install_default_upload-created image. Oddly, looking at the pykickstart docs, there isn't an obvious way for the kickstart to say the user should be an admin; maybe just including the user in the wheel group would be enough, but I'm not sure.

I was thinking about this. Why I need that sudo is because I need to make the serial console to be writable for the test user, otherwise the assertion commands will never get confirmation on the serial console.

I could think about the following:

  • to add the user in the wheel group should be sufficient for sudo, so if that can be done via kickstart, we might do it.
  • also, the serial console could be made writable in the kickstart
  • when ROOT_PASSWORD is set, then become_root does not use sudo, but su - as it is uses the root account. If the root account is not blocked on those images, it could suffice if we only set the ROOT_PASSWORD in the upgrade tests. I looked and it seems not to be set, at the moment.

Which one do you like best?

rebased onto 8b2b6eb6ab8438ea5a5ec2b404a458f4ac0f6320

2 years ago

Build succeeded.

Few things:

  • The adjustment to split the subs out was a bit wrong. You left all the exports in utils.pm, and you moved start_gnome_software to the new library even though I suggested leaving it in utils.pm because it's more generally usable; that broke desktop_update_graphical because it uses start_gnome_software and you didn't make it import the new lib. I've fixed this by moving start_gnome_software back to utils.pm and fixing up the exports.
  • Your way of handling the 'Silverblue can't do RPMs' thing is OK, but I had a different idea. My idea was to combine the RPM and Flatpak tests for any given operation into one module, and have the RPM portion skipped on Silverblue. That way we don't have modules that are doing nothing, and we could also then factor out the code reuse to a subroutine, because the pairs of similar operations would be in the same file so they could use a subroutine in that same file - it solves the problem of 'where do you put these subroutines'. WDYT?
  • On the serial console thing, uh, hmm. I'm not sure. I guess let's try the 'add the user to the wheel group in the kickstart' thing first. I'll try and do that soon.

rebased onto f1122cadb4d88806a500827541836ea0e0689296

2 years ago

rebased onto 249f87061280f3ae978df569dddbf13dc171a7d3

2 years ago

rebased onto 1948c166f4f204cb690a534d1e846339428e987e

2 years ago

Build succeeded.

  • Your way of handling the 'Silverblue can't do RPMs' thing is OK, but I had a different idea. My idea was to combine the RPM and Flatpak tests for any given operation into one module, and have the RPM portion skipped on Silverblue. That way we don't have modules that are doing nothing, and we could also then factor out the code reuse to a subroutine, because the pairs of similar operations would be in the same file so they could use a subroutine in that same file - it solves the problem of 'where do you put these subroutines'. WDYT?

But in that case, the installation will become a part of one script, i.e. install_flatpak, install_multi_rpm and install_rpm will be merged, otherwise there is no way how I could utilize a subroutine for it. And I will not be able to see immediately which one has actually failed. Now, I can see it on the first glance. The same might hold true for the removal scripts.

I understand that you want deduplication wherever possible, but does it have to be at all cost?

well, the deduplication is more of a side bonus. the main point is not to have test modules that do nothing at all on one flavor, but always show as 'passed'. Your point is valid too, though. It's a bit of a subjective choice, I guess.

rebased onto 6568e329b7b44ccdcae238fb004810d0d8c6cca9

2 years ago

Build succeeded.

rebased onto 8465dec6ce561ac17c0bb0601c0a218ce0872131

2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 6568e329b7b44ccdcae238fb004810d0d8c6cca9

2 years ago

rebased onto 47813b6a132830d428d5bbd67e02c809c9ea1c18

2 years ago

Build succeeded.

rebased onto 39bec1270713f07dad7cadc2ee4d671f5b2a9c6d

2 years ago

Build succeeded.

rebased onto a0b2bb7e4687eb4d982a43ded013bfa45dc2b5b1

2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 73badde1ea91dc5ab28e1f081584804050047095

2 years ago

Build succeeded.

The repositories test failed when run on upgrade today:
https://openqa.stg.fedoraproject.org/tests/1910465#step/repositories/28
the needle is expecting 'kojipkgs.fedoraproject.org' to be on the second line, but for some reason it isn't. I don't want to try and fix this as I'm not clear on the needle situation there - I'm not sure why it's so tall, and I'm not sure why it includes the arch (won't that break it when running on other arches?)

I also see a couple of failures in remove_rpm, but they are because of a real bug, not a problem in the test - Software is crashing. https://gitlab.gnome.org/GNOME/libadwaita/-/issues/453 seems to be the crash.

1 new commit added

  • Fix a needle area to remove .org
2 years ago

Build succeeded.

The repositories test failed when run on upgrade today:
https://openqa.stg.fedoraproject.org/tests/1910465#step/repositories/28
the needle is expecting 'kojipkgs.fedoraproject.org' to be on the second line, but for some reason it isn't. I don't want to try and fix this as I'm not clear on the needle situation there - I'm not sure why it's so tall, and I'm not sure why it includes the arch (won't that break it when running on other arches?)

The situation is somehow stupid. I start to believe that I should probably think about something different to check the repositories. The needles are very fragile, because the repository names look very similar so it is difficult to distinguish between them based on one needle area, but at the same time, I cannot add another area, because openQA could take it from another line.

Also, the switchers look the same, so they need to be part of that needle area which makes it even more complicated.

Anyway, I fixed the needle, so the test is no longer failing on it, but it started to fail on the fact that dnf repolist sees the repo as on although the screenshots show them as off. I will need to investigate on this.

1 new commit added

  • Fix the Rawhide modular repository error.
2 years ago

Build succeeded.

@lruzicka I wonder, could we use keyboard navigation a bit more here?

I think we should be able to use the effects of hitting tab a bit more than at present. Rather than using it to move the dialog till the repo we want is visible, we could have the repo needles match on the blue surround that they get once hitting tab makes them active. Then once we match the repo, hit tab once more to make the toggle for that repo active, check its state using a needle that again includes the blue surround so it won't match any other toggle.

Maybe give that a shot?

rebased onto bc89c59c707641034d3f2e3fd25c3ff5c6344629

2 years ago

Build succeeded.

rebased onto cb0c59438bf22aa41497ff725ebd94576cbde218

2 years ago

Build succeeded.

1 new commit added

  • Add prints and commands to see the VM situation.
2 years ago

Build succeeded.

rebased onto 9c8e6e09d42f1ce6e34068e8992d6435732512c2

2 years ago

Build succeeded.

rebased onto 38b213e383b0d33b212135f7e016448bd81cd2be

2 years ago

Build succeeded.

rebased onto 4a86b5cd359cf461f7b46adbec560979aaa37c89

2 years ago

Build succeeded.

rebased onto e0a281f8760acf8d25ad6d23b3daff33df745187

2 years ago

I rebased this on main with the perltidy checks, squashed the commits down, and applied all the fixes required by perltidy.

Build succeeded.

rebased onto ffb1eb01c00a18c08d70156f9bbbbfba1606a940

2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

2 new commits added

  • Add prints and commands to see the VM situation.
  • Create a test suite for Gnome Software.
2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto c83ec3ac5946c45aeac3f971aba6701afb4bfc31

2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

@lruzicka the tox failure here indicates there's a badly-formed needle JSON file, I think.

rebased onto 14423b1f051aaf56b8822451f7708f318dd1c6df

2 years ago

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

rebased onto 3439359

2 years ago

1 new commit added

  • Create test for application details.
2 years ago

3 new commits added

  • Update subroutine to deal with web browser.
  • Browse through apps with mouse.
  • Search applications using search mode.
2 years ago

1 new commit added

  • Delete damaged needles.
2 years ago

1 new commit added

  • Delete more useless needles.
2 years ago

1 new commit added

  • Rename routine
2 years ago

1 new commit added

  • Export function
2 years ago

1 new commit added

  • Update command
2 years ago

1 new commit added

  • Change category.
2 years ago

1 new commit added

  • Change category again.
2 years ago

1 new commit added

  • Change application.
2 years ago

1 new commit added

  • Add needles to support the browse_applications.
2 years ago

1 new commit added

  • Simplify search_applications.
2 years ago

1 new commit added

  • Add finding command to script.
2 years ago

1 new commit added

  • Update library.
2 years ago

1 new commit added

  • One step back only.
2 years ago

1 new commit added

  • Fix routine.
2 years ago

1 new commit added

  • Restructure stuff a bit.
2 years ago

1 new commit added

  • Fix typo
2 years ago

1 new commit added

  • Kill Software to restart sync.
2 years ago

1 new commit added

  • Switch applications from Mahjongg to Inkscape.
2 years ago

1 new commit added

  • Softfail when not found.
2 years ago

1 new commit added

  • Add needles to support the tests.
2 years ago

This needs a pretty complicated rebase on main now, I'm afraid...

Metadata
Changes Summary 274
+12 -0
file changed
check-needles.py
+177
file added
lib/desktoptools.pm
+1 -1
file changed
lib/fedoradistribution.pm
+43 -1
file changed
lib/utils.pm
+5 -5
file renamed
needles/gnome/apps/nautilus/nautilus_star_selected_file-20220811.json
needles/gnome/apps/apps_run_inkscape.json
+0
file added
needles/gnome/apps/apps_run_inkscape.png
+15
file added
needles/gnome/apps/apps_run_mahjongg.json
+0
file added
needles/gnome/apps/apps_run_mahjongg.png
-0
file removed
needles/gnome/apps/evince/evince_search_button-20210916.png
-0
file removed
needles/gnome/apps/evince/evince_search_button-20220219.png
-0
file removed
needles/gnome/apps/evince/evince_search_button.png
+15
file added
needles/gnome/apps/gnome_search_button-20220531.json
+0
file added
needles/gnome/apps/gnome_search_button-20220531.png
+6 -6
file renamed
needles/gnome/gnome_button_credits-eog-dark.json
needles/gnome/apps/gnome_uninstall_button.json
+0
file added
needles/gnome/apps/gnome_uninstall_button.png
-0
file removed
needles/gnome/apps/nautilus/nautilus_star_selected_file-20220811.png
+15
file added
needles/gnome/apps/software/software_about.json
+0
file added
needles/gnome/apps/software/software_about.png
+15
file added
needles/gnome/apps/software/software_application_amarok.json
+0
file added
needles/gnome/apps/software/software_application_amarok.png
+15
file added
needles/gnome/apps/software/software_application_chess.json
+0
file added
needles/gnome/apps/software/software_application_chess.png
+15
file added
needles/gnome/apps/software/software_application_clocks.json
+0
file added
needles/gnome/apps/software/software_application_clocks.png
+5 -5
file renamed
needles/gnome/apps/evince/evince_search_button-20220219.json
needles/gnome/apps/software/software_automatic_disabled.json
+0
file added
needles/gnome/apps/software/software_automatic_disabled.png
+15
file added
needles/gnome/apps/software/software_automatic_updates.json
+0
file added
needles/gnome/apps/software/software_automatic_updates.png
+5 -5
file renamed
needles/gnome/apps/evince/evince_search_button.json
needles/gnome/apps/software/software_back_button.json
+0
file added
needles/gnome/apps/software/software_back_button.png
+15
file added
needles/gnome/apps/software/software_category_create.json
+0
file added
needles/gnome/apps/software/software_category_create.png
+15
file added
needles/gnome/apps/software/software_category_learn.json
+0
file added
needles/gnome/apps/software/software_category_learn.png
+14 -14
file renamed
needles/gnome/apps/weather/weather_report_hourly_later.json
needles/gnome/apps/software/software_category_play.json
+0
file added
needles/gnome/apps/software/software_category_play.png
+15
file added
needles/gnome/apps/software/software_category_work.json
+0
file added
needles/gnome/apps/software/software_category_work.png
+15
file added
needles/gnome/apps/software/software_credits-20230321.json
+0
file added
needles/gnome/apps/software/software_credits-20230321.png
+15
file added
needles/gnome/apps/software/software_credits.json
+0
file added
needles/gnome/apps/software/software_credits.png
+15
file added
needles/gnome/apps/software/software_description_amarok.json
+0
file added
needles/gnome/apps/software/software_description_amarok.png
+15
file added
needles/gnome/apps/software/software_description_chess.json
+0
file added
needles/gnome/apps/software/software_description_chess.png
+15
file added
needles/gnome/apps/software/software_description_clocks.json
+0
file added
needles/gnome/apps/software/software_description_clocks.png
+15
file added
needles/gnome/apps/software/software_download_size_amarok.json
+0
file added
needles/gnome/apps/software/software_download_size_amarok.png
+15
file added
needles/gnome/apps/software/software_download_size_chess.json
+0
file added
needles/gnome/apps/software/software_download_size_chess.png
+15
file added
needles/gnome/apps/software/software_download_size_clocks.json
+0
file added
needles/gnome/apps/software/software_download_size_clocks.png
+15
file added
needles/gnome/apps/software/software_emacs-found.json
+0
file added
needles/gnome/apps/software/software_emacs-found.png
+22
file added
needles/gnome/apps/software/software_emacs-found_installed.json
+0
file added
needles/gnome/apps/software/software_emacs-found_installed.png
+15
file added
needles/gnome/apps/software/software_emacs-install_pane-20220628.json
+0
file added
needles/gnome/apps/software/software_emacs-install_pane-20220628.png
+15
file added
needles/gnome/apps/software/software_emacs-listed-20220629.json
+0
file added
needles/gnome/apps/software/software_emacs-listed-20220629.png
+15
file added
needles/gnome/apps/software/software_emacs-listed.json
+0
file added
needles/gnome/apps/software/software_emacs-listed.png
+15
file added
needles/gnome/apps/software/software_gvim-found.json
+0
file added
needles/gnome/apps/software/software_gvim-found.png
+22
file added
needles/gnome/apps/software/software_gvim-found_installed.json
+0
file added
needles/gnome/apps/software/software_gvim-found_installed.png
+15
file added
needles/gnome/apps/software/software_gvim-install_pane.json
+0
file added
needles/gnome/apps/software/software_gvim-install_pane.png
+15
file added
needles/gnome/apps/software/software_gvim-listed.json
+0
file added
needles/gnome/apps/software/software_gvim-listed.png
+15
file added
needles/gnome/apps/software/software_inkscape-found.json
+0
file added
needles/gnome/apps/software/software_inkscape-found.png
+15
file added
needles/gnome/apps/software/software_inkscape-found_installed.json
+0
file added
needles/gnome/apps/software/software_inkscape-found_installed.png
+15
file added
needles/gnome/apps/software/software_inkscape-install_pane-20220630.json
+0
file added
needles/gnome/apps/software/software_inkscape-install_pane-20220630.png
+15
file added
needles/gnome/apps/software/software_inkscape-install_pane-20230322.json
+0
file added
needles/gnome/apps/software/software_inkscape-install_pane-20230322.png
+15
file added
needles/gnome/apps/software/software_inkscape-install_pane.json
+0
file added
needles/gnome/apps/software/software_inkscape-install_pane.png
+15
file added
needles/gnome/apps/software/software_inkscape-listed-20230322.json
+0
file added
needles/gnome/apps/software/software_inkscape-listed-20230322.png
+15
file added
needles/gnome/apps/software/software_inkscape-listed.json
+0
file added
needles/gnome/apps/software/software_inkscape-listed.png
+15
file added
needles/gnome/apps/software/software_installed_button-20230322.json
+0
file added
needles/gnome/apps/software/software_installed_button-20230322.png
+15
file added
needles/gnome/apps/software/software_installed_button.json
+0
file added
needles/gnome/apps/software/software_installed_button.png
+4 -4
file renamed
needles/gnome/apps/weather/weather_report_hourly_later-20220820.json
needles/gnome/apps/software/software_installed_button_active.json
+0
file added
needles/gnome/apps/software/software_installed_button_active.png
+15
file added
needles/gnome/apps/software/software_logo_amarok.json
+0
file added
needles/gnome/apps/software/software_logo_amarok.png
+15
file added
needles/gnome/apps/software/software_logo_chess.json
+0
file added
needles/gnome/apps/software/software_logo_chess.png
+15
file added
needles/gnome/apps/software/software_logo_clocks.json
+0
file added
needles/gnome/apps/software/software_logo_clocks.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found-20220609.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found-20220609.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found-20220630.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found-20220630.png
+4 -4
file renamed
needles/gnome/apps/evince/evince_search_button-20210916.json
needles/gnome/apps/software/software_mahjongg-found-20230322.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found-20230322.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found-20230323.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found-20230323.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found_installed-20220630.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found_installed-20220630.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found_installed-20230322.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found_installed-20230322.png
+15
file added
needles/gnome/apps/software/software_mahjongg-found_installed.json
+0
file added
needles/gnome/apps/software/software_mahjongg-found_installed.png
+15
file added
needles/gnome/apps/software/software_mahjongg-install_pane-20220628.json
+0
file added
needles/gnome/apps/software/software_mahjongg-install_pane-20220628.png
+22
file added
needles/gnome/apps/software/software_mahjongg-install_pane-20230322.json
+0
file added
needles/gnome/apps/software/software_mahjongg-install_pane-20230322.png
+22
file added
needles/gnome/apps/software/software_mahjongg-install_pane-20230323.json
+0
file added
needles/gnome/apps/software/software_mahjongg-install_pane-20230323.png
+15
file added
needles/gnome/apps/software/software_mahjongg-install_pane-simple-20230323.json
+0
file added
needles/gnome/apps/software/software_mahjongg-install_pane-simple-20230323.png
+15
file added
needles/gnome/apps/software/software_mahjongg-install_pane.json
+0
file added
needles/gnome/apps/software/software_mahjongg-install_pane.png
+15
file added
needles/gnome/apps/software/software_mahjongg-listed-20220607.json
+0
file added
needles/gnome/apps/software/software_mahjongg-listed-20220607.png
+15
file added
needles/gnome/apps/software/software_mahjongg-listed-20220609.json
+0
file added
needles/gnome/apps/software/software_mahjongg-listed-20220609.png
+15
file added
needles/gnome/apps/software/software_mahjongg-listed-20230322.json
+0
file added
needles/gnome/apps/software/software_mahjongg-listed-20230322.png
+15
file added
needles/gnome/apps/software/software_mahjongg-listed-20230323.json
+0
file added
needles/gnome/apps/software/software_mahjongg-listed-20230323.png
+15
file added
needles/gnome/apps/software/software_mahjongg-listed.json
+0
file added
needles/gnome/apps/software/software_mahjongg-listed.png
+15
file added
needles/gnome/apps/software/software_mahjongg_description.json
+0
file added
needles/gnome/apps/software/software_mahjongg_description.png
+15
file added
needles/gnome/apps/software/software_mahjongg_icon.json
+0
file added
needles/gnome/apps/software/software_mahjongg_icon.png
+15
file added
needles/gnome/apps/software/software_mahjongg_name.json
+0
file added
needles/gnome/apps/software/software_mahjongg_name.png
+15
file added
needles/gnome/apps/software/software_mahjongg_place-20220707.json
+0
file added
needles/gnome/apps/software/software_mahjongg_place-20220707.png
+15
file added
needles/gnome/apps/software/software_mahjongg_place.json
+0
file added
needles/gnome/apps/software/software_mahjongg_place.png
+15
file added
needles/gnome/apps/software/software_mahjongg_safety.json
+0
file added
needles/gnome/apps/software/software_mahjongg_safety.png
+15
file added
needles/gnome/apps/software/software_mahjongg_slide.json
+0
file added
needles/gnome/apps/software/software_mahjongg_slide.png
+15
file added
needles/gnome/apps/software/software_menu_about-20230321.json
+0
file added
needles/gnome/apps/software/software_menu_about-20230321.png
+15
file added
needles/gnome/apps/software/software_menu_about.json
+0
file added
needles/gnome/apps/software/software_menu_about.png
+15
file added
needles/gnome/apps/software/software_menu_repositories.json
+0
file added
needles/gnome/apps/software/software_menu_repositories.png
+15
file added
needles/gnome/apps/software/software_notifications_disabled.json
+0
file added
needles/gnome/apps/software/software_notifications_disabled.png
+15
file added
needles/gnome/apps/software/software_rating_amarok.json
+0
file added
needles/gnome/apps/software/software_rating_amarok.png
+15
file added
needles/gnome/apps/software/software_rating_chess.json
+0
file added
needles/gnome/apps/software/software_rating_chess.png
+15
file added
needles/gnome/apps/software/software_rating_clocks.json
+0
file added
needles/gnome/apps/software/software_rating_clocks.png
+15
file added
needles/gnome/apps/software/software_remove_button.json
+0
file added
needles/gnome/apps/software/software_remove_button.png
+15
file added
needles/gnome/apps/software/software_repo_disable.json
+0
file added
needles/gnome/apps/software/software_repo_disable.png
+16
file added
needles/gnome/apps/software/software_repo_fedora_modular-off.json
+0
file added
needles/gnome/apps/software/software_repo_fedora_modular-off.png
+16
file added
needles/gnome/apps/software/software_repo_fedora_modular-on.json
+0
file added
needles/gnome/apps/software/software_repo_fedora_modular-on.png
+15
file added
needles/gnome/apps/software/software_repo_fedora_modular.json
+0
file added
needles/gnome/apps/software/software_repo_fedora_modular.png
+16
file added
needles/gnome/apps/software/software_repo_test_updates-off.json
+0
file added
needles/gnome/apps/software/software_repo_test_updates-off.png
+16
file added
needles/gnome/apps/software/software_repo_test_updates-on.json
+0
file added
needles/gnome/apps/software/software_repo_test_updates-on.png
+15
file added
needles/gnome/apps/software/software_repo_test_updates.json
+0
file added
needles/gnome/apps/software/software_repo_test_updates.png
+15
file added
needles/gnome/apps/software/software_repositories.json
+0
file added
needles/gnome/apps/software/software_repositories.png
+15
file added
needles/gnome/apps/software/software_safestatus_amarok.json
+0
file added
needles/gnome/apps/software/software_safestatus_amarok.png
+15
file added
needles/gnome/apps/software/software_safestatus_chess.json
+0
file added
needles/gnome/apps/software/software_safestatus_chess.png
+15
file added
needles/gnome/apps/software/software_safestatus_clocks.json
+0
file added
needles/gnome/apps/software/software_safestatus_clocks.png
+15
file added
needles/gnome/apps/software/software_screenshot_amarok.json
+0
file added
needles/gnome/apps/software/software_screenshot_amarok.png
+15
file added
needles/gnome/apps/software/software_screenshot_chess.json
+0
file added
needles/gnome/apps/software/software_screenshot_chess.png
+15
file added
needles/gnome/apps/software/software_screenshot_clocks.json
+0
file added
needles/gnome/apps/software/software_screenshot_clocks.png
+15
file added
needles/gnome/apps/software/software_source_fedora_flatpak-20230322.json
+0
file added
needles/gnome/apps/software/software_source_fedora_flatpak-20230322.png
+15
file added
needles/gnome/apps/software/software_source_fedora_flatpak.json
+0
file added
needles/gnome/apps/software/software_source_fedora_flatpak.png
+15
file added
needles/gnome/apps/software/software_source_fedora_rpm-20220524.json
+0
file added
needles/gnome/apps/software/software_source_fedora_rpm-20220524.png
+15
file added
needles/gnome/apps/software/software_source_fedora_rpm-20230322.json
+0
file added
needles/gnome/apps/software/software_source_fedora_rpm-20230322.png
+15
file added
needles/gnome/apps/software/software_source_fedora_rpm.json
+0
file added
needles/gnome/apps/software/software_source_fedora_rpm.png
+16
file added
needles/gnome/apps/software/software_sources_available_flatpak-20230322.json
+0
file added
needles/gnome/apps/software/software_sources_available_flatpak-20230322.png
+16
file added
needles/gnome/apps/software/software_sources_available_flatpak.json
+0
file added
needles/gnome/apps/software/software_sources_available_flatpak.png
+16
file added
needles/gnome/apps/software/software_sources_available_rpm-20230322.json
+0
file added
needles/gnome/apps/software/software_sources_available_rpm-20230322.png
+16
file added
needles/gnome/apps/software/software_sources_available_rpm.json
+0
file added
needles/gnome/apps/software/software_sources_available_rpm.png
+15
file added
needles/gnome/apps/software/software_update_preferences.json
+0
file added
needles/gnome/apps/software/software_update_preferences.png
+15
file added
needles/gnome/apps/software/software_usage_amarok.json
+0
file added
needles/gnome/apps/software/software_usage_amarok.png
+15
file added
needles/gnome/apps/software/software_usage_chess.json
+0
file added
needles/gnome/apps/software/software_usage_chess.png
+15
file added
needles/gnome/apps/software/software_usage_clocks.json
+0
file added
needles/gnome/apps/software/software_usage_clocks.png
+15
file added
needles/gnome/apps/software/software_webcontent_amarok.json
+0
file added
needles/gnome/apps/software/software_webcontent_amarok.png
+15
file added
needles/gnome/apps/software/software_webcontent_chess.json
+0
file added
needles/gnome/apps/software/software_webcontent_chess.png
+15
file added
needles/gnome/apps/software/software_webcontent_clocks.json
+0
file added
needles/gnome/apps/software/software_webcontent_clocks.png
+15
file added
needles/gnome/apps/software/software_weblink_amarok.json
+0
file added
needles/gnome/apps/software/software_weblink_amarok.png
+15
file added
needles/gnome/apps/software/software_weblink_chess.json
+0
file added
needles/gnome/apps/software/software_weblink_chess.png
+15
file added
needles/gnome/apps/software/software_weblink_clocks.json
+0
file added
needles/gnome/apps/software/software_weblink_clocks.png
+15
file added
needles/gnome/apps/software/software_website_amarok.json
+0
file added
needles/gnome/apps/software/software_website_amarok.png
+15
file added
needles/gnome/apps/software/software_website_chess.json
+0
file added
needles/gnome/apps/software/software_website_chess.png
+15
file added
needles/gnome/apps/software/software_website_clocks.json
+0
file added
needles/gnome/apps/software/software_website_clocks.png
-0
file removed
needles/gnome/apps/weather/weather_report_hourly_later-20220820.png
-0
file removed
needles/gnome/apps/weather/weather_report_hourly_later.png
+2 -1
file changed
needles/gnome/desktop_package_tool_update-gnome-20210723.json
+2 -1
file changed
needles/gnome/desktop_package_tool_update-gnome-20220112.json
+2 -1
file changed
needles/gnome/desktop_package_tool_update-gnome-20220219.json
+2 -1
file changed
needles/gnome/desktop_package_tool_update-gnome-gtk3245-20190207.json
+4 -4
file changed
needles/gnome/gnome_button_credits-bold.json
-0
file removed
needles/gnome/gnome_button_credits-eog-dark.png
+15
file added
needles/gnome/gnome_credits_button-regular-20220713.json
+0
file added
needles/gnome/gnome_credits_button-regular-20220713.png
+15
file added
needles/gnome/gnome_credits_button.json
+0
file added
needles/gnome/gnome_credits_button.png
+15
file added
needles/gnome/gnome_install_button.json
+0
file added
needles/gnome/gnome_install_button.png
+15
file added
needles/gnome/gnome_search_button-20220531.json
+0
file added
needles/gnome/gnome_search_button-20220531.png
+16
file added
needles/gnome/gnome_search_button.json
+0
file added
needles/gnome/gnome_search_button.png
+15
file added
needles/gnome/gnome_uninstall_button.json
+0
file added
needles/gnome/gnome_uninstall_button.png
+18 -0
file changed
templates.fif.json
+1 -1
file changed
tests/applications/clocks/about.pm
+1 -1
file changed
tests/applications/evince/search.pm
+45
file added
tests/applications/software/aaa_setup.pm
+36
file added
tests/applications/software/about.pm
+56
file added
tests/applications/software/browse_applications.pm
+46
file added
tests/applications/software/install_flatpak.pm
+51
file added
tests/applications/software/install_rpm.pm
+58
file added
tests/applications/software/install_rpm_multi.pm
+58
file added
tests/applications/software/list_installed.pm
+57
file added
tests/applications/software/list_installed.pm.mask
+46
file added
tests/applications/software/remove_flatpak.pm
+46
file added
tests/applications/software/remove_rpm.pm
+109
file added
tests/applications/software/repositories.pm
+40
file added
tests/applications/software/search_applications.pm
+46
file added
tests/applications/software/show_details.pm
+52
file added
tests/applications/software/update_settings.pm
+0 -2
file changed
tests/desktop_update_graphical.pm