lukujarjestaja/testit.js

96 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-08-02 17:12:15 +00:00
'use strict';
let testit = [];
function testi(nimi, funktio) {
testit.push([nimi, funktio]);
}
2023-08-07 14:56:48 +00:00
function ovatkoSama(a, b) {
// Strukturaalinen yhteneväisyysvertaus Array:lle
if (a instanceof Array && b instanceof Array && a.length === b.length) {
for (let i = 0; i < a.length; i++) {
if (!ovatkoSama(a[i], b[i])) {
return false;
}
}
return true;
} else {
return a === b;
}
}
2023-08-02 17:12:15 +00:00
function assertEq(konteksti, a, b) {
2023-08-07 14:56:48 +00:00
if (!ovatkoSama(a, b)) {
2023-08-02 17:12:15 +00:00
throw new Error(`${konteksti}: ${a}, pitäisi olla ${b}`);
}
}
function assertNe(konteksti, a, b) {
2023-08-07 14:56:48 +00:00
if (ovatkoSama(a, b)) {
2023-08-02 17:12:15 +00:00
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`;
}
}