Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 29 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,19 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-environment
- run: pnpm lint
- name: Lint
run: pnpm lint

test:
name: "test (node: ${{matrix.node-version}}, os: ${{matrix.os}})"
name: "Test (Node: ${{matrix.node-version}}, OS: ${{matrix.os}})"
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-environment
with:
node-version: ${{matrix.node-version}}
- run: pnpm test:coverage
- name: Run tests with coverage
run: pnpm test:coverage
strategy:
fail-fast: false
matrix:
Expand All @@ -35,3 +37,27 @@ jobs:
- macos-latest
- ubuntu-latest
- windows-latest

smoke-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-environment
- name: Build gember
run: pnpm build
- name: Create test app
run: pnpm dlx ember-cli@latest new test-app -b @ember/app-blueprint --pnpm --skip-git
- name: Run generators in test-app
run: |
node bin/gember.js component foo --cwd=test-app
node bin/gember.js component-test foo --cwd=test-app
node bin/gember.js helper foo --cwd=test-app
node bin/gember.js helper-test foo --cwd=test-app
node bin/gember.js modifier foo --cwd=test-app
node bin/gember.js modifier-test foo --cwd=test-app
node bin/gember.js service foo --cwd=test-app
node bin/gember.js service-test foo --cwd=test-app
- name: Run tests in test app
run: |
cd test-app
pnpm test
17 changes: 13 additions & 4 deletions src/generator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ensureDir, pathExists, readJson } from "fs-extra/esm";
import Handlebars from "handlebars";
import { readFile, writeFile } from "node:fs/promises";
import { dirname, join, relative } from "node:path";
import { cwd, env } from "node:process";
import { cwd as processCwd, env } from "node:process";
import { fileURLToPath } from "node:url";
import { resolveConfig, type Config } from "./config.js";
import { FileReference } from "./file-reference.js";
Expand Down Expand Up @@ -60,12 +60,12 @@ export function defineGenerator({
name,
}: GeneratorOptions): Generator {
const generatorName = name;
const generatorArgs = [copy(), log(), ...args]
const generatorArgs = [copy(), cwd(), log(), ...args]
.map((argFactory) => argFactory(generatorName))
.sort((a, b) => a.name.localeCompare(b.name));

async function run(args: Args): Promise<void> {
const packagePath = cwd();
const packagePath = args.cwd ?? processCwd();
const packageJson: EmberPackageJson = await readJson(
join(packagePath, "package.json"),
);
Expand Down Expand Up @@ -119,7 +119,8 @@ export function defineGenerator({
const templateCompiled = template({
name: {
...entityNameCases,
pathMaybeQuoted: /(-|\/)/.test(entityNameCases.path)
camelCurlyBrackets: `{{${entityNameCases.camel}}}`,
pathMaybeQuotes: /(-|\/)/.test(entityNameCases.path)
? `"${entityNameCases.path}"`
: entityNameCases.path,
signature: entityNameCases.pascal + "Signature",
Expand Down Expand Up @@ -252,6 +253,14 @@ export function copy(): GeneratorArgFactory {
});
}

export function cwd(): GeneratorArgFactory {
return () => ({
description: "The current working directory to run the generator in",
name: "cwd",
type: "string",
});
}

export function log(): GeneratorArgFactory {
return (generatorName) => ({
description: `Log the generated ${generatorName} to the console, instead of writing it to disk`,
Expand Down
1 change: 1 addition & 0 deletions templates/helper-test/helper-test.gjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import {{name.camel}} from '{{package.name}}/helpers/{{name.path}}';
import { setupRenderingTest } from '{{testHelpersImportPath}}';

module('Integration | Helper | {{name.camel}}', function (hooks) {
Expand Down
3 changes: 2 additions & 1 deletion templates/modifier-test/modifier-test.gjs
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import {{name.camel}} from '{{package.name}}/modifiers/{{name.path}}';
import { setupRenderingTest } from '{{testHelpersImportPath}}';

module('Integration | Modifier | {{name.camel}}', function (hooks) {
setupRenderingTest(hooks);

test('it renders', async function (assert) {
await render(<template><div \{{{{name.camel}}\}}></div></template>);
await render(<template><div {{name.camelCurlyBrackets}}></div></template>);

assert.ok(true);
});
Expand Down
2 changes: 1 addition & 1 deletion templates/service/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ export default class {{name.pascal}}Service extends Service {}

declare module "@ember/service" {
interface Registry {
{{{name.pathMaybeQuoted}}}: {{name.pascal}}Service;
{{{name.pathMaybeQuotes}}}: {{name.pascal}}Service;
}
}
4 changes: 4 additions & 0 deletions test/__snapshots__/helper-test.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
exports[`generates a \`.gjs\` helper-test 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/helpers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Helper | foo', function (hooks) {
Expand All @@ -22,6 +23,7 @@ module('Integration | Helper | foo', function (hooks) {
exports[`generates a \`.gjs\` helper-test at a custom path 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/helpers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Helper | foo', function (hooks) {
Expand All @@ -41,6 +43,7 @@ module('Integration | Helper | foo', function (hooks) {
exports[`generates a \`.gts\` helper-test 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/helpers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Helper | foo', function (hooks) {
Expand All @@ -60,6 +63,7 @@ module('Integration | Helper | foo', function (hooks) {
exports[`generates a \`.gts\` helper-test at a custom path 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/helpers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Helper | foo', function (hooks) {
Expand Down
12 changes: 8 additions & 4 deletions test/__snapshots__/modifier-test.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@
exports[`generates a \`.gjs\` modifier-test 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/modifiers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Modifier | foo', function (hooks) {
setupRenderingTest(hooks);

test('it renders', async function (assert) {
await render(<template><div {{foo\\}}></div></template>);
await render(<template><div {{foo}}></div></template>);

assert.ok(true);
});
Expand All @@ -20,13 +21,14 @@ module('Integration | Modifier | foo', function (hooks) {
exports[`generates a \`.gjs\` modifier-test at a custom path 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/modifiers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Modifier | foo', function (hooks) {
setupRenderingTest(hooks);

test('it renders', async function (assert) {
await render(<template><div {{foo\\}}></div></template>);
await render(<template><div {{foo}}></div></template>);

assert.ok(true);
});
Expand All @@ -37,13 +39,14 @@ module('Integration | Modifier | foo', function (hooks) {
exports[`generates a \`.gts\` modifier-test 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/modifiers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Modifier | foo', function (hooks) {
setupRenderingTest(hooks);

test('it renders', async function (assert) {
await render(<template><div {{foo\\}}></div></template>);
await render(<template><div {{foo}}></div></template>);

assert.ok(true);
});
Expand All @@ -54,13 +57,14 @@ module('Integration | Modifier | foo', function (hooks) {
exports[`generates a \`.gts\` modifier-test at a custom path 1`] = `
"import { render } from '@ember/test-helpers';
import { module, test } from 'qunit';
import foo from 'v2-addon/modifiers/foo';
import { setupRenderingTest } from 'v2-addon/tests/helpers';

module('Integration | Modifier | foo', function (hooks) {
setupRenderingTest(hooks);

test('it renders', async function (assert) {
await render(<template><div {{foo\\}}></div></template>);
await render(<template><div {{foo}}></div></template>);

assert.ok(true);
});
Expand Down