-
Notifications
You must be signed in to change notification settings - Fork 11
Automatické testy
Celá funkce se situována do jednoho skriptu v jazyce Python
. Pro výchozí funkci je nutno předat cestu ke spustitelnému kompilátoru jazyka IFJ17
do jazyka IFJcode17
, tedy například takto:
$ python3 test.py ./ifj2017
kde ./ifj2017
je cesta ke kompilátoru, tedy například ~/school/fit/ifj/ifj2017
.
Takto spuštěný skript automaticky projde implictině složku tests
a provede následující sekvenci příkazů (viz struktura testů níže):
- pomocí předaného kompilátoru spustí kompilaci testovaného kódu v jazyce
IFJ17
do jazykaIFJcode17
- zkontroluje návratovou hodnotu
- v případě, že je navrácená nebo očekávaná hodnota kompilátoru nenulová, je běh testu ukončen
- spustí přibalený interpret jazyka
IFJcode17
, kterému volitelně předá na standardní vstup definovaný obsah - zkontroluje návratový kód interpretu vůči požadovanému
- v případě, že je navrácená nebo očekávaná hodnota interpretu nenulová, je běh testu ukončen
- zkontroluje obsah vypsaný na standardní výstup vůči požadovanému
Ve všech případech jsou očekávané hodnoty i jejich reálné protějšky zalogovány.
Výsledek spuštění tedy poté může vypadat nějak takto:
Veškeré informace k definici a struktuře testů lze nalézt na stránce Definice testů.
Pro každý test spouštěč zaloguje soubor do logovací složku (výchozí log
) výsledky z testu. Tento soubor obsahuje veškeré dostupné informace o běhu kompilátoru, jeho výstup v jazyce IFJcode17
i veškeré informace z běhu interpretu. Soubor logu jako takový je validní zdrojový kód jazyka IFJcode17
, lze jej tedy přidat interpretu přímo (při standardní běhu je interpretu předáno pouze to, co reálně vypíše kompilátor). Struktura zalogovaných informací je následující, myslíme, že ji není třeba dodatečně popisovat:
# TEST: 01
# INFO: Basic test for scope without any statements.
# INTERPRETER STDIN:
#
#
# COMPILER STDERR:
#
# INTERPRETER STDERR:
# Executing instruction: IJUMP at line: 2 with following arguments:
# Executing instruction: ILABEL at line: 3 with following arguments:
#
#
# EXPECTED INTERPRETER STDOUT:
#
# CURRENT INTERPRETER STDOUT:
#
#
# EXPECTED COMPILER EXIT CODE: 0
# CURRENT COMPILER EXIT CODE: 0
# EXPECTED INTERPRETER EXIT CODE: 0
# CURRENT INTERPRETER EXIT CODE: 0
#
# ' Basic test for scope without any statements.
# SCOPE
# END SCOPE
# # # # # # # # # # # # # # # # # # # #
.IFJcode17
CALL scope
LABEL scope
Spouštěč testů lze dále také konfigurovat pomocí příkazové řádky, viz nápověda po zadání argumentu -h
:
./test.py -h
usage: test.py [-h] [-i INTERPRETER] [-d TESTS_DIR] [-l LOG_DIR]
[--command-timeout COMMAND_TIMEOUT]
compiler
Automatic test cases runner for IFJ17 compiler.
positional arguments:
compiler path to IFJ17 compiler binary
optional arguments:
-h, --help show this help message and exit
-i INTERPRETER, --interpreter INTERPRETER
path to IFJ17 interpreter binary
-d TESTS_DIR, --tests-dir TESTS_DIR
path to folder with tests to run
-l LOG_DIR, --log-dir LOG_DIR
path to folder with logs
--command-timeout COMMAND_TIMEOUT
maximal timeout for compiler and interpreter
Authors: Josef Kolář (xkolar71, @thejoeejoee), Son Hai Nguyen (xnguye16,
@SonyPony), GNU GPL v3, 2017