mirror of https://github.com/xemu-project/xemu.git
tests/functional: Convert the m68k nextcube test with tesseract
The code that handles running of tesseract needs to be tweaked a little bit to be able to run without the functions from avocado.utils, and while we're at it, drop some legacy stuff that was still there due to Tesseract 3 support that we already dropped a while ago. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Message-ID: <20240830133841.142644-29-thuth@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
88c907199a
commit
576fffbc8e
|
@ -1282,6 +1282,7 @@ S: Odd Fixes
|
|||
F: hw/m68k/next-*.c
|
||||
F: hw/display/next-fb.c
|
||||
F: include/hw/m68k/next-cube.h
|
||||
F: tests/functional/test_m68k_nextcube.py
|
||||
|
||||
q800
|
||||
M: Laurent Vivier <laurent@vivier.eu>
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
# ...
|
||||
#
|
||||
# Copyright (c) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
# later. See the COPYING file in the top-level directory.
|
||||
|
||||
import re
|
||||
import logging
|
||||
|
||||
from avocado.utils import process
|
||||
from avocado.utils.path import find_command, CmdNotFoundError
|
||||
|
||||
def tesseract_available(expected_version):
|
||||
try:
|
||||
find_command('tesseract')
|
||||
except CmdNotFoundError:
|
||||
return False
|
||||
res = process.run('tesseract --version')
|
||||
try:
|
||||
version = res.stdout_text.split()[1]
|
||||
except IndexError:
|
||||
version = res.stderr_text.split()[1]
|
||||
return int(version.split('.')[0]) >= expected_version
|
||||
|
||||
match = re.match(r'tesseract\s(\d)', res)
|
||||
if match is None:
|
||||
return False
|
||||
# now this is guaranteed to be a digit
|
||||
return int(match.groups()[0]) >= expected_version
|
||||
|
||||
|
||||
def tesseract_ocr(image_path, tesseract_args='', tesseract_version=3):
|
||||
console_logger = logging.getLogger('tesseract')
|
||||
console_logger.debug(image_path)
|
||||
if tesseract_version == 4:
|
||||
tesseract_args += ' --oem 1'
|
||||
proc = process.run("tesseract {} {} stdout".format(tesseract_args,
|
||||
image_path))
|
||||
lines = []
|
||||
for line in proc.stdout_text.split('\n'):
|
||||
sline = line.strip()
|
||||
if len(sline):
|
||||
console_logger.debug(sline)
|
||||
lines += [sline]
|
||||
return lines
|
|
@ -43,6 +43,10 @@ tests_loongarch64_system_thorough = [
|
|||
'loongarch64_virt',
|
||||
]
|
||||
|
||||
tests_m68k_system_thorough = [
|
||||
'm68k_nextcube'
|
||||
]
|
||||
|
||||
tests_microblaze_system_thorough = [
|
||||
'microblaze_s3adsp1800'
|
||||
]
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
# ...
|
||||
#
|
||||
# Copyright (c) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
#
|
||||
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||
# later. See the COPYING file in the top-level directory.
|
||||
|
||||
import re
|
||||
import logging
|
||||
|
||||
from . import has_cmd, run_cmd
|
||||
|
||||
def tesseract_available(expected_version):
|
||||
if not has_cmd('tesseract'):
|
||||
return False
|
||||
(stdout, stderr, ret) = run_cmd([ 'tesseract', '--version'])
|
||||
if ret:
|
||||
return False
|
||||
version = stdout.split()[1]
|
||||
return int(version.split('.')[0]) >= expected_version
|
||||
|
||||
def tesseract_ocr(image_path, tesseract_args=''):
|
||||
console_logger = logging.getLogger('console')
|
||||
console_logger.debug(image_path)
|
||||
(stdout, stderr, ret) = run_cmd(['tesseract', image_path,
|
||||
'stdout'])
|
||||
if ret:
|
||||
return None
|
||||
lines = []
|
||||
for line in stdout.split('\n'):
|
||||
sline = line.strip()
|
||||
if len(sline):
|
||||
console_logger.debug(sline)
|
||||
lines += [sline]
|
||||
return lines
|
29
tests/avocado/machine_m68k_nextcube.py → tests/functional/test_m68k_nextcube.py
Normal file → Executable file
29
tests/avocado/machine_m68k_nextcube.py → tests/functional/test_m68k_nextcube.py
Normal file → Executable file
|
@ -1,3 +1,5 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that boots a VM and run OCR on the framebuffer
|
||||
#
|
||||
# Copyright (c) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org>
|
||||
|
@ -8,10 +10,10 @@
|
|||
import os
|
||||
import time
|
||||
|
||||
from avocado_qemu import QemuSystemTest
|
||||
from avocado import skipUnless
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
from unittest import skipUnless
|
||||
|
||||
from tesseract_utils import tesseract_available, tesseract_ocr
|
||||
from qemu_test.tesseract import tesseract_available, tesseract_ocr
|
||||
|
||||
PIL_AVAILABLE = True
|
||||
try:
|
||||
|
@ -21,19 +23,15 @@ except ImportError:
|
|||
|
||||
|
||||
class NextCubeMachine(QemuSystemTest):
|
||||
"""
|
||||
:avocado: tags=arch:m68k
|
||||
:avocado: tags=machine:next-cube
|
||||
:avocado: tags=device:framebuffer
|
||||
"""
|
||||
|
||||
timeout = 15
|
||||
|
||||
ASSET_ROM = Asset(('https://sourceforge.net/p/previous/code/1350/tree/'
|
||||
'trunk/src/Rev_2.5_v66.BIN?format=raw'),
|
||||
'1b753890b67095b73e104c939ddf62eca9e7d0aedde5108e3893b0ed9d8000a4')
|
||||
|
||||
def check_bootrom_framebuffer(self, screenshot_path):
|
||||
rom_url = ('https://sourceforge.net/p/previous/code/1350/tree/'
|
||||
'trunk/src/Rev_2.5_v66.BIN?format=raw')
|
||||
rom_hash = 'b3534796abae238a0111299fc406a9349f7fee24'
|
||||
rom_path = self.fetch_asset(rom_url, asset_hash=rom_hash)
|
||||
rom_path = self.ASSET_ROM.fetch()
|
||||
|
||||
self.vm.add_args('-bios', rom_path)
|
||||
self.vm.launch()
|
||||
|
@ -48,6 +46,7 @@ class NextCubeMachine(QemuSystemTest):
|
|||
|
||||
@skipUnless(PIL_AVAILABLE, 'Python PIL not installed')
|
||||
def test_bootrom_framebuffer_size(self):
|
||||
self.set_machine('next-cube')
|
||||
screenshot_path = os.path.join(self.workdir, "dump.ppm")
|
||||
self.check_bootrom_framebuffer(screenshot_path)
|
||||
|
||||
|
@ -60,11 +59,15 @@ class NextCubeMachine(QemuSystemTest):
|
|||
# that it is still alpha-level software.
|
||||
@skipUnless(tesseract_available(4), 'tesseract OCR tool not available')
|
||||
def test_bootrom_framebuffer_ocr_with_tesseract(self):
|
||||
self.set_machine('next-cube')
|
||||
screenshot_path = os.path.join(self.workdir, "dump.ppm")
|
||||
self.check_bootrom_framebuffer(screenshot_path)
|
||||
lines = tesseract_ocr(screenshot_path, tesseract_version=4)
|
||||
lines = tesseract_ocr(screenshot_path)
|
||||
text = '\n'.join(lines)
|
||||
self.assertIn('Testing the FPU', text)
|
||||
self.assertIn('System test failed. Error code', text)
|
||||
self.assertIn('Boot command', text)
|
||||
self.assertIn('Next>', text)
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
Loading…
Reference in New Issue