58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
#! /usr/bin/env python3
|
|
import pytest
|
|
import glob
|
|
import os
|
|
import sys
|
|
from test_expect_pragma import TestExpectPragmas, cat
|
|
|
|
HERE = os.path.dirname(os.path.realpath(__file__))
|
|
if HERE == os.path.realpath('.'):
|
|
HERE = '.'
|
|
TEST_DIR = HERE
|
|
IMPLEM_DIR = HERE
|
|
|
|
|
|
DISABLE_TYPECHECK = False # True to skip typechecking
|
|
|
|
ALL_FILES = []
|
|
# tests for typing AND evaluation
|
|
ALL_FILES += glob.glob(os.path.join(TEST_DIR, 'TP03/tests/provided/**/*.c'), recursive=True)
|
|
ALL_FILES += glob.glob(os.path.join(TEST_DIR, 'TP03/tests/students/**/*.c'), recursive=True)
|
|
|
|
|
|
# Path setting
|
|
if 'TEST_FILES' in os.environ:
|
|
ALL_FILES = glob.glob(os.environ['TEST_FILES'], recursive=True)
|
|
MINIC_EVAL = os.path.join(IMPLEM_DIR, 'MiniCC.py')
|
|
|
|
|
|
class TestInterpret(TestExpectPragmas):
|
|
|
|
def evaluate(self, file):
|
|
if not DISABLE_TYPECHECK:
|
|
return self.run_command([sys.executable, MINIC_EVAL, "--mode", "eval", file])
|
|
else:
|
|
return self.run_command([sys.executable, MINIC_EVAL, "--mode", "eval", "--disable-typecheck", file])
|
|
|
|
# Not in test_expect_pragma to get assertion rewritting
|
|
def assert_equal(self, actual, expected):
|
|
if expected.output is not None and actual.output is not None:
|
|
assert actual.output == expected.output, \
|
|
"Output of the program is incorrect."
|
|
assert actual.exitcode == expected.exitcode, \
|
|
"Exit code of the compiler is incorrect"
|
|
assert actual.execcode == expected.execcode, \
|
|
"Exit code of the execution is incorrect"
|
|
|
|
@pytest.mark.parametrize('filename', ALL_FILES)
|
|
def test_eval(self, filename):
|
|
cat(filename) # For diagnosis
|
|
expect = self.get_expect(filename)
|
|
eval = self.evaluate(filename)
|
|
if expect:
|
|
self.assert_equal(eval, expect)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
pytest.main(sys.argv)
|