-
Notifications
You must be signed in to change notification settings - Fork 11
Definice testů
Testy jsou rozděleny do sekcí dle složkového rozdělení v hlavní složce testů - sekce oddělují jednotlivé obsahy a náročnosti testů:
tests
├── 001_basic
└── 002_flow_controls
Každý test obsahuje následující data:
- kód v jazyce
IFJ17
- název volitelně
- popis volitelně
- očekávaný návratový kód kompilátoru volitelně, výchozí
0
- očekávaný návratový kód interpretu volitelně, výchozí
0
- očekávaný standardní výstup z běhu volitelně, výchozí prázdný
Testové jednotky lze definovat dvěma způsoby.
Jedná se o definici, při které jsou jednotlivé položky testovací jednotky uloženy jako soubory se shodným názvem:
tests/001_basic/
├── 01.code # kód ke zpracování
├── 01.cexitcode # očekávaný návratový kód kompilátoru
├── 01.iexitcode # očekávaný návratový kód interpretu
├── 01.stdin # standardní vstup předaný pro běh programu
├── 01.stdout # očekávaný standardní výstup běhu programu
|
└── 02_foo.code # další testová jednotka
Název testu je získán z názvu souboru, v tomto případě se jedná o 01
, popis může být udán jako jednořádkový komentář na začátku souboru 01.code
, resp. souboru definující test. Tento způsob slouží především pro složitější a komplexnější testy s předem očekávaným neprázdným výstupem.
Každá testovací sekce může také obsahovat soubor s pevným názvem tests.json
. Ten definuje testové jednotky velmi obdobným systémem, avšak agregovaně:
{
"tests": [
{
"info": "empty scope",
"code": "scope \n end scope",
"stdout": ""
},
{
"name": "syntax error",
"code": "scope \n end scoppe",
"stdin": "foobar",
"compiler_exit_code": 2
},
{
"info": "syntax error as scoppe",
"code": "scope \n dim a as string \n dim a as integer \n end scope",
"interpreter_exit_code": 3
}
]
}
Z vlastností testů je opět povinný pouze code
, tedy definice kódu pro zpracování - ten lze ovšem definovat i pomocí souboru s názvem <name>.code
, dle klíče name
v definici v JSON. Klíče info
, name
, compiler_exit_code
, interpreter_exit_code
, stdin
a stdout
opět nejsou povinné a jsou doplněný dle výchozích hodnot definovaných ve struktuře testů. Všechny hodnoty, kromě name
, lze také definovat pomocí souborů, dle identické konvence jako v případě definice po souborech.
V případě, že existuje definice jak v JSON, tak v souboru, prioritu má definice v JSON.
V případě, že test požaduje zapnuté některé z rozšířeních, lze toto definovat přímo v definice testu, tedy například takto:
{
"name": "07",
"stdout": " 753",
"extensions": ["IFTHEN"]
}
Případně lze také definovat testy požadované pro celou sekci:
{
"tests": [...],
"extensions": ["BOOLOP"]
}
K aktivování těchto testů je poté potřeba předat cestu k souboru rozsireni
, dle dokumentace ke spouštěči.