From 06e9c9829a4b962cc5607b0419db3af38ecc78d0 Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Wed, 25 Jan 2023 12:01:33 -0800 Subject: [PATCH 1/2] Add assertion for component extraction to assert correct registration --- .../demo1.md | 26 +++++++++++++++++++ .../docfy-with-hyphenated-number-2.md | 9 +++++++ packages/ember/tests/fastboot/docs-test.js | 2 +- .../components/docfy-output-test.ts | 2 +- .../unit/demo-component-generation-test.ts | 2 ++ .../ember/tests/unit/services/docfy-test.ts | 5 +++- 6 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md create mode 100644 packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2.md diff --git a/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md b/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md new file mode 100644 index 0000000..2a19866 --- /dev/null +++ b/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md @@ -0,0 +1,26 @@ +--- +order: 1 +--- + +# Demo of DocfyLink component + +This is a cool feature. + +[Link from a demo](../docfy-output.md) + +```hbs template +
+ This is my Demo: + + My Link +
+
{{this.url}}
+``` + +```js component +import Component from '@glimmer/component'; + +export default class MyDemo extends Component { + url = '/docs/ember/'; +} +``` diff --git a/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2.md b/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2.md new file mode 100644 index 0000000..5883453 --- /dev/null +++ b/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2.md @@ -0,0 +1,9 @@ +--- +category: ember +subcategory: components +--- + +# Docfy With Hyphenated Number 2 + +Testing doc pages with numbers in their name and how that corresponds with +automatic component registration. diff --git a/packages/ember/tests/fastboot/docs-test.js b/packages/ember/tests/fastboot/docs-test.js index be6831f..a9666bb 100644 --- a/packages/ember/tests/fastboot/docs-test.js +++ b/packages/ember/tests/fastboot/docs-test.js @@ -25,7 +25,7 @@ module('FastBoot | docs', function (hooks) { assert .dom('[data-test-id="docs-nav"]') .hasText( - 'Welcome to Docfy Introduction Installation Overview @docfy/core Overview Helpers genereateFlatOutput genereateNestedOutput @docfy/ember Working with Ember Installation Components Docfy Link Component Docfy Output Component Plugins Manual Demo Insertion' + 'Welcome to Docfy Introduction Installation Overview @docfy/core Overview Helpers genereateFlatOutput genereateNestedOutput @docfy/ember Working with Ember Installation Components Docfy Link Component Docfy Output Component Docfy With Hyphenated Number 2 Plugins Manual Demo Insertion' ); }); diff --git a/packages/ember/tests/integration/components/docfy-output-test.ts b/packages/ember/tests/integration/components/docfy-output-test.ts index 73aa5da..67e23a3 100644 --- a/packages/ember/tests/integration/components/docfy-output-test.ts +++ b/packages/ember/tests/integration/components/docfy-output-test.ts @@ -49,7 +49,7 @@ module('Integration | Component | DocfyOutput', function (hooks) { assert .dom('[data-test-id="flat-urls"]') .hasText( - '/docs/ /docs/introduction /docs/installation /docs/overview /docs/core/overview /docs/core/helpers/genereate-flat-output /docs/core/helpers/genereate-nested-output /docs/ember/ /docs/ember/installation /docs/ember/components/docfy-link /docs/ember/components/docfy-output /docs/ember/plugins/manual-demo-insertion' + '/docs/ /docs/introduction /docs/installation /docs/overview /docs/core/overview /docs/core/helpers/genereate-flat-output /docs/core/helpers/genereate-nested-output /docs/ember/ /docs/ember/installation /docs/ember/components/docfy-link /docs/ember/components/docfy-output /docs/ember/components/docfy-with-hyphenated-number-2 /docs/ember/plugins/manual-demo-insertion' ); }); diff --git a/packages/ember/tests/unit/demo-component-generation-test.ts b/packages/ember/tests/unit/demo-component-generation-test.ts index d7d1d9b..db89fc5 100644 --- a/packages/ember/tests/unit/demo-component-generation-test.ts +++ b/packages/ember/tests/unit/demo-component-generation-test.ts @@ -20,6 +20,8 @@ module('Unit | Demo component generation', function (hooks) { // dummy/docs/packages/ember/components/docfy-link-demo/{demo-file}.md has('packages-ember-components-docfy-link-demo1'); has('packages-ember-components-docfy-link-demo2'); + // dummy/docs/packages/ember/components/docfy-with-hyphenated-number-2/{demo-file}.md + has('packages-ember-components-docfy-with-hyphenated-number-2-demo1'); // where do these come from? has('preview-ember'); has('preview-ember1'); diff --git a/packages/ember/tests/unit/services/docfy-test.ts b/packages/ember/tests/unit/services/docfy-test.ts index 865132e..065e9f5 100644 --- a/packages/ember/tests/unit/services/docfy-test.ts +++ b/packages/ember/tests/unit/services/docfy-test.ts @@ -119,7 +119,10 @@ module('Unit | Service | docfy', function (hooks) { .stub(routerService, 'currentURL') .get(() => '/docs/ember/plugins/manual-demo-insertion'); - assert.equal(service.previousPage()?.title, 'Docfy Output Component'); + assert.equal( + service.previousPage()?.title, + 'Docfy With Hyphenated Number 2' + ); assert.equal(service.nextPage()?.title, undefined); }); From bcff54b342d33005dd6fcf4d6915fb8607b9539d Mon Sep 17 00:00:00 2001 From: Michael Lange Date: Wed, 25 Jan 2023 13:16:55 -0800 Subject: [PATCH 2/2] Fix AST transformation edge case When the AST transformer generates component invocation nodes, it would handle numbers in paths incorrectly when generating pascal case. Before: this-is-number-2 -> ThisIsNumber2 After: this-is-number-2 -> ThisIsNumber_2 --- .../docfy-with-hyphenated-number-2-demo/demo1.md | 3 +-- packages/ember/src/plugins/utils.ts | 3 +++ .../ember/tests/acceptance/extracted-demos-test.ts | 12 ++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md b/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md index 2a19866..726eabd 100644 --- a/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md +++ b/packages/ember/dummy-docs/packages/ember/components/docfy-with-hyphenated-number-2-demo/demo1.md @@ -4,14 +4,13 @@ order: 1 # Demo of DocfyLink component -This is a cool feature. - [Link from a demo](../docfy-output.md) ```hbs template
This is my Demo: + Assertable DOM node My Link
{{this.url}}
diff --git a/packages/ember/src/plugins/utils.ts b/packages/ember/src/plugins/utils.ts index d5a7600..245c8de 100644 --- a/packages/ember/src/plugins/utils.ts +++ b/packages/ember/src/plugins/utils.ts @@ -153,6 +153,9 @@ export function generateDemoComponentName( .replace(/(\w)(\w*)/g, function (_, g1, g2) { return `${g1.toUpperCase()}${g2.toLowerCase()}`; }) + .replace(/-(\d+)/g, function (_, g1) { + return `_${g1}`; + }) .replace(/-/g, ''); if (seenNames.has(dashCase)) { diff --git a/packages/ember/tests/acceptance/extracted-demos-test.ts b/packages/ember/tests/acceptance/extracted-demos-test.ts index 79feb52..fbfa77b 100644 --- a/packages/ember/tests/acceptance/extracted-demos-test.ts +++ b/packages/ember/tests/acceptance/extracted-demos-test.ts @@ -117,4 +117,16 @@ module('Acceptance | extracted demos', function (hooks) { assert.strictEqual(demosAll?.length, 2); }); + + test('it correctly resolves demo components with hyphenated numbers', async function (assert) { + await visit('/docs/ember/components/docfy-with-hyphenated-number-2'); + + // Since this page has a hyphenated number in it, demo components must be transformed with + // preceding underscores like this: + // + + assert + .dom('.docfy-demo__example .hyphenated-demo') + .hasText('Assertable DOM node'); + }); });