From 20441edb79c9c3a402dc00a75f4b26f4ef44f808 Mon Sep 17 00:00:00 2001
From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com>
Date: Wed, 4 Mar 2026 00:28:34 -0500
Subject: [PATCH] Migrate smoke tests to use ESM Ember -- ES'Mber
---
pnpm-lock.yaml | 6 -
smoke-tests/node-template/package.json | 3 +-
.../node-template/tests/node/app-boot-test.js | 5 +-
.../tests/node/component-rendering-test.js | 4 +-
.../tests/node/fastboot-sandbox-test.js | 115 +++------
.../tests/node/fixtures/project.js | 112 ++++-----
.../tests/node/helpers/assert-html-matches.js | 39 ++-
.../tests/node/helpers/build-owner.js | 21 +-
.../tests/node/helpers/load-ember.js | 49 ----
.../tests/node/helpers/setup-app.js | 64 ++---
.../tests/node/helpers/setup-component.js | 36 +--
.../tests/node/instrumentation-test.js | 14 +-
.../tests/node/overrides-test.js | 233 +-----------------
.../tests/node/sourcemap-test.js | 10 +-
.../tests/node/template-compiler-test.js | 10 +-
.../node-template/tests/node/visit-test.js | 4 +-
16 files changed, 209 insertions(+), 516 deletions(-)
delete mode 100644 smoke-tests/node-template/tests/node/helpers/load-ember.js
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d8ca4d2ccc7..c60daa1ffd9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2960,18 +2960,12 @@ importers:
smoke-tests/node-template:
dependencies:
- git-repo-info:
- specifier: ^2.1.1
- version: 2.1.1
html-differ:
specifier: ^1.4.0
version: 1.4.0
qunit:
specifier: ^2.20.1
version: 2.25.0
- semver:
- specifier: ^7.6.0
- version: 7.7.4
simple-dom:
specifier: ^1.4.0
version: 1.4.0
diff --git a/smoke-tests/node-template/package.json b/smoke-tests/node-template/package.json
index c33b74d91c5..665ec7223f9 100644
--- a/smoke-tests/node-template/package.json
+++ b/smoke-tests/node-template/package.json
@@ -2,15 +2,14 @@
"name": "ember-test-node-template",
"version": "0.0.0",
"private": true,
+ "type": "module",
"description": "Node-focused smoke test template for ember-source",
"scripts": {
"test:node": "qunit tests/node/**/*-test.js"
},
"dependencies": {
- "git-repo-info": "^2.1.1",
"html-differ": "^1.4.0",
"qunit": "^2.20.1",
- "semver": "^7.6.0",
"simple-dom": "^1.4.0"
}
}
diff --git a/smoke-tests/node-template/tests/node/app-boot-test.js b/smoke-tests/node-template/tests/node/app-boot-test.js
index 6f16236bc3c..dcde0c444bb 100644
--- a/smoke-tests/node-template/tests/node/app-boot-test.js
+++ b/smoke-tests/node-template/tests/node/app-boot-test.js
@@ -1,6 +1,7 @@
-const setupAppTest = require('./helpers/setup-app');
+import setupAppTest from './helpers/setup-app.js';
+import { register } from './helpers/assert-html-matches.js';
-require('./helpers/assert-html-matches').register();
+register();
QUnit.module('App Boot', function (hooks) {
setupAppTest(hooks);
diff --git a/smoke-tests/node-template/tests/node/component-rendering-test.js b/smoke-tests/node-template/tests/node/component-rendering-test.js
index 826c9322ca4..80b1807b305 100644
--- a/smoke-tests/node-template/tests/node/component-rendering-test.js
+++ b/smoke-tests/node-template/tests/node/component-rendering-test.js
@@ -1,4 +1,4 @@
-const setupComponentTest = require('./helpers/setup-component');
+import setupComponentTest from './helpers/setup-component.js';
QUnit.module('Components can be rendered without a DOM dependency', function (hooks) {
setupComponentTest(hooks);
@@ -22,7 +22,7 @@ QUnit.module('Components can be rendered without a DOM dependency', function (ho
function (assert) {
this.owner.register(
'component:fake-link',
- class extends this.Ember.Component {
+ class extends this.Component {
tagName = 'link';
attributeBindings = ['href', 'rel'];
rel = 'canonical';
diff --git a/smoke-tests/node-template/tests/node/fastboot-sandbox-test.js b/smoke-tests/node-template/tests/node/fastboot-sandbox-test.js
index 741256e2211..05f897170e9 100644
--- a/smoke-tests/node-template/tests/node/fastboot-sandbox-test.js
+++ b/smoke-tests/node-template/tests/node/fastboot-sandbox-test.js
@@ -1,18 +1,23 @@
-const fs = require('fs');
-const vm = require('vm');
-const SimpleDOM = require('simple-dom');
-const { emberPath, loadEmber, clearEmber } = require('./helpers/load-ember');
+import SimpleDOM from 'simple-dom';
+import Application from 'ember-source/@ember/application/index.js';
+import EmberRouter from 'ember-source/@ember/routing/router.js';
+import { run } from 'ember-source/@ember/runloop/index.js';
+import { precompile } from 'ember-source/ember-template-compiler/index.js';
+import { createTemplateFactory } from 'ember-source/@ember/template-factory/index.js';
+
+function compile(templateString, options) {
+ let templateSpec = precompile(templateString, options);
+ return createTemplateFactory(JSON.parse(templateSpec));
+}
// This is based on what fastboot-server does
let HTMLSerializer = new SimpleDOM.HTMLSerializer(SimpleDOM.voidMap);
-async function fastbootVisit(context, url) {
+async function fastbootVisit(app, url) {
let doc = new SimpleDOM.Document();
let rootElement = doc.body;
let options = { isBrowser: false, document: doc, rootElement: rootElement };
- let { app } = context;
-
await app.boot();
let instance = await app.buildInstance();
@@ -31,84 +36,36 @@ async function fastbootVisit(context, url) {
}
}
-// essentially doing the same as what is done in FastBoot 3.1.0
-// https://github.com/ember-fastboot/fastboot/blob/v3.1.0/src/sandbox.js
-function buildSandboxContext(precompile) {
- let URL = require('url');
-
- let sandbox = {
- console,
- setTimeout,
- clearTimeout,
- URL,
-
- // Convince jQuery not to assume it's in a browser
- module: { exports: {}, require() {} },
- };
-
- // Set the global as `window`
- sandbox.window = sandbox;
- sandbox.window.self = sandbox;
-
- let context = vm.createContext(sandbox);
-
- let environmentSetupScript = new vm.Script(
- `
-var EmberENV = {
- _DEFAULT_ASYNC_OBSERVERS: true,
- _JQUERY_INTEGRATION: false,
-};`,
- { filename: 'prepend.js' }
- );
- environmentSetupScript.runInContext(context);
-
- let emberSource = fs.readFileSync(emberPath, { encoding: 'utf-8' });
- let emberScript = new vm.Script(emberSource, { filename: emberPath });
- emberScript.runInContext(context);
-
- let applicationSource = `
-let Ember = module.exports;
-
-class Router extends Ember.Router {}
-Router.map(function() {
- this.route('a');
- this.route('b');
-});
-
-const registry = {
- 'router:main': Router,
- 'template:application': ${precompile('
Hello world!
\n{{outlet}}')}
-};
-
-class Resolver extends Ember.Object {
- resolve(specifier) {
- return registry[specifier];
- }
-}
-
-var app = class extends Ember.Application {}.create({
- autoboot: false,
- Resolver,
-});
-`;
- let appScript = new vm.Script(applicationSource, { filename: 'app.js' });
- appScript.runInContext(context);
-
- return context;
-}
-
QUnit.module('Ember.Application - visit() Integration Tests', function (hooks) {
- hooks.beforeEach(function () {
- let { precompile } = loadEmber();
- this.context = buildSandboxContext(precompile);
- });
+ let app;
hooks.afterEach(function () {
- clearEmber();
+ if (app) {
+ run(app, 'destroy');
+ app = null;
+ }
});
QUnit.test('FastBoot: basic', async function (assert) {
- let result = await fastbootVisit(this.context, '/');
+ let Router = class extends EmberRouter {};
+ Router.map(function () {
+ this.route('a');
+ this.route('b');
+ });
+
+ let registry = {
+ 'router:main': Router,
+ 'template:application': compile('Hello world!
\n{{outlet}}'),
+ };
+
+ app = class extends Application {}.create({
+ autoboot: false,
+ Resolver: {
+ create: () => registry,
+ },
+ });
+
+ let result = await fastbootVisit(app, '/');
assert.equal(result.url, '/', 'landed on correct url');
assert.equal(
diff --git a/smoke-tests/node-template/tests/node/fixtures/project.js b/smoke-tests/node-template/tests/node/fixtures/project.js
index bcc867af91c..f927c0ca87e 100644
--- a/smoke-tests/node-template/tests/node/fixtures/project.js
+++ b/smoke-tests/node-template/tests/node/fixtures/project.js
@@ -1,59 +1,3 @@
-module.exports = class Project {
- static withDep(depOptions = {}, projectOptions = {}) {
- let addons = projectOptions.addons || [];
-
- return new Project({
- ...projectOptions,
- addons: [...addons, new Addon(depOptions)],
- });
- }
-
- static withTransientDep(transientDepOptions = {}, depOptions = {}, projectOptions = {}) {
- let addons = depOptions.addons || [];
-
- return Project.withDep(
- {
- ...depOptions,
- addons: [
- ...addons,
- new Addon({
- name: 'my-nested-addon',
- version: '0.1.0',
- ...transientDepOptions,
- }),
- ],
- },
- projectOptions
- );
- }
-
- constructor({
- name = 'my-app',
- emberCliBabel,
- dependencies = {},
- devDependencies = {},
- addons = [],
- } = {}) {
- this.name = () => name;
- this.parent = null;
- this.pkg = {
- name,
- dependencies: { ...dependencies },
- devDependencies: { ...devDependencies },
- };
- this.addons = [...addons];
-
- if (typeof emberCliBabel === 'string') {
- this.pkg.devDependencies['ember-cli-babel'] = emberCliBabel;
- }
-
- reifyAddons(this);
- addMissingAddons(this, this.pkg.devDependencies);
- addMissingAddons(this, this.pkg.dependencies);
- addMissingDeps(this, true);
- }
-};
-
class Addon {
constructor({
parent,
@@ -146,3 +90,59 @@ function addMissingDeps(parent, devDeps = false) {
}
}
}
+
+export default class Project {
+ static withDep(depOptions = {}, projectOptions = {}) {
+ let addons = projectOptions.addons || [];
+
+ return new Project({
+ ...projectOptions,
+ addons: [...addons, new Addon(depOptions)],
+ });
+ }
+
+ static withTransientDep(transientDepOptions = {}, depOptions = {}, projectOptions = {}) {
+ let addons = depOptions.addons || [];
+
+ return Project.withDep(
+ {
+ ...depOptions,
+ addons: [
+ ...addons,
+ new Addon({
+ name: 'my-nested-addon',
+ version: '0.1.0',
+ ...transientDepOptions,
+ }),
+ ],
+ },
+ projectOptions
+ );
+ }
+
+ constructor({
+ name = 'my-app',
+ emberCliBabel,
+ dependencies = {},
+ devDependencies = {},
+ addons = [],
+ } = {}) {
+ this.name = () => name;
+ this.parent = null;
+ this.pkg = {
+ name,
+ dependencies: { ...dependencies },
+ devDependencies: { ...devDependencies },
+ };
+ this.addons = [...addons];
+
+ if (typeof emberCliBabel === 'string') {
+ this.pkg.devDependencies['ember-cli-babel'] = emberCliBabel;
+ }
+
+ reifyAddons(this);
+ addMissingAddons(this, this.pkg.devDependencies);
+ addMissingAddons(this, this.pkg.dependencies);
+ addMissingDeps(this, true);
+ }
+}
diff --git a/smoke-tests/node-template/tests/node/helpers/assert-html-matches.js b/smoke-tests/node-template/tests/node/helpers/assert-html-matches.js
index 49cb64c23bb..9e8233c053c 100644
--- a/smoke-tests/node-template/tests/node/helpers/assert-html-matches.js
+++ b/smoke-tests/node-template/tests/node/helpers/assert-html-matches.js
@@ -1,27 +1,26 @@
-const { HtmlDiffer } = require('html-differ');
+import { HtmlDiffer } from 'html-differ';
+import QUnit from 'qunit';
const htmlDiffer = new HtmlDiffer({
ignoreAttributes: ['id'],
ignoreWhitespaces: true,
});
-module.exports = {
- /*
- * This assertion helper tests whether two fragments of Html 'appear'
- * to match. In terms of fragments rendered by Ember, we want to explicitly
- * ignore whitespace and certain attributes values, such as IDs, which Ember
- * auto-generates. Attribute ordering is also ignored.
- */
- register() {
- QUnit.assert.htmlMatches = function (actual, expected, message) {
- let isEqual = htmlDiffer.isEqual(actual, expected);
+/*
+ * This assertion helper tests whether two fragments of Html 'appear'
+ * to match. In terms of fragments rendered by Ember, we want to explicitly
+ * ignore whitespace and certain attributes values, such as IDs, which Ember
+ * auto-generates. Attribute ordering is also ignored.
+ */
+export function register() {
+ QUnit.assert.htmlMatches = function (actual, expected, message) {
+ let isEqual = htmlDiffer.isEqual(actual, expected);
- this.pushResult({
- result: isEqual,
- actual,
- expected,
- message,
- });
- };
- },
-};
+ this.pushResult({
+ result: isEqual,
+ actual,
+ expected,
+ message,
+ });
+ };
+}
diff --git a/smoke-tests/node-template/tests/node/helpers/build-owner.js b/smoke-tests/node-template/tests/node/helpers/build-owner.js
index 672a399838e..4394b31d5b0 100644
--- a/smoke-tests/node-template/tests/node/helpers/build-owner.js
+++ b/smoke-tests/node-template/tests/node/helpers/build-owner.js
@@ -1,7 +1,14 @@
-module.exports = function buildOwner(Ember, resolver) {
- let Owner = Ember.Object.extend(Ember._RegistryProxyMixin, Ember._ContainerProxyMixin);
+import EmberObject from 'ember-source/@ember/object/index.js';
+import Application from 'ember-source/@ember/application/index.js';
+import ApplicationInstance from 'ember-source/@ember/application/instance.js';
+import RegistryProxyMixin from 'ember-source/@ember/-internals/runtime/lib/mixins/registry_proxy.js';
+import ContainerProxyMixin from 'ember-source/@ember/-internals/runtime/lib/mixins/container_proxy.js';
+import { Registry } from 'ember-source/@ember/-internals/container/index.js';
- let namespace = Ember.Object.create({
+export default function buildOwner(resolver) {
+ let Owner = EmberObject.extend(RegistryProxyMixin, ContainerProxyMixin);
+
+ let namespace = EmberObject.create({
Resolver: {
create: function () {
return resolver;
@@ -9,12 +16,12 @@ module.exports = function buildOwner(Ember, resolver) {
},
});
- let fallbackRegistry = Ember.Application.buildRegistry(namespace);
- let registry = new Ember.Registry({
+ let fallbackRegistry = Application.buildRegistry(namespace);
+ let registry = new Registry({
fallback: fallbackRegistry,
});
- Ember.ApplicationInstance.setupRegistry(registry);
+ ApplicationInstance.setupRegistry(registry);
let owner = Owner.create({
__registry__: registry,
@@ -25,4 +32,4 @@ module.exports = function buildOwner(Ember, resolver) {
owner.__container__ = container;
return owner;
-};
+}
diff --git a/smoke-tests/node-template/tests/node/helpers/load-ember.js b/smoke-tests/node-template/tests/node/helpers/load-ember.js
deleted file mode 100644
index a625a599a5f..00000000000
--- a/smoke-tests/node-template/tests/node/helpers/load-ember.js
+++ /dev/null
@@ -1,49 +0,0 @@
-const path = require('path');
-
-const emberSourceRoot = path.dirname(require.resolve('ember-source/package.json'));
-const distPath = path.join(emberSourceRoot, 'dist');
-const emberPath = path.join(distPath, 'ember.debug.js');
-const templateCompilerPath = path.join(distPath, 'ember-template-compiler');
-
-// We store the global symbols beforehand so that we can reset the state
-// properly to avoid the @glimmer/validator assertion
-const originalGlobalSymbols = Object.getOwnPropertySymbols(global).map((sym) => [sym, global[sym]]);
-
-module.exports.emberPath = require.resolve(emberPath);
-
-module.exports.loadEmber = function () {
- let Ember = require(emberPath);
-
- let _precompile = require(templateCompilerPath).precompile;
-
- let precompile = function (templateString, options) {
- let templateSpec = _precompile(templateString, options);
-
- return `Ember.HTMLBars.template(${templateSpec})`;
- };
-
- let compile = function (templateString, options) {
- let templateSpec = _precompile(templateString, options);
- let template = new Function('return ' + templateSpec)();
-
- return Ember.HTMLBars.template(template);
- };
-
- return { Ember, compile, precompile };
-};
-
-module.exports.clearEmber = function () {
- delete global.Ember;
-
- Object.getOwnPropertySymbols(global).forEach((sym) => {
- delete global[sym];
- });
-
- originalGlobalSymbols.forEach(([sym, value]) => {
- global[sym] = value;
- });
-
- // clear the previously cached version of this module
- delete require.cache[emberPath + '.js'];
- delete require.cache[templateCompilerPath + '.js'];
-};
diff --git a/smoke-tests/node-template/tests/node/helpers/setup-app.js b/smoke-tests/node-template/tests/node/helpers/setup-app.js
index 0254933f12a..91bcf921a8b 100644
--- a/smoke-tests/node-template/tests/node/helpers/setup-app.js
+++ b/smoke-tests/node-template/tests/node/helpers/setup-app.js
@@ -1,17 +1,32 @@
/* eslint-disable no-console */
-const SimpleDOM = require('simple-dom');
-const { loadEmber, clearEmber } = require('./load-ember');
+import SimpleDOM from 'simple-dom';
+import Application from 'ember-source/@ember/application/index.js';
+import EmberRouter from 'ember-source/@ember/routing/router.js';
+import Component from 'ember-source/@ember/component/index.js';
+import { setComponentTemplate } from 'ember-source/@ember/component/index.js';
+import templateOnly from 'ember-source/@ember/component/template-only.js';
+import Controller from 'ember-source/@ember/controller/index.js';
+import Route from 'ember-source/@ember/routing/route.js';
+import EmberObject from 'ember-source/@ember/object/index.js';
+import { service } from 'ember-source/@ember/service/index.js';
+import { run } from 'ember-source/@ember/runloop/index.js';
+import RSVP from 'ember-source/@ember/-internals/runtime/lib/ext/rsvp.js';
+import { precompile } from 'ember-source/ember-template-compiler/index.js';
+import { createTemplateFactory } from 'ember-source/@ember/template-factory/index.js';
+
+function compile(templateString, options) {
+ let templateSpec = precompile(templateString, options);
+ return createTemplateFactory(JSON.parse(templateSpec));
+}
/*
* This helper sets up a QUnit test module with all of the environment and
* helper methods necessary to test an Ember.js application running in the
* server-side environment.
*
- * On each test, it loads a fresh version of the compiled Ember.js library
- * from `dist`, just like how FastBoot works. It uses the new `visit()` API
- * to simulate a FastBoot environment (enabling that feature flag if it is
- * not already turned on).
+ * It uses direct ESM imports from ember-source. It uses the `visit()` API
+ * to simulate a FastBoot environment.
*
* To test an app, register the objects that make up the app. For example,
* to register a component:
@@ -50,24 +65,19 @@ const { loadEmber, clearEmber } = require('./load-ember');
* `renderToHTML` returns a promise that resolves to the rendered HTML of the
* application.
*
- * return this.renderToHTML('/'photos).then(function(html) {
+ * return this.renderToHTML('/photos').then(function(html) {
* assert.ok(html.matches('Hello world
'));
* });
*/
-module.exports = function (hooks) {
+export default function (hooks) {
hooks.beforeEach(function () {
- let { Ember, compile } = loadEmber();
-
- this.Ember = Ember;
this.compile = compile;
- this.setComponentTemplate = Ember._setComponentTemplate;
- this.templateOnlyComponent = Ember._templateOnlyComponent;
-
- Ember.testing = true;
+ this.setComponentTemplate = setComponentTemplate;
+ this.templateOnlyComponent = templateOnly;
- this.run = Ember.run;
- this.all = Ember.RSVP.all;
+ this.run = run;
+ this.all = RSVP.all.bind(RSVP);
this.visit = visit;
this.createApplication = createApplication;
@@ -84,15 +94,13 @@ module.exports = function (hooks) {
hooks.afterEach(function () {
this.run(this.app, 'destroy');
-
- clearEmber();
});
-};
+}
function createApplication() {
if (this.app) return this.app;
- let app = class extends this.Ember.Application {}.create({
+ let app = class extends Application {}.create({
autoboot: false,
Resolver: {
create: (specifier) => {
@@ -101,7 +109,7 @@ function createApplication() {
},
});
- let Router = class extends this.Ember.Router {
+ let Router = class extends EmberRouter {
location = 'none';
};
@@ -171,27 +179,27 @@ function registerTemplate(name, template) {
function registerComponent(name, componentProps, templateContents) {
let component = this.setComponentTemplate(
this.compile(templateContents),
- componentProps ? this.Ember.Component.extend(componentProps) : this.templateOnlyComponent()
+ componentProps ? Component.extend(componentProps) : this.templateOnlyComponent()
);
this.register('component:' + name, component);
}
function registerController(name, controllerProps) {
- let controller = this.Ember.Controller.extend(controllerProps);
+ let controller = Controller.extend(controllerProps);
this.register('controller:' + name, controller);
}
function registerRoute(name, routeProps) {
- let route = this.Ember.Route.extend({
- router: this.Ember.inject.service('router'),
+ let route = Route.extend({
+ router: service('router'),
...routeProps,
});
this.register('route:' + name, route);
}
function registerService(name, serviceProps) {
- let service = this.Ember.Object.extend(serviceProps);
- this.register('service:' + name, service);
+ let svc = EmberObject.extend(serviceProps);
+ this.register('service:' + name, svc);
}
function registerRoutes(cb) {
diff --git a/smoke-tests/node-template/tests/node/helpers/setup-component.js b/smoke-tests/node-template/tests/node/helpers/setup-component.js
index 7f21d180a50..e02139422b6 100644
--- a/smoke-tests/node-template/tests/node/helpers/setup-component.js
+++ b/smoke-tests/node-template/tests/node/helpers/setup-component.js
@@ -1,18 +1,23 @@
-'use strict';
-
-const SimpleDOM = require('simple-dom');
-const buildOwner = require('./build-owner');
-const { loadEmber, clearEmber } = require('./load-ember');
+import SimpleDOM from 'simple-dom';
+import Component from 'ember-source/@ember/component/index.js';
+import { set } from 'ember-source/@ember/object/index.js';
+import { run } from 'ember-source/@ember/runloop/index.js';
+import { precompile } from 'ember-source/ember-template-compiler/index.js';
+import { createTemplateFactory } from 'ember-source/@ember/template-factory/index.js';
+import buildOwner from './build-owner.js';
+
+function compile(templateString, options) {
+ let templateSpec = precompile(templateString, options);
+ return createTemplateFactory(JSON.parse(templateSpec));
+}
-module.exports = function (hooks) {
+export default function (hooks) {
hooks.beforeEach(function () {
- let { Ember, compile } = loadEmber();
-
this.compile = compile;
- this.Ember = Ember;
+ this.Ember = { Component, set };
+ this.Component = Component;
- Ember.testing = true;
- this.run = Ember.run;
+ this.run = run;
setupComponentTest.call(this);
});
@@ -30,17 +35,14 @@ module.exports = function (hooks) {
this.run(this.owner, 'destroy');
this.owner = null;
- this.Ember = null;
-
- clearEmber();
});
-};
+}
function setupComponentTest() {
let module = this;
module.element = new SimpleDOM.Document();
- module.owner = buildOwner(this.Ember, { resolve: function () {} });
+ module.owner = buildOwner({ resolve: function () {} });
module.owner.register('service:-document', new SimpleDOM.Document(), {
instantiate: false,
});
@@ -70,7 +72,7 @@ function setupComponentTest() {
module.serializeElement = serializeElement;
module.set = function (property, value) {
module.run(function () {
- module.Ember.set(module, property, value);
+ set(module, property, value);
});
};
}
diff --git a/smoke-tests/node-template/tests/node/instrumentation-test.js b/smoke-tests/node-template/tests/node/instrumentation-test.js
index b6c5f665fff..b2f665e2a3a 100644
--- a/smoke-tests/node-template/tests/node/instrumentation-test.js
+++ b/smoke-tests/node-template/tests/node/instrumentation-test.js
@@ -1,20 +1,12 @@
-'use strict';
-
-const { loadEmber, clearEmber } = require('./helpers/load-ember');
-
-const { Ember } = loadEmber();
-
-QUnit.module('instrumentation', function (hooks) {
- hooks.afterEach(function () {
- clearEmber();
- });
+import { instrument } from 'ember-source/@ember/instrumentation/index.js';
+QUnit.module('instrumentation', function () {
QUnit.test('it works in FastBoot environment', function (assert) {
let _originalWindow = global.window;
global.window = {}; // mock window without `performance` property
- let result = Ember.instrument('render', {}, function () {
+ let result = instrument('render', {}, function () {
return 'hello';
});
diff --git a/smoke-tests/node-template/tests/node/overrides-test.js b/smoke-tests/node-template/tests/node/overrides-test.js
index 48161e50f90..9abb2c36fda 100644
--- a/smoke-tests/node-template/tests/node/overrides-test.js
+++ b/smoke-tests/node-template/tests/node/overrides-test.js
@@ -1,9 +1,10 @@
-'use strict';
+import { createRequire } from 'node:module';
+import { dirname, join } from 'node:path';
+import Project from './fixtures/project.js';
-const path = require('path');
-const emberSourceRoot = path.dirname(require.resolve('ember-source/package.json'));
-const Project = require('./fixtures/project');
-const Overrides = require(path.join(emberSourceRoot, 'lib', 'overrides'));
+const require = createRequire(import.meta.url);
+const emberSourceRoot = dirname(require.resolve('ember-source/package.json'));
+const Overrides = require(join(emberSourceRoot, 'lib', 'overrides'));
function cmp(a, b) {
if (a == undefined || a < b) {
@@ -107,26 +108,6 @@ function infoForApp({
};
}
-// function info({
-// parent,
-// topLevel = parent,
-// version = '7.26.6',
-// requirement = `^${version}`,
-// compatible = requirement.startsWith('^7'),
-// dormant = false,
-// path = [`${parent}@${version}`],
-// } = {}) {
-// return {
-// parent,
-// topLevel,
-// version,
-// requirement,
-// compatible,
-// dormant,
-// path,
-// };
-// }
-
QUnit.module('Overrides', function () {
QUnit.module('.addonsInfoFor', function () {
// app
@@ -586,206 +567,4 @@ QUnit.module('Overrides', function () {
assert.false(overrides.hasCompatibleAddons, 'hasCompatibleAddons');
assert.false(overrides.hasDormantAddons, 'hasDormantAddons');
});
-
- // let project, env;
-
- // function buildBabel(parent, version) {
- // return {
- // name: 'ember-cli-babel',
- // parent,
- // pkg: {
- // version,
- // },
- // addons: [],
- // };
- // }
-
- // hooks.beforeEach(function () {
- // project = {
- // name() {
- // return 'fake-project';
- // },
- // pkg: {
- // dependencies: {},
- // devDependencies: {},
- // },
- // addons: [],
- // };
- // env = Object.create(null);
- // });
-
- // hooks.afterEach(function () {});
-
- // QUnit.test('when in production, does nothing', function (assert) {
- // env.EMBER_ENV = 'production';
-
- // let result = globalDeprecationInfo(project, env);
-
- // assert.deepEqual(result, {
- // globalMessage: '',
- // hasActionableSuggestions: false,
- // shouldIssueSingleDeprecation: false,
- // bootstrap: `require('@ember/-internals/bootstrap').default()`,
- // });
- // });
-
- // QUnit.test('without addons, does nothing', function (assert) {
- // project.addons = [];
- // let result = globalDeprecationInfo(project, env);
-
- // assert.deepEqual(result, {
- // globalMessage: '',
- // hasActionableSuggestions: false,
- // shouldIssueSingleDeprecation: false,
- // bootstrap: `require('@ember/-internals/bootstrap').default()`,
- // });
- // });
-
- // QUnit.test('projects own ember-cli-babel is too old', function (assert) {
- // project.pkg.devDependencies = {
- // 'ember-cli-babel': '^7.26.0',
- // };
-
- // project.addons.push({
- // name: 'ember-cli-babel',
- // parent: project,
- // pkg: {
- // version: '7.26.5',
- // },
- // addons: [],
- // });
-
- // let result = globalDeprecationInfo(project, env);
- // assert.strictEqual(result.shouldIssueSingleDeprecation, true);
- // assert.strictEqual(result.hasActionableSuggestions, true);
- // assert.ok(
- // result.globalMessage.includes(
- // '* Upgrade your `devDependencies` on `ember-cli-babel` to `^7.26.6`'
- // )
- // );
- // });
-
- // QUnit.test('projects has ember-cli-babel in dependencies', function (assert) {
- // project.pkg.dependencies = {
- // 'ember-cli-babel': '^7.25.0',
- // };
-
- // project.addons.push({
- // name: 'ember-cli-babel',
- // parent: project,
- // pkg: {
- // version: '7.26.5',
- // },
- // addons: [],
- // });
-
- // let result = globalDeprecationInfo(project, env);
- // assert.strictEqual(result.shouldIssueSingleDeprecation, true);
- // assert.strictEqual(result.hasActionableSuggestions, true);
- // assert.ok(
- // result.globalMessage.includes(
- // '* Upgrade your `devDependencies` on `ember-cli-babel` to `^7.26.6`'
- // )
- // );
- // });
- // QUnit.test(
- // 'projects has no devDependencies, but old ember-cli-babel found in addons array',
- // function (assert) {
- // project.pkg.devDependencies = {};
-
- // project.addons.push({
- // name: 'ember-cli-babel',
- // parent: project,
- // pkg: {
- // version: '7.26.5',
- // },
- // addons: [],
- // });
-
- // let result = globalDeprecationInfo(project, env);
- // assert.strictEqual(result.shouldIssueSingleDeprecation, true);
- // assert.strictEqual(result.hasActionableSuggestions, true);
- // assert.ok(
- // result.globalMessage.includes(
- // '* Upgrade your `devDependencies` on `ember-cli-babel` to `^7.26.6`'
- // )
- // );
- // }
- // );
-
- // QUnit.test('projects uses linked ember-cli-babel', function (assert) {
- // project.pkg.devDependencies = {
- // 'ember-cli-babel': 'link:./some/path/here',
- // };
-
- // let otherAddon = {
- // name: 'other-thing-here',
- // parent: project,
- // pkg: {},
- // addons: [],
- // };
-
- // otherAddon.addons.push(buildBabel(otherAddon, '7.26.5'));
- // project.addons.push(buildBabel(project, '7.26.6'), otherAddon);
-
- // let result = globalDeprecationInfo(project, env);
- // assert.strictEqual(result.shouldIssueSingleDeprecation, true);
- // assert.strictEqual(result.hasActionableSuggestions, true);
-
- // assert.ok(
- // result.globalMessage.includes(
- // '* If using yarn, run `npx yarn-deduplicate --packages ember-cli-babel`'
- // )
- // );
- // assert.ok(result.globalMessage.includes('* If using npm, run `npm dedupe`'));
- // });
-
- // QUnit.test('projects own ember-cli-babel is up to date', function (assert) {
- // project.pkg.devDependencies = {
- // 'ember-cli-babel': '^7.26.0',
- // };
-
- // project.addons.push({
- // name: 'ember-cli-babel',
- // parent: project,
- // pkg: {
- // version: '7.26.6',
- // },
- // addons: [],
- // });
-
- // let result = globalDeprecationInfo(project, env);
- // assert.strictEqual(result.shouldIssueSingleDeprecation, false);
- // assert.strictEqual(result.hasActionableSuggestions, false);
- // assert.notOk(
- // result.globalMessage.includes(
- // '* Upgrade your `devDependencies` on `ember-cli-babel` to `^7.26.6`'
- // )
- // );
- // });
-
- // QUnit.test('transient babel that is out of date', function (assert) {
- // project.pkg.devDependencies = {
- // 'ember-cli-babel': '^7.26.0',
- // };
-
- // let otherAddon = {
- // name: 'other-thing-here',
- // parent: project,
- // pkg: {
- // dependencies: {
- // 'ember-cli-babel': '^7.25.0',
- // },
- // },
- // addons: [],
- // };
-
- // otherAddon.addons.push(buildBabel(otherAddon, '7.26.5'));
- // project.addons.push(buildBabel(project, '7.26.6'), otherAddon);
-
- // let result = globalDeprecationInfo(project, env);
- // assert.strictEqual(result.shouldIssueSingleDeprecation, true);
- // assert.strictEqual(result.hasActionableSuggestions, true);
- // assert.ok(result.globalMessage.includes('* other-thing-here@7.26.5 (Compatible)'));
- // });
});
diff --git a/smoke-tests/node-template/tests/node/sourcemap-test.js b/smoke-tests/node-template/tests/node/sourcemap-test.js
index a0051e3992d..689809479bc 100644
--- a/smoke-tests/node-template/tests/node/sourcemap-test.js
+++ b/smoke-tests/node-template/tests/node/sourcemap-test.js
@@ -1,11 +1,13 @@
-const fs = require('fs');
-const path = require('path');
+import fs from 'node:fs';
+import { createRequire } from 'node:module';
+import { dirname, join } from 'node:path';
-const emberSourceRoot = path.dirname(require.resolve('ember-source/package.json'));
+const require = createRequire(import.meta.url);
+const emberSourceRoot = dirname(require.resolve('ember-source/package.json'));
QUnit.module('sourcemap validation', function () {
QUnit.test(`ember.js has only a single sourcemaps comment`, function (assert) {
- let jsPath = path.join(emberSourceRoot, 'dist', 'ember.debug.js');
+ let jsPath = join(emberSourceRoot, 'dist', 'ember.debug.js');
assert.ok(fs.existsSync(jsPath));
let contents = fs.readFileSync(jsPath, 'utf-8');
diff --git a/smoke-tests/node-template/tests/node/template-compiler-test.js b/smoke-tests/node-template/tests/node/template-compiler-test.js
index 8ffa7c26119..8315b9bc139 100644
--- a/smoke-tests/node-template/tests/node/template-compiler-test.js
+++ b/smoke-tests/node-template/tests/node/template-compiler-test.js
@@ -1,14 +1,16 @@
-const path = require('path');
+import { createRequire } from 'node:module';
+import { dirname, join, resolve } from 'node:path';
-const emberSourceRoot = path.dirname(require.resolve('ember-source/package.json'));
-const distPath = path.join(emberSourceRoot, 'dist');
+const require = createRequire(import.meta.url);
+const emberSourceRoot = dirname(require.resolve('ember-source/package.json'));
+const distPath = join(emberSourceRoot, 'dist');
let templateCompiler;
QUnit.module('ember-template-compiler.js', function () {
QUnit.module('modern', function (hooks) {
hooks.beforeEach(function () {
- this.templateCompilerPath = path.resolve(path.join(distPath, 'ember-template-compiler.js'));
+ this.templateCompilerPath = resolve(join(distPath, 'ember-template-compiler.js'));
templateCompiler = require(this.templateCompilerPath);
});
diff --git a/smoke-tests/node-template/tests/node/visit-test.js b/smoke-tests/node-template/tests/node/visit-test.js
index 4b7dca9008a..59d9b42ac5b 100644
--- a/smoke-tests/node-template/tests/node/visit-test.js
+++ b/smoke-tests/node-template/tests/node/visit-test.js
@@ -1,5 +1,5 @@
-const SimpleDOM = require('simple-dom');
-const setupAppTest = require('./helpers/setup-app');
+import SimpleDOM from 'simple-dom';
+import setupAppTest from './helpers/setup-app.js';
function assertHTMLMatches(assert, actualHTML, expectedHTML) {
assert.ok(actualHTML.match(expectedHTML), actualHTML + ' matches ' + expectedHTML);