diff --git a/build-tools/tasks/__tests__/package-json.test.js b/build-tools/tasks/__tests__/package-json.test.js new file mode 100644 index 0000000000..8247a1ba06 --- /dev/null +++ b/build-tools/tasks/__tests__/package-json.test.js @@ -0,0 +1,29 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +const { getComponentsExports } = require('../package-json'); +const { listPublicItems } = require('../../utils/files'); + +describe('getComponentsExports', () => { + const exportsMap = getComponentsExports(); + + test('keeps the test-utils barrel entry points', () => { + expect(exportsMap['./test-utils/dom']).toBe('./test-utils/dom/index.js'); + expect(exportsMap['./test-utils/selectors']).toBe('./test-utils/selectors/index.js'); + }); + + test('exposes every public component wrapper for dom and selectors', () => { + const wrappers = listPublicItems('src/test-utils/dom'); + expect(wrappers).toContain('button'); + for (const wrapper of wrappers) { + expect(exportsMap[`./test-utils/dom/${wrapper}`]).toBe(`./test-utils/dom/${wrapper}/index.js`); + expect(exportsMap[`./test-utils/selectors/${wrapper}`]).toBe(`./test-utils/selectors/${wrapper}/index.js`); + } + }); + + test('does not expose the internal test-utils directory as a component wrapper', () => { + expect(exportsMap['./test-utils/dom/internal']).toBeUndefined(); + expect(exportsMap['./test-utils/selectors/internal']).toBeUndefined(); + // curated internal entry points remain explicitly exported + expect(exportsMap['./test-utils/dom/internal/drag-handle']).toBe('./test-utils/dom/internal/drag-handle.js'); + }); +}); diff --git a/build-tools/tasks/package-json.js b/build-tools/tasks/package-json.js index 4cd2424ac2..7c07190c88 100644 --- a/build-tools/tasks/package-json.js +++ b/build-tools/tasks/package-json.js @@ -51,9 +51,11 @@ function getComponentsExports() { result[`./${component}`] = `./${component}/index.js`; } - // Per-component test-utils DOM wrappers (e.g. `.../test-utils/dom/button`). + // Per-component test-utils wrappers, both DOM and selectors + // (e.g. `.../test-utils/dom/button` and `.../test-utils/selectors/button`). for (const component of listPublicItems('src/test-utils/dom')) { result[`./test-utils/dom/${component}`] = `./test-utils/dom/${component}/index.js`; + result[`./test-utils/selectors/${component}`] = `./test-utils/selectors/${component}/index.js`; } // Internationalization and messages @@ -146,3 +148,4 @@ module.exports = parallel([ testDefinitionsPackageJson, ]); module.exports.generatePackageJson = generatePackageJson; +module.exports.getComponentsExports = getComponentsExports;