Files
Matthew Dean 432286970a [Needs reviews!] Mega test refactor (#4378)
* Migrate Less to use valid CSS

* Re-organize test structure

* Lots of test refactoring

* More test updates

* Add restructured tests

* WIP

Signed-off-by: Matthew Dean <matthew-dean@users.noreply.github.com>

* More fixes to tests

* More test fixes

* All tests passing

* WIP fix tests

* Finished fixing browser tests

* Improve test coverage

* Add debug tests

* Add back debug tests to show equal test coverage

* Fix browser tests

* More test coverage

* Fix sourcemap absolute path for CI

* More source map normalization for Windows

* Fix source map normalization

* Another attempted fix for Windows

---------

Signed-off-by: Matthew Dean <matthew-dean@users.noreply.github.com>
2025-12-06 11:28:46 -08:00

104 lines
3.6 KiB
JavaScript

const html = require('html-template-tag')
const path = require('path')
const { forceCovertToBrowserPath } = require('./utils')
const webRoot = path.resolve(__dirname, '../../../../../');
const mochaDir = forceCovertToBrowserPath(path.relative(webRoot, path.dirname(require.resolve('mocha'))))
const chaiDir = forceCovertToBrowserPath(path.relative(webRoot, path.dirname(require.resolve('chai'))))
const mochaTeamCityDir = forceCovertToBrowserPath(path.relative(webRoot, path.dirname(require.resolve('mocha-teamcity-reporter'))))
/**
* Generates HTML templates from list of test sheets
*/
module.exports = (stylesheets, helpers, spec, less) => {
if (!Array.isArray(helpers)) {
helpers = [helpers]
}
return html`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Less.js Spec Runner</title>
<!-- for each test, generate CSS/LESS link tags -->
$${stylesheets.map(function(fullLessName) {
var pathParts = fullLessName.split('/');
var fullCssName = fullLessName.replace(/less$/, 'css');
// Check if the CSS file exists in the same directory as the LESS file
var fs = require('fs');
var cssExists = fs.existsSync(fullCssName);
// If not, try the css/ directory for local browser tests
if (!cssExists && fullLessName.includes('/test/browser/less/')) {
var cssInCssDir = fullLessName.replace('/test/browser/less/', '/test/browser/css/').replace(/less$/, 'css');
if (fs.existsSync(cssInCssDir)) {
fullCssName = cssInCssDir;
}
}
var lessName = pathParts[pathParts.length - 1];
var name = lessName.split('.')[0];
return `
<!-- the tags to be generated -->
<link id="original-less:test-less-${name}" title="test-less-${name}" rel="stylesheet/less" type="text/css" href="/${path.relative(webRoot, fullLessName)}">
<link id="expected-less:test-less-${name}" rel="stylesheet" type="text/css" href="/${path.relative(webRoot, fullCssName)}">
` }).join('')}
$${helpers.map(helper => `
<script src="../../${helper}"></script>
`).join('')}
<link rel="stylesheet" href="/${mochaDir}/mocha.css">
</head>
<body>
<!-- content -->
<div id="mocha"></div>
<script src="/${mochaDir}/mocha.js"></script>
<script src="/${mochaTeamCityDir}/teamcityBrowser.js"></script>
<script src="/${chaiDir}/chai.js"></script>
<script>
expect = chai.expect
mocha.setup({
ui: 'bdd',
timeout: 2500
});
</script>
<script src="common.js"></script>
<script src="../../${spec}"></script>
<script src="${less || 'less.min.js'}"></script>
<script>
/** Saucelabs config */
onload = function() {
var runner = mocha.run();
var failedTests = [];
runner.on('end', function() {
window.mochaResults = runner.stats;
window.mochaResults.reports = failedTests;
});
runner.on('fail', logFailure);
function logFailure(test, err){
var flattenTitles = function(test){
var titles = [];
while (test.parent.title) {
titles.push(test.parent.title);
test = test.parent;
}
return titles.reverse();
};
failedTests.push({name: test.title, result: false, message: err.message, stack: err.stack, titles: flattenTitles(test) });
};
};
</script>
</body>
</html>
`
}