1
0
mirror of https://pagure.io/fedora-qa/os-autoinst-distri-fedora.git synced 2024-12-24 03:03:08 +00:00

Create a test suite for Gnome Software.

This commit is contained in:
Lukáš Růžička 2021-08-24 10:16:40 +02:00 committed by Lukas Ruzicka
parent 5572a73f61
commit 3439359c68
170 changed files with 1941 additions and 49 deletions

View File

@ -130,6 +130,18 @@ for location in ("vilnius", "denali", "wellington", "poysdorf", "pune"):
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',

148
lib/desktoptools.pm Normal file
View File

@ -0,0 +1,148 @@
package desktoptools;
use strict;
use base 'Exporter';
use Exporter;
use testapi;
use utils;
our @EXPORT = qw/install_application start_application_via_packagemanager check_app_installed remove_application restart_application/;
# 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) = @_;
# Sometimes, especially when this method is used several
# times in a row, Software can be located on the
# installation tab and we need to leave it until
# we can proceed.
if (check_screen("software_back_button")) {
click_lastmatch();
}
# Search for the application.
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");
# 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);
}
# 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;
# It is possible that we still find ourselves in the Installation
# pane. In that case, the Installed button is not visible, therefore
# we need to go back in the GUI if this is the sitation.
unless (check_screen("software_installed_button")) {
assert_and_click("software_back_button");
}
# 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");
}

View File

@ -101,7 +101,7 @@ sub ensure_installed {
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);

View File

