76 lines
1.8 KiB
JavaScript
76 lines
1.8 KiB
JavaScript
import ImageRegion from './image/ImageRegion.mjs';
|
|
import SequenceDiagram from '../scripts/sequence/SequenceDiagram.mjs';
|
|
|
|
const RESOLUTION = 4;
|
|
|
|
const SAMPLE_REGEX = new RegExp(
|
|
/(?:<img src="([^"]*)"[^>]*>[\s]*)?```(?!shell).*\n([^]+?)```/g
|
|
);
|
|
|
|
const SCREENSHOT_BLACKLIST = [
|
|
// Renders differently but correctly in different browsers
|
|
'screenshots/Themes.png',
|
|
];
|
|
|
|
function readError(err) {
|
|
if(typeof err === 'object' && err.message) {
|
|
return err.message;
|
|
} else {
|
|
return err;
|
|
}
|
|
}
|
|
|
|
function findSamples(content) {
|
|
SAMPLE_REGEX.lastIndex = 0;
|
|
const results = [];
|
|
for(;;) {
|
|
const match = SAMPLE_REGEX.exec(content);
|
|
if(!match) {
|
|
break;
|
|
}
|
|
results.push({
|
|
code: match[2],
|
|
file: match[1],
|
|
});
|
|
}
|
|
return results;
|
|
}
|
|
|
|
function performSampleTests({file, code}, index) {
|
|
if(file && !SCREENSHOT_BLACKLIST.includes(file)) {
|
|
let actual = null;
|
|
return new SequenceDiagram(code)
|
|
.getCanvas({resolution: RESOLUTION})
|
|
.then((c) => {
|
|
actual = ImageRegion
|
|
.fromCanvas(c)
|
|
.resize({width: 150});
|
|
})
|
|
.then(() => ImageRegion.loadURL(
|
|
file,
|
|
{height: actual.height, width: actual.width}
|
|
))
|
|
.then((expected) => {
|
|
expect(actual).toLookLike(expected, {
|
|
details: '#' + (index + 1) + ' compared to ' + file,
|
|
});
|
|
});
|
|
} else {
|
|
expect(() => new SequenceDiagram(code)).not.toThrow();
|
|
return Promise.resolve();
|
|
}
|
|
}
|
|
|
|
describe('Readme', () => {
|
|
/* eslint-disable jasmine/missing-expect */ // See performSampleTests
|
|
it('renders all samples correctly', (done) => {
|
|
/* eslint-enable jasmine/missing-expect */
|
|
fetch('README.md')
|
|
.then((response) => response.text())
|
|
.then(findSamples)
|
|
.then((samples) => Promise.all(samples.map(performSampleTests)))
|
|
.catch((err) => Promise.reject(readError(err)))
|
|
.then(done, done.fail);
|
|
});
|
|
});
|