diff --git a/addon/README.md b/addon/README.md index a561172d..fa2b5ffa 100644 --- a/addon/README.md +++ b/addon/README.md @@ -189,6 +189,13 @@ module.exports = function (defaults) { * removes the CSS for the test-container (where the app and components are rendered to) */ disableContainerStyles: true, + /** + * default: 'qunit-default' + * options: 'qunit-default' | 'ember' + * + * Sets the theme for the Web UI of the test runner. Use a different value to disable loading any theme, allowing you to provide your own external one. + */ + theme: 'qunit-default', }, }, }, diff --git a/addon/package.json b/addon/package.json index fedb21be..eafbb24a 100644 --- a/addon/package.json +++ b/addon/package.json @@ -43,7 +43,8 @@ "dependencies": { "@embroider/addon-shim": "^1.8.6", "@embroider/macros": "^1.13.1", - "ember-cli-test-loader": "^3.1.0" + "ember-cli-test-loader": "^3.1.0", + "qunit-theme-ember": "^1.0.0" }, "devDependencies": { "@babel/core": "^7.23.2", diff --git a/addon/src/index.js b/addon/src/index.js index afe79323..728604ba 100644 --- a/addon/src/index.js +++ b/addon/src/index.js @@ -1,12 +1,27 @@ /* globals Testem */ -import 'qunit/qunit/qunit.css'; - import { macroCondition, getOwnConfig, importSync } from '@embroider/macros'; +/** + * Load qunit-default theme by default, if no custom theme is specified. + */ +if ( + macroCondition( + getOwnConfig()?.theme === undefined || + getOwnConfig()?.theme === 'qunit-default' || + getOwnConfig()?.theme === 'ember' + ) +) { + importSync('qunit/qunit/qunit.css'); +} + if (macroCondition(!getOwnConfig()?.disableContainerStyles)) { importSync('./test-container-styles.css'); } +if (macroCondition(getOwnConfig()?.theme === 'ember')) { + importSync('qunit-theme-ember/qunit.css'); +} + export { default as QUnitAdapter, nonTestDoneCallback } from './adapter'; export { loadTests } from './test-loader'; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9fd1fed7..2a1419bf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,6 +19,9 @@ importers: ember-cli-test-loader: specifier: ^3.1.0 version: 3.1.0 + qunit-theme-ember: + specifier: ^1.0.0 + version: 1.0.0 devDependencies: '@babel/core': specifier: ^7.23.2 @@ -11398,6 +11401,10 @@ packages: - supports-color dev: true + /qunit-theme-ember@1.0.0: + resolution: {integrity: sha512-vdMVVo6ecdCkWttMTKeyq1ZTLGHcA6zdze2zhguNuc3ritlJMhOXY5RDseqazOwqZVfCg3rtlmL3fMUyIzUyFQ==} + dev: false + /qunit@2.20.0: resolution: {integrity: sha512-N8Fp1J55waE+QG1KwX2LOyqulZUToRrrPBqDOfYfuAMkEglFL15uwvmH1P4Tq/omQ/mGbBI8PEB3PhIfvUb+jg==} engines: {node: '>=10'} @@ -13906,6 +13913,7 @@ packages: ember-cli-test-loader: 3.1.0 ember-source: 5.0.0(@babel/core@7.23.2)(@glimmer/component@1.1.2)(webpack@5.86.0) qunit: 2.20.0 + qunit-theme-ember: 1.0.0 transitivePeerDependencies: - '@glint/template' - supports-color diff --git a/test-buildtime-options-app/ember-cli-build.js b/test-buildtime-options-app/ember-cli-build.js index f5ba7f7a..b7eba20c 100644 --- a/test-buildtime-options-app/ember-cli-build.js +++ b/test-buildtime-options-app/ember-cli-build.js @@ -11,6 +11,7 @@ module.exports = function (defaults) { setConfig: { 'ember-qunit': { disableContainerStyles: true, + theme: 'qunit-default', }, }, }, diff --git a/test-buildtime-options-app/tests/unit/theme-test.js b/test-buildtime-options-app/tests/unit/theme-test.js new file mode 100644 index 00000000..a6b8daa3 --- /dev/null +++ b/test-buildtime-options-app/tests/unit/theme-test.js @@ -0,0 +1,17 @@ +import { module, test } from 'qunit'; +import { assert as debugAssert } from '@ember/debug'; + +module('theme', function () { + function style(element) { + return window.getComputedStyle(element); + } + + test('the qunit-default themes are present when used', async function (assert) { + let qunitHeader = document.getElementById('qunit-header'); + + debugAssert(`#qunit-header must exist`, qunitHeader); + + // Defaults + assert.strictEqual(style(qunitHeader).backgroundColor, 'rgb(13, 51, 73)'); + }); +});