Files
gsh/testsuite/drivers/shell_script.py
Nicolas Roche 4e9db3e5da adapt gsh testsuite to e3 testsuite
TN: U112-008

Change-Id: I736ea0a3e91027473575dc7aad4fc22495073664
2021-02-05 09:18:47 +01:00

68 lines
2.1 KiB
Python

from e3.fs import sync_tree
from e3.testsuite.result import TestStatus
from drivers import GNATcollTestDriver
from drivers.valgrind import check_call_valgrind
from e3.diff import diff
from e3.os.fs import unixpath
import os
class ShellScriptDriver(GNATcollTestDriver):
"""Default GNATcoll testsuite driver.
In order to declare a test:
1- Create a directory with a test.yaml inside
2- Add test sources in that directory
3- Add a main called test.adb that use support/test_assert.ads package.
4- Do not put test.gpr there, it breaks the test, if you need a project
file for testing, name it something else.
5- If you need additional files for you test, list them in test.yaml:
data:
- "your_file1"
- "your_file2"
"""
def add_test(self, dag):
"""Declare test workflow.
The workflow is the following::
build --> check status
:param dag: tree of test fragment to amend
:type dag: e3.collection.dag.DAG
"""
self.add_fragment(dag, 'check_run')
def check_run(self, previous_values, slot):
"""Check status fragment."""
skip = self.should_skip()
if skip is not None:
self.result.set_status(skip)
self.push_result()
return False
sync_tree(self.test_env['test_dir'],
self.test_env['working_dir'])
process = check_call_valgrind(
self,
[self.env.gsh, './test.sh'],
timeout=self.process_timeout)
with open(os.path.join(self.test_env['test_dir'],
'test.out'), 'r') as fd:
expected_output = fd.read()
actual_output = process.out.replace(self.test_env['working_dir'], '')
actual_output = actual_output.replace('\\', '/')
actual_output = actual_output.replace(
unixpath(self.test_env['working_dir']),
'')
d = diff(actual_output, expected_output)
if not d:
self.result.set_status(TestStatus.PASS)
else:
self.result.set_status(TestStatus.FAIL, d)
self.push_result()