82 lines
2.1 KiB
JavaScript
82 lines
2.1 KiB
JavaScript
|
'use strict';
|
|||
|
let testit = [];
|
|||
|
|
|||
|
function testi(nimi, funktio) {
|
|||
|
testit.push([nimi, funktio]);
|
|||
|
}
|
|||
|
|
|||
|
function assertEq(konteksti, a, b) {
|
|||
|
if (a !== b) {
|
|||
|
throw new Error(`${konteksti}: ${a}, pitäisi olla ${b}`);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function assertNe(konteksti, a, b) {
|
|||
|
if (a === b) {
|
|||
|
throw new Error(`${konteksti}: ei tulisi olla ${b}`);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function assertRange(konteksti, a, min, max) {
|
|||
|
if (a < min || a > max) {
|
|||
|
throw new Error(`${konteksti}: ${a}, pitäisi olla välillä [${min}, ${max}]`);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function assertThrow(konteksti, viesti, funktio) {
|
|||
|
try {
|
|||
|
funktio();
|
|||
|
} catch(poikkeus) {
|
|||
|
if (poikkeus.message !== viesti) {
|
|||
|
throw new Error(`${konteksti}: poikkeus "${poikkeus}", pitäisi olla "${viesti}"`);
|
|||
|
}
|
|||
|
return;
|
|||
|
}
|
|||
|
throw new Error(`${konteksti}: pitäisi heittää "${viesti}"`);
|
|||
|
}
|
|||
|
|
|||
|
function ajaTestit() {
|
|||
|
// Luo otsikko ja lista testeistä sivulle
|
|||
|
let otsikkoTeksti = document.createTextNode('Testit käynnissä…');
|
|||
|
let otsikko = document.createElement('h1');
|
|||
|
otsikko.id = 'testit-otsikko';
|
|||
|
otsikko.appendChild(otsikkoTeksti);
|
|||
|
|
|||
|
let testilista = document.createElement('ul');
|
|||
|
testilista.id = 'testit-lista';
|
|||
|
|
|||
|
let body = document.getElementsByTagName('body')[0];
|
|||
|
body.appendChild(otsikko);
|
|||
|
body.appendChild(testilista);
|
|||
|
|
|||
|
// Aja testit
|
|||
|
let epäonnistuneitaTestejä = 0;
|
|||
|
for (let [nimi, funktio] of testit) {
|
|||
|
// Lisää testi listaan
|
|||
|
let testiListassa = document.createElement('li');
|
|||
|
let testiTeksti = document.createTextNode(`${nimi} …`);
|
|||
|
testiListassa.appendChild(testiTeksti);
|
|||
|
testilista.appendChild(testiListassa);
|
|||
|
|
|||
|
try {
|
|||
|
funktio();
|
|||
|
} catch (poikkeus) {
|
|||
|
// Virhe testiä suoritettaessa — kerro virhe käyttäjälle ja päivitä
|
|||
|
// epäonnistuneiden testien laskuria
|
|||
|
testiTeksti.textContent = `${nimi}: ${poikkeus}`;
|
|||
|
testiListassa.classList.add('testit-epäonnistunut');
|
|||
|
epäonnistuneitaTestejä++;
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
testiTeksti.textContent = `${nimi}`;
|
|||
|
}
|
|||
|
|
|||
|
// Päivitä otsikko – onnistuivatko testit?
|
|||
|
if (epäonnistuneitaTestejä === 0) {
|
|||
|
otsikko.textContent = 'Testit suoritettu onnistuneesti';
|
|||
|
} else {
|
|||
|
otsikko.textContent = `${epäonnistuneitaTestejä} epäonnistui`;
|
|||
|
}
|
|||
|
}
|