Add a 'navigation' test for GNOME.
This PR partly solves the issue #301 when it adds the navigation testing for Gnome. It uses the keyboard combinations to cycle through running applications and checks that applications could be switched accordingly. It also tests that you can switch between workspaces and that you can move an applications to another workspace.
@ -218,7 +218,10 @@ testtags.extend(f"anaconda_help_{fsys}" for fsys in ('install_destination',
|
||||
'installation_progress', 'keyboard_layout', 'language_support', 'network_host_name',
|
||||
'root_password', 'select_packages', 'installation_source', 'time_date', 'user_creation',
|
||||
'language_selection', 'language', 'summary_link'))
|
||||
|
||||
# for Gnome navigation test
|
||||
for app in ("calculator", "clocks", "files", "terminal", "editor"):
|
||||
testtags.append(f"navigation_navibar_{app}")
|
||||
testtags.append("navigation_terminal_fullscreen")
|
||||
testtags.extend(f"anaconda_main_hub_{fsys}" for fsys in ('language_support', 'selec_packages',
|
||||
'time_date', 'create_user','keyboard_layout'))
|
||||
|
||||
|
19
lib/utils.pm
@ -1709,4 +1709,23 @@ sub set_update_notification_timestamp {
|
||||
type_very_safely("gsettings set org.gnome.software update-notification-timestamp $ep_time\n");
|
||||
}
|
||||
|
||||
# This routine takes a list of applications. It will then use the terminal
|
||||
# to start all these applications in the background and then it will exit the
|
||||
# terminal. This is useful when we want to start multiple applications quickly.
|
||||
sub start_applications {
|
||||
my @applications = @_;
|
||||
# Open the terminal
|
||||
menu_launch_type("terminal");
|
||||
wait_still_screen(2);
|
||||
# Iterate over the application list
|
||||
# and start each application from it.
|
||||
foreach (@applications) {
|
||||
assert_script_run("$_ &");
|
||||
# Take some time for things to settle.
|
||||
wait_still_screen(1);
|
||||
}
|
||||
# Exit the terminal.
|
||||
enter_cmd("exit");
|
||||
}
|
||||
|
||||
1;
|
||||
|
@ -25,6 +25,7 @@
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"firefox",
|
||||
"browser"
|
||||
"browser",
|
||||
"apps_run_firefox"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -12,4 +12,4 @@
|
||||
"tags": [
|
||||
"apps_run_clocks"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"apps_run_texteditor"
|
||||
"apps_run_texteditor",
|
||||
"apps_run_editor"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"apps_run_texteditor"
|
||||
"apps_run_texteditor",
|
||||
"apps_run_editor"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -12,4 +12,4 @@
|
||||
"tags": [
|
||||
"panel_ctrl_networks"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"type": "match",
|
||||
"height": 27,
|
||||
"xpos": 515,
|
||||
"ypos": 537,
|
||||
"width": 103
|
||||
},
|
||||
{
|
||||
"type": "match",
|
||||
"xpos": 561,
|
||||
"ypos": 424,
|
||||
"height": 34,
|
||||
"width": 40
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_details_shown"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 58 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"ypos": 1,
|
||||
"type": "match",
|
||||
"xpos": 6,
|
||||
"height": 67,
|
||||
"width": 82
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_editor_fullscreen"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 30 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 4,
|
||||
"ypos": 4,
|
||||
"width": 124,
|
||||
"height": 65,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_files_fullscreen"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 69 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 316,
|
||||
"ypos": 355,
|
||||
"width": 111,
|
||||
"height": 52,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_navibar_calculator"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 66 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 125,
|
||||
"height": 32,
|
||||
"ypos": 352,
|
||||
"xpos": 449,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_navibar_clocks"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 44 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 121,
|
||||
"type": "match",
|
||||
"height": 50,
|
||||
"xpos": 728,
|
||||
"ypos": 353
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_navibar_editor"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 83 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"xpos": 733,
|
||||
"ypos": 356,
|
||||
"width": 117,
|
||||
"height": 30,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_navibar_files"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 64 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 122,
|
||||
"height": 34,
|
||||
"xpos": 590,
|
||||
"ypos": 341,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_navibar_terminal"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 97 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 77,
|
||||
"ypos": 0,
|
||||
"height": 22,
|
||||
"xpos": 36,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_terminal_fullscreen"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 3.2 KiB |
@ -0,0 +1,15 @@
|
||||
{
|
||||
"area": [
|
||||
{
|
||||
"width": 127,
|
||||
"height": 38,
|
||||
"xpos": 448,
|
||||
"ypos": 99,
|
||||
"type": "match"
|
||||
}
|
||||
],
|
||||
"properties": [],
|
||||
"tags": [
|
||||
"navigation_three_workspaces"
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 85 KiB |
@ -1257,6 +1257,23 @@
|
||||
"START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%"
|
||||
}
|
||||
},
|
||||
"navigation": {
|
||||
"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/navigation",
|
||||
"START_AFTER_TEST": "%DEPLOY_UPLOAD_TEST%"
|
||||
}
|
||||
},
|
||||
"gnome_text_editor": {
|
||||
"profiles": {
|
||||
"fedora-Silverblue-dvd_ostree-iso-ppc64le-*-ppc64le": 50,
|
||||
|
38
tests/applications/navigation/aaa_setup.pm
Normal file
@ -0,0 +1,38 @@
|
||||
use base "installedtest";
|
||||
use strict;
|
||||
use testapi;
|
||||
use utils;
|
||||
|
||||
# We will start two applications and save the progress.
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
# Let us wait here for a couple of seconds to give the VM time to settle.
|
||||
# Starting right over might result in erroneous behavior.
|
||||
sleep(5);
|
||||
# Start Firefox
|
||||
menu_launch_type("nautilus");
|
||||
assert_screen "apps_run_files", 45;
|
||||
# let it settle a bit
|
||||
wait_still_screen(stilltime => 5, similarity_level => 45);
|
||||
send_key("super-up");
|
||||
assert_screen("navigation_files_fullscreen");
|
||||
|
||||
# Start Gnome Text Editor
|
||||
menu_launch_type("text-editor");
|
||||
assert_screen("apps_run_editor");
|
||||
wait_still_screen(2);
|
||||
send_key("super-up");
|
||||
assert_screen("navigation_editor_fullscreen");
|
||||
}
|
||||
|
||||
sub test_flags {
|
||||
return {fatal => 1, milestone => 1};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set sw=4 et:
|
||||
|
||||
|
||||
|
40
tests/applications/navigation/navigation_details.pm
Normal file
@ -0,0 +1,40 @@
|
||||
use base "installedtest";
|
||||
use strict;
|
||||
use testapi;
|
||||
use utils;
|
||||
|
||||
# This will test that user can trigger a detailed view of the
|
||||
# navigation icons using the ~ key.
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
# Let us wait here for a couple of seconds to give the VM time to settle.
|
||||
# Starting right over might result in erroneous behavior.
|
||||
sleep(5);
|
||||
|
||||
# If we are at Nautilus switch to editor
|
||||
if (check_screen("apps_run_files")) {
|
||||
send_key("alt-tab");
|
||||
assert_screen "apps_run_editor";
|
||||
}
|
||||
|
||||
# Use alt-tab to navigate to the other
|
||||
# application, but trigger the overview
|
||||
# page as well and make sure it is shown.
|
||||
hold_key("alt");
|
||||
send_key("tab");
|
||||
send_key("~");
|
||||
assert_screen("navigation_details_shown");
|
||||
release_key("alt");
|
||||
}
|
||||
|
||||
sub test_flags {
|
||||
return {always_rollback => 1};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set sw=4 et:
|
||||
|
||||
|
||||
|
136
tests/applications/navigation/switch_application.pm
Normal file
@ -0,0 +1,136 @@
|
||||
use base "installedtest";
|
||||
use strict;
|
||||
use testapi;
|
||||
use utils;
|
||||
|
||||
# This will test that user can switch between two applications
|
||||
# using the navigation combo Alt-tab.
|
||||
|
||||
sub start_maxed {
|
||||
my $app = shift;
|
||||
menu_launch_type($app);
|
||||
assert_screen ["apps_run_$app", "grant_access"];
|
||||
# give access rights if asked
|
||||
if (match_has_tag "grant_access") {
|
||||
click_lastmatch;
|
||||
assert_screen "apps_run_$app";
|
||||
}
|
||||
wait_still_screen(3);
|
||||
wait_screen_change { send_key("super-up"); };
|
||||
wait_still_screen(2);
|
||||
}
|
||||
|
||||
sub switch_to_app {
|
||||
# This will use Alt-tab to switch to the desired application.
|
||||
# Use the name of the application and the direction in which
|
||||
# the search should be performed, either forward or backward.
|
||||
my ($application, $dir, $fullscreen) = @_;
|
||||
# If we want to search backwards, we will hold the shift key.
|
||||
if ($dir eq "backward") {
|
||||
hold_key("shift");
|
||||
}
|
||||
# Then we hold the alt key to either form shift-alt or just alt
|
||||
# key combo.
|
||||
hold_key("alt");
|
||||
# We will send tab, until we have arrived at the correct icon
|
||||
send_key_until_needlematch("navigation_navibar_$application", "tab", 10);
|
||||
# We will release the alt key.
|
||||
release_key("alt");
|
||||
#
|
||||
if ($dir eq "backward") {
|
||||
release_key("shift");
|
||||
}
|
||||
my $needle = $fullscreen ? "navigation_${application}_fullscreen" : "apps_run_${application}";
|
||||
assert_screen($needle);
|
||||
if ($fullscreen) {
|
||||
die "Not fullscreen!" if (check_screen("apps_menu_button"));
|
||||
}
|
||||
}
|
||||
|
||||
sub check_hidden {
|
||||
# This function checks that the application
|
||||
# is no longer fully displayed on the screen,
|
||||
# because it has been hidden (minimized).
|
||||
my $app = shift;
|
||||
# First, let us wait until the screen settles.
|
||||
wait_still_screen(3);
|
||||
# If the application is still shown, let's die.
|
||||
die("The application seems not to have been minimized.") if (check_screen("apps_run_$app"));
|
||||
}
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
|
||||
### Switch between two applications
|
||||
# From the setup script, we should be seeing the editor
|
||||
# window.
|
||||
# Switch to the other application.
|
||||
send_key("alt-tab");
|
||||
assert_screen("apps_run_files");
|
||||
|
||||
# Switch back
|
||||
send_key("alt-tab");
|
||||
assert_screen("apps_run_editor");
|
||||
|
||||
### Switch between more applications
|
||||
|
||||
# Start more applications.
|
||||
start_maxed("clocks");
|
||||
start_maxed("calculator");
|
||||
start_maxed("terminal");
|
||||
|
||||
## Going forwards
|
||||
# Switch to Calculator using alt-tab
|
||||
switch_to_app("calculator", "forward");
|
||||
# Switch to Clocks using alt-tab
|
||||
switch_to_app("clocks", "forward");
|
||||
|
||||
## Going backwards
|
||||
# Switch to Nautilus using shift-alt-tab
|
||||
switch_to_app("files", "backward");
|
||||
# Switch to Terminal using shift-alt-tab
|
||||
switch_to_app("terminal", "backward");
|
||||
|
||||
### Switch to and from a full screen application
|
||||
# We will make Terminal to full screen
|
||||
send_key("f11");
|
||||
|
||||
# Switch to Editor
|
||||
switch_to_app("editor", "forward");
|
||||
|
||||
# Switch to Terminal (fullscreen)
|
||||
switch_to_app("terminal", "backward", 1);
|
||||
|
||||
# Switch to Editor
|
||||
switch_to_app("editor", "forward");
|
||||
|
||||
### Switch between minimised apps.
|
||||
# Minimise Editor
|
||||
send_key("super-h");
|
||||
# Check that the application has minimised.
|
||||
check_hidden("editor");
|
||||
|
||||
# Switch to Clocks
|
||||
switch_to_app("clocks", "forward");
|
||||
# Minimise Clocks
|
||||
send_key("super-h");
|
||||
# Check that the application has minimised.
|
||||
check_hidden("clocks");
|
||||
|
||||
# Switch to Editor
|
||||
switch_to_app("editor", "forward");
|
||||
|
||||
# Switch to Clocks
|
||||
switch_to_app("clocks", "forward");
|
||||
}
|
||||
|
||||
sub test_flags {
|
||||
return {always_rollback => 1};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set sw=4 et:
|
||||
|
||||
|
||||
|
65
tests/applications/navigation/switch_workplaces.pm
Normal file
@ -0,0 +1,65 @@
|
||||
use base "installedtest";
|
||||
use strict;
|
||||
use testapi;
|
||||
use utils;
|
||||
|
||||
# This will test that user can switch between two workspaces,
|
||||
# that we can move an application to another workspace.
|
||||
|
||||
sub move_to_workspace {
|
||||
# This will use Shift-Ctrl-Alt to move the focused app to
|
||||
# the $direction (left or right).
|
||||
my $direction = shift;
|
||||
wait_screen_change { send_key("shift-ctrl-alt-$direction"); };
|
||||
wait_still_screen 5;
|
||||
}
|
||||
|
||||
sub switch_to_workspace {
|
||||
# This will use Ctrl-Alt to switch to another workspace
|
||||
# using the $direction (left, right)
|
||||
my $direction = shift;
|
||||
wait_screen_change { send_key("ctrl-alt-$direction"); };
|
||||
wait_still_screen 5;
|
||||
}
|
||||
|
||||
sub run {
|
||||
my $self = shift;
|
||||
# Let us wait here for a couple of seconds to give the VM time to settle.
|
||||
# Starting right over might result in erroneous behavior.
|
||||
sleep(5);
|
||||
|
||||
# The focused application should be the Editor, so let's check it is
|
||||
# visible on the beginning screen. Then switch to another workplace.
|
||||
# This one should be empty, therefore checking for the Editor should fail.
|
||||
# The opposite will be true, when we switch back
|
||||
assert_screen("apps_run_editor");
|
||||
switch_to_workspace("right");
|
||||
die("The workspaces were not switched!") if (check_screen("apps_run_editor"));
|
||||
|
||||
switch_to_workspace("left");
|
||||
die("The workspaces were not switched") unless (check_screen("apps_run_editor"));
|
||||
|
||||
# Now, we will move the focused application (Editor) to the second workspace.
|
||||
# The application will be still visible there. When we switch back, the application
|
||||
# will no longer be visible on the first workspace and will uncover Nautilus and
|
||||
# we check that it is there. We will also enter the Activitities mode and will check
|
||||
# that currently three workspaces can be used (top bar of the screen).
|
||||
move_to_workspace("right");
|
||||
die("The application was not moved!") unless (check_screen("apps_run_editor"));
|
||||
switch_to_workspace("left");
|
||||
die("The workspaces were not switched") unless (check_screen("apps_run_files"));
|
||||
send_key("super");
|
||||
wait_still_screen(2);
|
||||
assert_screen("navigation_three_workspaces");
|
||||
}
|
||||
|
||||
sub test_flags {
|
||||
return {always_rollback => 1};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# vim: set sw=4 et:
|
||||
|
||||
|
||||
|