diff --git a/data/toolkits.tar.gz b/data/toolkits.tar.gz deleted file mode 100644 index 256518d79037..000000000000 Binary files a/data/toolkits.tar.gz and /dev/null differ diff --git a/data/toolkits/Makefile b/data/toolkits/Makefile new file mode 100644 index 000000000000..4bbe1ed3657c --- /dev/null +++ b/data/toolkits/Makefile @@ -0,0 +1,35 @@ +.PHONY: clean + +objects = fltk gtk2 gtk3 gtk4 motif qt4 qt5 qt6 swing.class + +all: $(objects) + +fltk: fltk.cc + g++ -o $@ $< -lfltk + +gtk2: gtk2.c + gcc -o $@ $< `pkg-config --cflags --libs gtk+-2.0` + +gtk3: gtk3.c + gcc -o $@ $< `pkg-config --cflags --libs gtk+-3.0` + +gtk4: gtk4.c + gcc -o $@ $< `pkg-config --cflags --libs gtk4` + +motif: motif.c + gcc -o $@ $< -lXm -lXt + +qt4: qt4.cc + g++ -o $@ $< `pkg-config --cflags --libs QtCore QtGui` + +qt5: qt5.cc + g++ -o $@ $< `pkg-config --cflags --libs Qt5Core Qt5Gui Qt5Widgets` -fPIC + +qt6: qt6.cc + g++ -o $@ $< `pkg-config --cflags --libs Qt6Core Qt6Gui Qt6Widgets` -fPIC + +swing.class: swing.java + javac $< + +clean: + rm -f $(objects) diff --git a/data/toolkits/fltk.cc b/data/toolkits/fltk.cc new file mode 100644 index 000000000000..6c164bfa7bf4 --- /dev/null +++ b/data/toolkits/fltk.cc @@ -0,0 +1,20 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include +#include +#include + +int main(int argc, char **argv) { + Fl_Window *window = new Fl_Window(340,180); + Fl_Box *box = new Fl_Box(20,40,300,100, "Hello World: FLTK"); + box->box(FL_UP_BOX); + box->labelsize(36); + box->labelfont(FL_BOLD+FL_ITALIC); + box->labeltype(FL_SHADOW_LABEL); + window->end(); + window->show(argc, argv); + return Fl::run(); +} + +// g++ fltk.cc -lfltk diff --git a/data/toolkits/gtk2.c b/data/toolkits/gtk2.c new file mode 100644 index 000000000000..8a01a0175b94 --- /dev/null +++ b/data/toolkits/gtk2.c @@ -0,0 +1,38 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include + +static void destroy(GtkWidget *widget, gpointer data) +{ + gtk_main_quit(); +} + +int main(int argc, char *argv[]) +{ + GtkWidget *window, *label; + + gtk_init(&argc, &argv); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + + /* Here we connect the "destroy" event to a signal handler. + * This event occurs when we call gtk_widget_destroy() on the window */ + g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL); + + gtk_container_set_border_width(GTK_CONTAINER(window), 10); + + label = gtk_label_new("Hello World: GTK2"); + + gtk_container_add(GTK_CONTAINER(window), label); + + gtk_widget_show(label); + gtk_widget_show(window); + + gtk_main(); + + return 0; +} + + +// gcc gtk2.c $(pkg-config --cflags --libs gtk+-2.0) diff --git a/data/toolkits/gtk3.c b/data/toolkits/gtk3.c new file mode 100644 index 000000000000..f987ee5b6348 --- /dev/null +++ b/data/toolkits/gtk3.c @@ -0,0 +1,37 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include + +static void activate(GtkApplication *app, gpointer user_data) +{ + GtkWidget *window, *label , *button_box; + + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "Window"); + gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); + + button_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); + gtk_container_add(GTK_CONTAINER(window), button_box); + + label = gtk_label_new("Hello World: GTK3"); + gtk_container_add(GTK_CONTAINER(button_box), label); + + gtk_widget_show_all(window); +} + +int main(int argc, char **argv) +{ + GtkApplication *app; + int status; + + app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE); + g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); + status = g_application_run(G_APPLICATION(app), argc, argv); + g_object_unref(app); + + return status; +} + + +// gcc gtk3.c $(pkg-config --cflags --libs gtk+-3.0) diff --git a/data/toolkits/gtk4.c b/data/toolkits/gtk4.c new file mode 100644 index 000000000000..a0ab7426cb43 --- /dev/null +++ b/data/toolkits/gtk4.c @@ -0,0 +1,43 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include + +static void activate(GtkApplication *app, gpointer user_data) { + GtkWidget *window; + GtkWidget *label; + + // Create a new window + window = gtk_application_window_new(app); + gtk_window_set_title(GTK_WINDOW(window), "Hello, World!"); + + // Create a label + label = gtk_label_new("Hello, World!"); + + // Add the label to the window + gtk_window_set_child(GTK_WINDOW(window), label); + + // Show the window + gtk_widget_set_visible(GTK_WIDGET(window), TRUE); +} + +int main(int argc, char *argv[]) { + GtkApplication *app; + int status; + + // Create a new application + app = gtk_application_new("org.example.hello", G_APPLICATION_DEFAULT_FLAGS); + + // Connect the "activate" signal to the callback function + g_signal_connect(app, "activate", G_CALLBACK(activate), NULL); + + // Run the application + status = g_application_run(G_APPLICATION(app), argc, argv); + + // Clean up resources + g_object_unref(app); + + return status; +} + +// gcc gtk4.c $(pkg-config --cflags --libs gtk4) diff --git a/data/toolkits/motif.c b/data/toolkits/motif.c new file mode 100644 index 000000000000..460945c13d61 --- /dev/null +++ b/data/toolkits/motif.c @@ -0,0 +1,23 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include + +void main(int argc, char *argv[]) +{ + Widget toplevel, main_w, button; + XtAppContext app; + + XtSetLanguageProc(NULL, NULL, NULL); + + toplevel = XtVaAppInitialize(&app, "main", NULL, 0, &argc, argv, NULL, NULL); + main_w = XtVaCreateManagedWidget("main_w", xmMainWindowWidgetClass, toplevel, XmNscrollingPolicy, XmAUTOMATIC, NULL); + button = XtVaCreateWidget("Hello World: motif", xmLabelWidgetClass, main_w, NULL); + + XtManageChild(button); + XtRealizeWidget(toplevel); + XtAppMainLoop(app); +} + +// gcc -lXm -lXt +// source http://www2.latech.edu/~acm/helloworld/motif.html jlk@engr.latech.edu (Josh Kleinpeter) diff --git a/data/toolkits/qt4.cc b/data/toolkits/qt4.cc new file mode 100644 index 000000000000..34e857521513 --- /dev/null +++ b/data/toolkits/qt4.cc @@ -0,0 +1,14 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QLabel *label = new QLabel("Hello World: Qt4"); + label->show(); + return app.exec(); +} + +// g++ qt4.cc $(pkg-config --cflags --libs QtGui) $(pkg-config --cflags --libs QtCore) diff --git a/data/toolkits/qt5.cc b/data/toolkits/qt5.cc new file mode 100644 index 000000000000..ae6ae088b0bd --- /dev/null +++ b/data/toolkits/qt5.cc @@ -0,0 +1,17 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include +#include + +int main(int argc, char **argv) +{ + QApplication app (argc, argv); + + QPushButton button ("Hello World: Qt5"); + button.show(); + + return app.exec(); +} + +// g++ qt5.cc $(pkg-config --cflags --libs Qt5Gui Qt5Core Qt5Widgets) -fPIC diff --git a/data/toolkits/qt6.cc b/data/toolkits/qt6.cc new file mode 100644 index 000000000000..827a00e8cf84 --- /dev/null +++ b/data/toolkits/qt6.cc @@ -0,0 +1,17 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +#include +#include + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + QPushButton button("Hello World: Qt6"); + button.show(); + + return app.exec(); +} + +// g++ qt6.cc $(pkg-config --cflags --libs Qt6Gui Qt6Core Qt6Widgets) -fPIC diff --git a/data/toolkits/swing.java b/data/toolkits/swing.java new file mode 100644 index 000000000000..c0a5bea49598 --- /dev/null +++ b/data/toolkits/swing.java @@ -0,0 +1,8 @@ +// Copyright SUSE LLC +// SPDX-License-Identifier: FSFAP + +public class swing { + public static void main(String[] args) { + javax.swing.JOptionPane.showMessageDialog(null, "Hello World: Swing"); + } +} diff --git a/data/toolkits/tk.tcl b/data/toolkits/tk.tcl new file mode 100755 index 000000000000..f7f2a78f450c --- /dev/null +++ b/data/toolkits/tk.tcl @@ -0,0 +1,9 @@ +#!/usr/bin/wish + +# Copyright SUSE LLC +# SPDX-License-Identifier: FSFAP + +tk scaling 1.0 +image create photo logo -file $tk_library/demos/images/tcllogo.gif +label .hello -compound bottom -text "Hello World: Tcl/Tk" -image logo +pack .hello diff --git a/data/toolkits/tk.tcl.old b/data/toolkits/tk.tcl.old new file mode 100644 index 000000000000..a60a060bb0f4 --- /dev/null +++ b/data/toolkits/tk.tcl.old @@ -0,0 +1,4 @@ +#!/usr/bin/wish + +label .hello -text "Hello World: Tcl/Tk" +pack .hello diff --git a/schedule/functional/extra_tests_toolkits.yaml b/schedule/functional/extra_tests_toolkits.yaml index 981af7370adf..cffc716b42a6 100644 --- a/schedule/functional/extra_tests_toolkits.yaml +++ b/schedule/functional/extra_tests_toolkits.yaml @@ -14,7 +14,9 @@ schedule: - x11/toolkits/motif - x11/toolkits/gtk2 - x11/toolkits/gtk3 + - x11/toolkits/gtk4 - x11/toolkits/qt5 + - x11/toolkits/qt6 - x11/toolkits/swing - console/coredump_collect - console/zypper_log_packages diff --git a/tests/x11/toolkits/fltk.pm b/tests/x11/toolkits/fltk.pm index f31d3a2012c5..768f5f6c4a94 100644 --- a/tests/x11/toolkits/fltk.pm +++ b/tests/x11/toolkits/fltk.pm @@ -23,7 +23,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/gtk2.pm b/tests/x11/toolkits/gtk2.pm index 954061478f21..60785592e874 100644 --- a/tests/x11/toolkits/gtk2.pm +++ b/tests/x11/toolkits/gtk2.pm @@ -23,7 +23,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/gtk3.pm b/tests/x11/toolkits/gtk3.pm index 98707ccfdb41..72d5ecdba6ec 100644 --- a/tests/x11/toolkits/gtk3.pm +++ b/tests/x11/toolkits/gtk3.pm @@ -23,7 +23,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/gtk4.pm b/tests/x11/toolkits/gtk4.pm new file mode 100644 index 000000000000..ba326b982420 --- /dev/null +++ b/tests/x11/toolkits/gtk4.pm @@ -0,0 +1,29 @@ +# SUSE's openQA tests +# +# Copyright SUSE LLC +# SPDX-License-Identifier: FSFAP + +# Summary: Test UI toolkit: GTK4 +# Maintainer: Dominik Heidler + +use base 'x11test'; +use strict; +use warnings; +use testapi; + +sub run { + select_console 'x11'; + + x11_start_program('xterm'); + assert_script_run 'cd data/toolkits'; + + assert_script_run 'make gtk4'; + script_run './gtk4', 0; + assert_screen 'ui-toolkit-gtk4'; + wait_screen_change { send_key 'alt-f4' }; + + assert_script_run '$(exit $?)'; + enter_cmd 'exit'; +} + +1; diff --git a/tests/x11/toolkits/motif.pm b/tests/x11/toolkits/motif.pm index adb271ca0778..0220b657d1cc 100644 --- a/tests/x11/toolkits/motif.pm +++ b/tests/x11/toolkits/motif.pm @@ -23,7 +23,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/prepare.pm b/tests/x11/toolkits/prepare.pm index d5b78fa08e88..cd1f2c61d97a 100644 --- a/tests/x11/toolkits/prepare.pm +++ b/tests/x11/toolkits/prepare.pm @@ -35,18 +35,15 @@ sub run { } my $qt5_devel = 'libQt5Core-devel libQt5Gui-devel libQt5Widgets-devel'; + my $qt6_devel = 'qt6-core-devel qt6-gui-devel qt6-widgets-devel'; - zypper_call "in gcc gcc-c++ tcl tk xmessage fltk-devel motif-devel gtk2-devel gtk3-devel java java-devel $qt5_devel"; + zypper_call "in gcc gcc-c++ tcl tk xmessage fltk-devel motif-devel gtk2-devel gtk3-devel gtk4-devel java java-devel $qt5_devel $qt6_devel"; if (is_opensuse) { # make sure to use latest java (that matches the java compiler that was just installed) assert_script_run 'update-alternatives --set java $(ls /usr/lib64/jvm/jre-*-openjdk/bin/java|sort|tail -1)'; } - select_console 'user-console'; - assert_script_run 'cd data'; - assert_script_run 'tar xvf toolkits.tar.gz'; - select_console 'x11'; } diff --git a/tests/x11/toolkits/qt5.pm b/tests/x11/toolkits/qt5.pm index 38d0d50f3559..dbff60d986bc 100644 --- a/tests/x11/toolkits/qt5.pm +++ b/tests/x11/toolkits/qt5.pm @@ -23,7 +23,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/qt6.pm b/tests/x11/toolkits/qt6.pm new file mode 100644 index 000000000000..b56f3b10431a --- /dev/null +++ b/tests/x11/toolkits/qt6.pm @@ -0,0 +1,29 @@ +# SUSE's openQA tests +# +# Copyright SUSE LLC +# SPDX-License-Identifier: FSFAP + +# Summary: Test UI toolkit: Qt6 +# Maintainer: Dominik Heidler + +use base 'x11test'; +use strict; +use warnings; +use testapi; + +sub run { + select_console 'x11'; + + x11_start_program('xterm'); + assert_script_run 'cd data/toolkits'; + + assert_script_run 'make qt6'; + script_run './qt6', 0; + assert_screen 'ui-toolkit-qt6'; + wait_screen_change { send_key 'alt-f4' }; + assert_script_run '$(exit $?)'; + + enter_cmd 'exit'; +} + +1; diff --git a/tests/x11/toolkits/swing.pm b/tests/x11/toolkits/swing.pm index 8d5f1557e1aa..95de9954ce21 100644 --- a/tests/x11/toolkits/swing.pm +++ b/tests/x11/toolkits/swing.pm @@ -23,7 +23,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/tk.pm b/tests/x11/toolkits/tk.pm index 0b248b45cffa..20faf1291976 100644 --- a/tests/x11/toolkits/tk.pm +++ b/tests/x11/toolkits/tk.pm @@ -22,7 +22,7 @@ sub run { wait_screen_change { send_key 'alt-f4' }; assert_script_run '$(exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1; diff --git a/tests/x11/toolkits/x11.pm b/tests/x11/toolkits/x11.pm index 989419ddc2bf..06c818af934b 100644 --- a/tests/x11/toolkits/x11.pm +++ b/tests/x11/toolkits/x11.pm @@ -22,7 +22,7 @@ sub run { # xmessage returns 1 if not closed via okay button assert_script_run '$(test $? == 1 ; exit $?)'; - enter_cmd "exit"; + enter_cmd 'exit'; } 1;