You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.3 KiB
Ruby
49 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# SPDX-License-Identifier: MIT OR Apache-2.0
|
|
#
|
|
# Copyright (c) 2019-2022 Andre Richter <andre.o.richter@gmail.com>
|
|
|
|
require 'pty'
|
|
require_relative 'test'
|
|
|
|
# A test doing console I/O with the QEMU binary.
|
|
class ConsoleIOTest < Test
|
|
def initialize(qemu_cmd, test_name, console_subtests)
|
|
super()
|
|
|
|
@qemu_cmd = qemu_cmd
|
|
@console_subtests = console_subtests
|
|
|
|
@test_name = test_name
|
|
@test_description = "Running #{@console_subtests.length} console I/O tests"
|
|
@test_output = []
|
|
@test_error = nil
|
|
end
|
|
|
|
private
|
|
|
|
def format_test_name(number, name)
|
|
formatted_name = "#{number.to_s.rjust(3)}. #{name}"
|
|
formatted_name.ljust(63, '.')
|
|
end
|
|
|
|
def run_subtest(subtest, test_id, qemu_out, qemu_in)
|
|
@test_output << format_test_name(test_id, subtest.name)
|
|
subtest.run(qemu_out, qemu_in)
|
|
@test_output.last.concat('[ok]')
|
|
end
|
|
|
|
def run_concrete_test
|
|
@test_error = false
|
|
|
|
PTY.spawn(@qemu_cmd) do |qemu_out, qemu_in|
|
|
@console_subtests.each_with_index do |t, i|
|
|
run_subtest(t, i + 1, qemu_out, qemu_in)
|
|
end
|
|
rescue StandardError => e
|
|
@test_error = e.message
|
|
end
|
|
end
|
|
end
|