@ -7,7 +7,7 @@ use Exporter;
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 @@ sub download_testdata {
# 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 @@ sub make_serial_writable {
# 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;

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 211,
"ypos": 122,
"width": 250,
"height": 65,
"type": "match"
}
],
"properties": [],
"tags": [
"apps_run_inkscape"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 115,
"ypos": 5,
"width": 98,
"height": 23,
"type": "match"
}
],
"properties": [],
"tags": [
"apps_run_mahjongg"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

View File

@ -1,15 +0,0 @@
{
"area": [
{
"xpos": 897,
"width": 26,
"type": "match",
"ypos": 42,
"height": 24
}
],
"properties": [],
"tags": [
"evince_search_button"
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

View File

@ -1,15 +0,0 @@
{
"area": [
{
"xpos": 897,
"type": "match",
"ypos": 42,
"width": 26,
"height": 24
}
],
"properties": [],
"tags": [
"evince_search_button"
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 29,
"type": "match",
"ypos": 41,
"height": 28,
"xpos": 9
}
],
"properties": [],
"tags": [
"gnome_search_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 602,
"ypos": 441,
"width": 72,
"height": 25,
"type": "match"
}
],
"properties": [],
"tags": [
"gnome_uninstall_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View File

@ -1,15 +1,25 @@
{
"area": [
{
<<<<<<<< HEAD:needles/gnome/apps/nautilus/nautilus_star_selected_file-20220811.json
"xpos": 971,
"ypos": 191,
"width": 19,
========
"xpos": 258,
"ypos": 446,
"width": 213,
>>>>>>>> e0a281f8 (Create a test suite for Gnome Software.):needles/gnome/apps/software/software_update_notifications.json
"height": 18,
"type": "match"
}
],
"properties": [],
"tags": [
<<<<<<<< HEAD:needles/gnome/apps/nautilus/nautilus_star_selected_file-20220811.json
"nautilus_star_selected_file"
========
"software_update_notifications"
>>>>>>>> e0a281f8 (Create a test suite for Gnome Software.):needles/gnome/apps/software/software_update_notifications.json
]
}

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 481,
"ypos": 321,
"width": 62,
"height": 64,
"type": "match"
}
],
"properties": [],
"tags": [
"software_about"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 511,
"type": "match",
"xpos": 265,
"ypos": 411,
"height": 25
}
],
"properties": [],
"tags": [
"software_automatic_disabled"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 411,
"height": 23,
"xpos": 264,
"width": 129,
"type": "match"
}
],
"properties": [],
"tags": [
"software_automatic_updates"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"type": "match",
"width": 24,
"xpos": 13,
"height": 20,
"ypos": 45
}
],
"properties": [],
"tags": [
"software_back_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 422,
"ypos": 461,
"height": 20,
"width": 160,
"type": "match"
}
],
"properties": [],
"tags": [
"software_credits"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 248,
"ypos": 164,
"width": 149,
"height": 27,
"type": "match"
}
],
"properties": [],
"tags": [
"software_emacs-found"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -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"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 121,
"ypos": 134,
"width": 281,
"height": 42,
"type": "match"
}
],
"properties": [],
"tags": [
"software_emacs-install_pane"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"height": 30,
"width": 537,
"type": "match",
"ypos": 602,
"xpos": 249
}
],
"properties": [],
"tags": [
"software_emacs-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 249,
"ypos": 695,
"type": "match",
"height": 30,
"width": 537
}
],
"properties": [],
"tags": [
"software_emacs-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 238,
"ypos": 163,
"width": 120,
"height": 26,
"type": "match"
}
],
"properties": [],
"tags": [
"software_gvim-found"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -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"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 113,
"ypos": 116,
"width": 210,
"height": 58,
"type": "match"
}
],
"properties": [],
"tags": [
"software_gvim-install_pane"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 242,
"ypos": 232,
"width": 548,
"height": 26,
"type": "match"
}
],
"properties": [],
"tags": [
"software_gvim-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

View File

@ -0,0 +1,32 @@
<<<<<<<< HEAD:needles/gnome/apps/weather/weather_report_hourly_later.json
{
"area": [
{
"xpos": 707,
"ypos": 221,
"width": 45,
"height": 21,
"type": "match"
}
],
"properties": [],
"tags": [
"weather_report_hourly"
]
========
{
"area": [
{
"xpos": 240,
"ypos": 169,
"width": 137,
"height": 21,
"type": "match"
}
],
"properties": [],
"tags": [
"software_inkscape-found"
]
>>>>>>>> e0a281f8 (Create a test suite for Gnome Software.):needles/gnome/apps/software/software_inkscape-found.json
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,22 @@
{
"area": [
{
"xpos": 241,
"ypos": 168,
"width": 150,
"height": 23,
"type": "match"
},
{
"xpos": 699,
"ypos": 179,
"width": 80,
"height": 32,
"type": "match"
}
],
"properties": [],
"tags": [
"software_inkscape-found_installed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"height": 43,
"width": 245,
"xpos": 123,
"type": "match",
"ypos": 120
}
],
"properties": [],
"tags": [
"software_inkscape-install_pane"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 123,
"ypos": 131,
"width": 245,
"height": 43,
"type": "match"
}
],
"properties": [],
"tags": [
"software_inkscape-install_pane"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 245,
"ypos": 322,
"width": 547,
"height": 31,
"type": "match"
}
],
"properties": [],
"tags": [
"software_inkscape-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 41,
"height": 27,
"xpos": 463,
"type": "match",
"width": 92
}
],
"properties": [],
"tags": [
"software_installed_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 85,
"height": 21,
"type": "match",
"ypos": 44,
"xpos": 470
}
],
"properties": [],
"tags": [
"software_installed_button"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"type": "match",
"height": 40,
"xpos": 241,
"ypos": 165,
"width": 545
}
],
"properties": [],
"tags": [
"software_mahjongg-found"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"type": "match",
"ypos": 158,
"height": 40,
"xpos": 241,
"width": 545
}
],
"properties": [],
"tags": [
"software_mahjongg-found"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 243,
"ypos": 168,
"width": 545,
"height": 40,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg-found"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"ypos": 160,
"type": "match",
"xpos": 241,
"width": 546,
"height": 42
}
],
"properties": [],
"tags": [
"software_mahjongg-found_installed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 241,
"ypos": 167,
"width": 546,
"height": 42,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg-found_installed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"type": "match",
"height": 51,
"width": 383,
"ypos": 117,
"xpos": 104
}
],
"properties": [],
"tags": [
"software_mahjongg-install_pane"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 383,
"height": 51,
"ypos": 117,
"type": "match",
"xpos": 0
}
],
"properties": [],
"tags": [
"software_mahjongg-install_pane"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 237,
"height": 58,
"type": "match",
"width": 555,
"ypos": 484
}
],
"properties": [],
"tags": [
"software_mahjongg-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"width": 555,
"ypos": 298,
"xpos": 237,
"height": 58,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 236,
"ypos": 205,
"width": 555,
"height": 58,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg-listed"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 95,
"ypos": 693,
"width": 328,
"height": 51,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_description"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 108,
"ypos": 119,
"width": 110,
"height": 85,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_icon"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 248,
"ypos": 130,
"width": 241,
"height": 37,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_name"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 165,
"height": 44,
"width": 76,
"ypos": 642,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_place"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 161,
"ypos": 641,
"width": 84,
"height": 45,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_place"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 374,
"ypos": 639,
"width": 67,
"height": 74,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_safety"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 463,
"ypos": 423,
"width": 128,
"height": 89,
"type": "match"
}
],
"properties": [],
"tags": [
"software_mahjongg_slide"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 858,
"ypos": 162,
"width": 111,
"height": 19,
"type": "match"
}
],
"properties": [],
"tags": [
"software_menu_about"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 860,
"height": 24,
"ypos": 94,
"width": 148,
"type": "match"
}
],
"properties": [],
"tags": [
"software_menu_repositories"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -0,0 +1,15 @@
{
"area": [
{
"xpos": 261,
"height": 23,
"ypos": 468,
"width": 512,
"type": "match"
}
],
"properties": [],
"tags": [
"software_notifications_disabled"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Some files were not shown because too many files have changed in this diff Show More