mirror of
https://git.busybox.net/buildroot.git
synced 2024-11-23 05:23:39 +08:00
support/testing: add python-pyqt5 test
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
parent
ba09a448f1
commit
d8c2c2cb57
@ -1967,6 +1967,8 @@ F: support/testing/tests/package/test_python_midiutil.py
|
||||
F: support/testing/tests/package/test_python_ml_dtypes.py
|
||||
F: support/testing/tests/package/test_python_mpmath.py
|
||||
F: support/testing/tests/package/test_python_pyalsa.py
|
||||
F: support/testing/tests/package/test_python_pyqt5.py
|
||||
F: support/testing/tests/package/test_python_pyqt5/
|
||||
F: support/testing/tests/package/test_python_spake2.py
|
||||
F: support/testing/tests/package/test_python_sympy.py
|
||||
F: support/testing/tests/package/test_rdma_core.py
|
||||
|
79
support/testing/tests/package/test_python_pyqt5.py
Normal file
79
support/testing/tests/package/test_python_pyqt5.py
Normal file
@ -0,0 +1,79 @@
|
||||
import os
|
||||
|
||||
import infra.basetest
|
||||
|
||||
|
||||
class TestPythonPyQt5(infra.basetest.BRTest):
|
||||
# We use a specific configuration for:
|
||||
# - using Aarch64, to have more than 256MB memory,
|
||||
# - using a kernel config fragment, to enable VKMS,
|
||||
# - to have an ext4 rootfs image exposed as a virtio storage
|
||||
# (rather than cpio initrd). This will save some memory, as the
|
||||
# rootfs image is big.
|
||||
kernel_fragment = \
|
||||
infra.filepath("tests/package/test_python_pyqt5/linux-vkms.fragment")
|
||||
rootfs_overlay = \
|
||||
infra.filepath("tests/package/test_python_pyqt5/rootfs-overlay")
|
||||
config = \
|
||||
f"""
|
||||
BR2_aarch64=y
|
||||
BR2_TOOLCHAIN_EXTERNAL=y
|
||||
BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
|
||||
BR2_LINUX_KERNEL=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.1.81"
|
||||
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
|
||||
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
|
||||
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{kernel_fragment}"
|
||||
BR2_PACKAGE_DEJAVU=y
|
||||
BR2_PACKAGE_LIBDRM=y
|
||||
BR2_PACKAGE_MESA3D=y
|
||||
BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_SWRAST=y
|
||||
BR2_PACKAGE_MESA3D_LLVM=y
|
||||
BR2_PACKAGE_MESA3D_OPENGL_EGL=y
|
||||
BR2_PACKAGE_MESA3D_OPENGL_ES=y
|
||||
BR2_PACKAGE_PYTHON3=y
|
||||
BR2_PACKAGE_PYTHON_PYQT5=y
|
||||
BR2_PACKAGE_QT5=y
|
||||
BR2_PACKAGE_QT5BASE_EGLFS=y
|
||||
BR2_PACKAGE_QT5BASE_FONTCONFIG=y
|
||||
BR2_PACKAGE_QT5BASE_WIDGETS=y
|
||||
BR2_ROOTFS_OVERLAY="{rootfs_overlay}"
|
||||
BR2_TARGET_ROOTFS_EXT2=y
|
||||
BR2_TARGET_ROOTFS_EXT2_4=y
|
||||
BR2_TARGET_ROOTFS_EXT2_SIZE="256M"
|
||||
# BR2_TARGET_ROOTFS_TAR is not set
|
||||
"""
|
||||
|
||||
def test_run(self):
|
||||
drive = os.path.join(self.builddir, "images", "rootfs.ext4")
|
||||
kern = os.path.join(self.builddir, "images", "Image")
|
||||
self.emulator.boot(arch="aarch64",
|
||||
kernel=kern,
|
||||
kernel_cmdline=["root=/dev/vda console=ttyAMA0"],
|
||||
options=["-M", "virt", "-cpu", "cortex-a57", "-m", "512M",
|
||||
"-drive", f"file={drive},if=virtio,format=raw"])
|
||||
self.emulator.login()
|
||||
|
||||
# We run the test application with a customized message.
|
||||
# NOTE: to manually debug this test, a Qemu emulator with
|
||||
# virtio-gpu can be used by starting it the command line from
|
||||
# the run log generated by this test, and by adding the
|
||||
# arguments "-device virtio-gpu -display gtk". With this, the
|
||||
# test application will be observable on the Qemu window. Once
|
||||
# logged, we can use the "card1" DRM/KMS device (virtio-gpu,
|
||||
# instead of card0, which is vkms on "card0") by using the
|
||||
# command:
|
||||
# echo '{"device":"/dev/dri/card1"}' > cfg.json
|
||||
# export QT_QPA_EGLFS_KMS_CONFIG="$PWD/cfg.json"
|
||||
# The Qt debug can also be enabled with the command:
|
||||
# export QT_LOGGING_RULES=*=true
|
||||
# Then, run the /root/pyqt5test.py application.
|
||||
msg = "Hello Buildroot."
|
||||
cmd = f'/root/pyqt5test.py "{msg}"'
|
||||
self.assertRunOk(cmd, timeout=30)
|
||||
|
||||
# We check the test message is present in the file created by
|
||||
# the previous application execution.
|
||||
cmd = f'grep -F "{msg}" /root/message.txt'
|
||||
self.assertRunOk(cmd)
|
@ -0,0 +1 @@
|
||||
CONFIG_DRM_VKMS=y
|
@ -0,0 +1,60 @@
|
||||
#! /usr/bin/env python3
|
||||
#
|
||||
# This is a test application for PyQt5. It is showing a text label and
|
||||
# a "quit" button. The text of the label can be set with the first
|
||||
# (non-Qt) command line argument. A timer will send a click signal to
|
||||
# the quit button after 3 seconds. When quitting, the text of the
|
||||
# label is saved in a "message.txt" file in the current working
|
||||
# directory.
|
||||
|
||||
import sys
|
||||
|
||||
from PyQt5.QtCore import PYQT_VERSION_STR, QFile, QIODevice, QT_VERSION_STR, QTextStream, QTimer, Qt
|
||||
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget
|
||||
|
||||
|
||||
class TestApp(QWidget):
|
||||
|
||||
def __init__(self, message, parent=None):
|
||||
super(TestApp, self).__init__(parent)
|
||||
|
||||
self.label = QLabel(message)
|
||||
self.label.setAlignment(Qt.AlignCenter)
|
||||
|
||||
self.button = QPushButton("Quit")
|
||||
self.button.clicked.connect(self.on_button_clicked)
|
||||
|
||||
self.layout = QVBoxLayout()
|
||||
self.layout.addWidget(self.label)
|
||||
self.layout.addWidget(self.button)
|
||||
|
||||
self.setLayout(self.layout)
|
||||
|
||||
self.timer = QTimer()
|
||||
self.timer.timeout.connect(self.button.click)
|
||||
|
||||
def on_button_clicked(self):
|
||||
self.save_message()
|
||||
app.quit()
|
||||
|
||||
def save_message(self):
|
||||
f = QFile("message.txt")
|
||||
if f.open(QIODevice.WriteOnly):
|
||||
QTextStream(f) << (self.label.text() + '\n')
|
||||
f.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("PyQt5 test for Buildroot")
|
||||
print(f"Qt version {QT_VERSION_STR}")
|
||||
print(f"PyQt version {PYQT_VERSION_STR}")
|
||||
|
||||
msg = "Hello World"
|
||||
app = QApplication(sys.argv)
|
||||
args = app.arguments()
|
||||
if len(args) > 1:
|
||||
msg = args[1]
|
||||
testApp = TestApp(message=msg)
|
||||
testApp.show()
|
||||
testApp.timer.start(3000)
|
||||
sys.exit(app.exec())
|
Loading…
Reference in New Issue
Block a user