lukujarjestaja/testit.js

96 lines
2.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
let testit = [];
function testi(nimi, funktio) {
testit.push([nimi, funktio]);
}
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;
}
}
function assertEq(konteksti, a, b) {
if (!ovatkoSama(a, b)) {
throw new Error(`${konteksti}: ${a}, pitäisi olla ${b}`);
}
}
function assertNe(konteksti, a, b) {
if (ovatkoSama(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`;
}
}