mirror of
https://github.com/AdaCore/gsh.git
synced 2026-02-12 12:27:10 -08:00
68 lines
2.1 KiB
Python
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()
|