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);