Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(test): migrate from Jest to node:test #7623

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

avivkeller
Copy link
Member

@avivkeller avivkeller commented Apr 5, 2025

This PR replaces Jest with node:test as the test runner. While it's currently marked as a draft, it's functionally complete (aside from some GitHub Actions that still need testing), so feel free to review it as you would a regular PR.

The new setup uses node:test with tsx, global-jsdom, and custom mocks located in apps/site/tests/mocks and /tests/mocks. The root-level mocks are shared across multiple packages.

Copy link

vercel bot commented Apr 5, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Updated (UTC)
nodejs-org ✅ Ready (Inspect) Visit Preview Apr 10, 2025 1:56pm

@avivkeller
Copy link
Member Author

Copy link
Member

@AugustinMauroy AugustinMauroy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

first batch of review mainly on test env

@AugustinMauroy
Copy link
Member

also instead of import assert from 'node:assert'; you should use the strict version import assert from 'node:assert/strict';.

maybe take a look for an eslint rule

@avivkeller
Copy link
Member Author

avivkeller commented Apr 5, 2025

Blocked by nodejs/admin#964. Once we get codecov setup, i'll add the action into the PR.

@ovflowd ovflowd added the github_actions:pull-request Trigger Pull Request Checks label Apr 7, 2025
@ovflowd
Copy link
Member

ovflowd commented Apr 7, 2025

image

Copy link
Contributor

github-actions bot commented Apr 7, 2025

Lighthouse Results

URL Performance Accessibility Best Practices SEO Report
/en 🔴 65 🟢 100 🟢 100 🟢 91 🔗
/en/about 🟢 100 🟢 100 🟢 100 🟢 91 🔗
/en/about/previous-releases 🟢 100 🟢 100 🟢 100 🟢 92 🔗
/en/download 🟢 98 🟢 100 🟢 100 🟢 91 🔗
/en/blog 🟢 100 🟢 100 🟢 96 🟢 92 🔗

This comment was marked as resolved.

@avivkeller
Copy link
Member Author

Rebased to include latest changes, any other concerns?

@bmuenzenmeyer
Copy link
Collaborator

Rebased to include latest changes, any other concerns?

will try on Windows in a bit, if no one else has

@avivkeller
Copy link
Member Author

Programmed it on Windows 😃

@bmuenzenmeyer
Copy link
Collaborator

it is strange and inflates the code coverage numbers to include the test files themselves

image

@bmuenzenmeyer
Copy link
Collaborator

I am seeing 5 failures on my machine.

@node-core/website:test:unit: # node:internal/test_runner/harness:48
@node-core/website:test:unit: #       throw err;
@node-core/website:test:unit: #       ^
@node-core/website:test:unit: # Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\\src\\nodejsorg\\apps\\site\\util\\__tests__\\@\\util\\gitHubUtils' imported from C:\\src\\nodejsorg\\apps\\site\\util\\__tests__\\gitHubUtils.test.mjs
@node-core/website:test:unit: #     at finalizeResolution (node:internal/modules/esm/resolve:257:11)
@node-core/website:test:unit: #     at moduleResolve (node:internal/modules/esm/resolve:914:10)
@node-core/website:test:unit: #     at defaultResolve (node:internal/modules/esm/resolve:1039:11)
@node-core/website:test:unit: #     at nextResolve (node:internal/modules/esm/hooks:746:28)
@node-core/website:test:unit: #     at resolveBase (file:///C:/src/nodejsorg/node_modules/tsx/dist/esm/index.mjs?1744286520622:2:3212)
@node-core/website:test:unit: #     at async resolveDirectory (file:///C:/src/nodejsorg/node_modules/tsx/dist/esm/index.mjs?1744286520622:2:3578)
@node-core/website:test:unit: #     at async resolve (file:///C:/src/nodejsorg/node_modules/tsx/dist/esm/index.mjs?1744286520622:2:4441)
@node-core/website:test:unit: #     at async nextResolve (node:internal/modules/esm/hooks:746:22)
@node-core/website:test:unit: #     at async nextResolve (node:internal/modules/esm/hooks:746:22)
@node-core/website:test:unit: #     at async nextResolve (node:internal/modules/esm/hooks:746:22) {
@node-core/website:test:unit: #   code: 'ERR_MODULE_NOT_FOUND',
@node-core/website:test:unit: #   url: 'file:///C:/src/nodejsorg/apps/site/util/__tests__/@/util/gitHubUtils'
@node-core/website:test:unit: # }
@node-core/website:test:unit: # Node.js v22.6.0
@node-core/website:test:unit: # Subtest: util\\__tests__\\gitHubUtils.test.mjs
@node-core/website:test:unit: not ok 30 - util\\__tests__\\gitHubUtils.test.mjs
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 2460.1058
@node-core/website:test:unit:   location: 'C:\\src\\nodejsorg\\apps\\site\\util\\__tests__\\gitHubUtils.test.mjs:1:1'
@node-core/website:test:unit:   failureType: 'testCodeFailure'
@node-core/website:test:unit:   exitCode: 7
@node-core/website:test:unit:   signal: ~
@node-core/website:test:unit:   error: 'test failed'
@node-core/website:test:unit:   code: 'ERR_TEST_FAILURE'
@node-core/website:test:unit:   ...

any idea why?
ci is green

@avivkeller
Copy link
Member Author

it is strange and inflates the code coverage numbers to include the test files themselves

I'll explicitly exclude them --test-coverage-exclude

@bmuenzenmeyer
Copy link
Collaborator

Are you running an individual file, or the test:unit script? Based on the error, it looks like you are running without tsx, causing the imports to not resolve?

npm test

@bmuenzenmeyer
Copy link
Collaborator

I am fine with it being environmental, but it's odd nonetheless

@ovflowd
Copy link
Member

ovflowd commented Apr 10, 2025

I am seeing 5 failures on my machine.

@node-core/website:test:unit: # node:internal/test_runner/harness:48
@node-core/website:test:unit: #       throw err;
@node-core/website:test:unit: #       ^
@node-core/website:test:unit: # Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\\src\\nodejsorg\\apps\\site\\util\\__tests__\\@\\util\\gitHubUtils' imported from C:\\src\\nodejsorg\\apps\\site\\util\\__tests__\\gitHubUtils.test.mjs
@node-core/website:test:unit: #     at finalizeResolution (node:internal/modules/esm/resolve:257:11)
@node-core/website:test:unit: #     at moduleResolve (node:internal/modules/esm/resolve:914:10)
@node-core/website:test:unit: #     at defaultResolve (node:internal/modules/esm/resolve:1039:11)
@node-core/website:test:unit: #     at nextResolve (node:internal/modules/esm/hooks:746:28)
@node-core/website:test:unit: #     at resolveBase (file:///C:/src/nodejsorg/node_modules/tsx/dist/esm/index.mjs?1744286520622:2:3212)
@node-core/website:test:unit: #     at async resolveDirectory (file:///C:/src/nodejsorg/node_modules/tsx/dist/esm/index.mjs?1744286520622:2:3578)
@node-core/website:test:unit: #     at async resolve (file:///C:/src/nodejsorg/node_modules/tsx/dist/esm/index.mjs?1744286520622:2:4441)
@node-core/website:test:unit: #     at async nextResolve (node:internal/modules/esm/hooks:746:22)
@node-core/website:test:unit: #     at async nextResolve (node:internal/modules/esm/hooks:746:22)
@node-core/website:test:unit: #     at async nextResolve (node:internal/modules/esm/hooks:746:22) {
@node-core/website:test:unit: #   code: 'ERR_MODULE_NOT_FOUND',
@node-core/website:test:unit: #   url: 'file:///C:/src/nodejsorg/apps/site/util/__tests__/@/util/gitHubUtils'
@node-core/website:test:unit: # }
@node-core/website:test:unit: # Node.js v22.6.0
@node-core/website:test:unit: # Subtest: util\\__tests__\\gitHubUtils.test.mjs
@node-core/website:test:unit: not ok 30 - util\\__tests__\\gitHubUtils.test.mjs
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 2460.1058
@node-core/website:test:unit:   location: 'C:\\src\\nodejsorg\\apps\\site\\util\\__tests__\\gitHubUtils.test.mjs:1:1'
@node-core/website:test:unit:   failureType: 'testCodeFailure'
@node-core/website:test:unit:   exitCode: 7
@node-core/website:test:unit:   signal: ~
@node-core/website:test:unit:   error: 'test failed'
@node-core/website:test:unit:   code: 'ERR_TEST_FAILURE'
@node-core/website:test:unit:   ...

any idea why? ci is green

@avivkeller this could be a Windows path issue? Can you investigate? Maybe an issue on the custom loader you've made?

@avivkeller
Copy link
Member Author

avivkeller commented Apr 10, 2025

I'll investigate, but FWIW I've been testing on Windows and haven't experienced any failures. (Also, the custom loader wouldn't affect that import. That's handled by tsx, wheras the custom loader is specific for css files)

@avivkeller
Copy link
Member Author

PS C:\nodejs.org> npx corss-env TURBO_FORCE=true npm test

> test
> turbo test:unit

ΓÇó Packages in scope: @node-core/ui-components, @node-core/website, @node-core/website-i18n
ΓÇó Running test:unit in 3 packages
ΓÇó Remote caching disabled
@node-core/ui-components:test:unit: cache bypass, force executing 8629350bdc169d3a
@node-core/website:test:unit: cache bypass, force executing 327d68129535f7ac
@node-core/ui-components:test:unit: 
@node-core/ui-components:test:unit: > test:unit
@node-core/ui-components:test:unit: > cross-env NODE_NO_WARNINGS=1 node --experimental-test-coverage --test-coverage-exclude=**/*.test.* --enable-source-maps --import=global-jsdom/register --import=tsx --import=../../tests/setup.mjs --test **/*.test.*
@node-core/ui-components:test:unit: 
@node-core/website:test:unit: 
@node-core/website:test:unit: > test:unit
@node-core/website:test:unit: > cross-env NODE_NO_WARNINGS=1 node --experimental-test-coverage --test-coverage-exclude=**/*.test.* --experimental-test-module-mocks --enable-source-maps --import=global-jsdom/register --import=tsx --import=tests/setup.mjs --test **/*.test.*
@node-core/website:test:unit: 
@node-core/ui-components:test:unit: TAP version 13
@node-core/website:test:unit: TAP version 13
@node-core/website:test:unit: # Subtest: BlogHeader
@node-core/website:test:unit:     # Subtest: should have correct href when category is all
@node-core/website:test:unit:     ok 1 - should have correct href when category is all
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 137.1094
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should have correct href when category is release
@node-core/website:test:unit:     ok 2 - should have correct href when category is release
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 14.4499
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should have correct href when category is vulnerability
@node-core/website:test:unit:     ok 3 - should have correct href when category is vulnerability
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 16.796
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should have correct href when category is random
@node-core/website:test:unit:     ok 4 - should have correct href when category is random
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 10.6709
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..4
@node-core/website:test:unit: ok 1 - BlogHeader
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 181.1425
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: AvatarGroup
@node-core/ui-components:test:unit:     # Subtest: renders the AvatarGroup component properly
@node-core/ui-components:test:unit:     ok 1 - renders the AvatarGroup component properly
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 127.004
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: displays the rest of the avatars when "show more" button is clicked
@node-core/ui-components:test:unit:     ok 2 - displays the rest of the avatars when "show more" button is clicked
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 106.3464
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..2
@node-core/ui-components:test:unit: ok 1 - AvatarGroup
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 235.2558
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: ActiveLink
@node-core/ui-components:test:unit:     # Subtest: renders as localized link
@node-core/ui-components:test:unit:     ok 1 - renders as localized link
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 117.8652
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: ignores active class when href not matches location.href
@node-core/ui-components:test:unit:     ok 2 - ignores active class when href not matches location.href
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 14.5279
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: sets active class when href matches location.href
@node-core/ui-components:test:unit:     ok 3 - sets active class when href matches location.href
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 28.853
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..3
@node-core/ui-components:test:unit: ok 2 - ActiveLink
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 163.4376
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: PaginationListItem
@node-core/ui-components:test:unit:     # Subtest: Renders the list item correctly, including the corresponding ARIA attributes
@node-core/ui-components:test:unit:     ok 1 - Renders the list item correctly, including the corresponding ARIA attributes
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 235.1085
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: Assigns aria-current="page" attribute to the link when the current page is equal to the page number
@node-core/ui-components:test:unit:     ok 2 - Assigns aria-current="page" attribute to the link when the current page is equal to the page number
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 14.0294
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..2
@node-core/ui-components:test:unit: ok 3 - PaginationListItem
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 250.9858
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: Pagination
@node-core/ui-components:test:unit:     # Subtest: Rendering
@node-core/ui-components:test:unit:         # Subtest: Renders the navigation buttons even if no pages are passed to it
@node-core/ui-components:test:unit:         ok 1 - Renders the navigation buttons even if no pages are passed to it
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 184.9876
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         # Subtest: Renders the passed pages and current page
@node-core/ui-components:test:unit:         ok 2 - Renders the passed pages and current page
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 39.1992
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         1..2
@node-core/ui-components:test:unit:     ok 1 - Rendering
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 225.5406
@node-core/ui-components:test:unit:       type: 'suite'
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: Ellipsis behavior
@node-core/ui-components:test:unit:         # Subtest: When the pages size is equal or smaller than currentPageSiblingsCount + 5, all pages are shown
@node-core/ui-components:test:unit:         ok 1 - When the pages size is equal or smaller than currentPageSiblingsCount + 5, all pages are shown
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 33.5558
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         # Subtest: Shows left ellipsis when the left sibling of the current page is at least two pages away from the first page
@node-core/ui-components:test:unit:         ok 2 - Shows left ellipsis when the left sibling of the current page is at least two pages away from the first page
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 33.7197
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         # Subtest: Shows right ellipsis when the right sibling of the current page is at least two pages away from the last page
@node-core/ui-components:test:unit:         ok 3 - Shows right ellipsis when the right sibling of the current page is at least two pages away from the last page
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 76.081
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         # Subtest: Shows right and left ellipses when the current page siblings are both at least two pages away from the first and last pages
@node-core/ui-components:test:unit:         ok 4 - Shows right and left ellipses when the current page siblings are both at least two pages away from the first and last pages
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 37.2818
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         1..4
@node-core/ui-components:test:unit:     ok 2 - Ellipsis behavior
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 181.0441
@node-core/ui-components:test:unit:       type: 'suite'
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: Navigation buttons
@node-core/ui-components:test:unit:         # Subtest: Disables "Previous" button when the currentPage is equal to the first page
@node-core/ui-components:test:unit:         ok 1 - Disables "Previous" button when the currentPage is equal to the first page
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 14.8065
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         # Subtest: Disables "Next" button when the currentPage is equal to the last page
@node-core/ui-components:test:unit:         ok 2 - Disables "Next" button when the currentPage is equal to the last page
@node-core/ui-components:test:unit:           ---
@node-core/ui-components:test:unit:           duration_ms: 13.0064
@node-core/ui-components:test:unit:           ...
@node-core/ui-components:test:unit:         1..2
@node-core/ui-components:test:unit:     ok 3 - Navigation buttons
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 28.0502
@node-core/ui-components:test:unit:       type: 'suite'
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..3
@node-core/ui-components:test:unit: ok 4 - Pagination
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 435.7557
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: Select
@node-core/ui-components:test:unit:     # Subtest: renders the label when provided
@node-core/ui-components:test:unit:     ok 1 - renders the label when provided
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 198.1861
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: renders the default value when provided
@node-core/ui-components:test:unit:     ok 2 - renders the default value when provided
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 50.7746
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: renders the placeholder when default value is not provided
@node-core/ui-components:test:unit:     ok 3 - renders the placeholder when default value is not provided
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 87.1093
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..3
@node-core/ui-components:test:unit: ok 5 - Select
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 338.1105
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/website:test:unit: # Subtest: BlogPostCard
@node-core/website:test:unit:     # Subtest: Rendering
@node-core/website:test:unit:         # Subtest: Wraps the entire card within an article
@node-core/website:test:unit:         ok 1 - Wraps the entire card within an article
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 227.5362
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders the title prop correctly
@node-core/website:test:unit:         ok 2 - Renders the title prop correctly
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 217.609
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders the description prop correctly
@node-core/website:test:unit:         ok 3 - Renders the description prop correctly
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 88.4902
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders "layouts.blog.categories.vulnerability text when passing it the type "vulnerability
@node-core/website:test:unit:         ok 4 - Renders "layouts.blog.categories.vulnerability text when passing it the type "vulnerability
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 112.1705
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders "layouts.blog.categories.announcements text when passing it the type "announcements
@node-core/website:test:unit:         ok 5 - Renders "layouts.blog.categories.announcements text when passing it the type "announcements
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 56.5844
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders "layouts.blog.categories.release text when passing it the type "release
@node-core/website:test:unit:         ok 6 - Renders "layouts.blog.categories.release text when passing it the type "release
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 77.1773
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders all passed authors fullName(s), comma-separated
@node-core/website:test:unit:         ok 7 - Renders all passed authors fullName(s), comma-separated
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 102.8736
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders all passed authors fullName(s), comma-separated
@node-core/website:test:unit:         ok 8 - Renders all passed authors fullName(s), comma-separated
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 86.4089
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: Renders date prop in short format
@node-core/website:test:unit:         ok 9 - Renders date prop in short format
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 170.2766
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..9
@node-core/website:test:unit:     ok 1 - Rendering
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1141.0959
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 2 - BlogPostCard
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 1142.2001
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: useClientContext
@node-core/website:test:unit:     # Subtest: should return client context values
@node-core/website:test:unit:     ok 1 - should return client context values
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 76.2629
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 3 - useClientContext
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 77.7794
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: useCopyToClipboard
@node-core/website:test:unit:     # Subtest: should call clipboard API with `test` once
@node-core/website:test:unit:     ok 1 - should call clipboard API with `test` once
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 3478.8725
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 4 - useCopyToClipboard
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 3480.698
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: useDetectOS
@node-core/website:test:unit:     # Subtest: should detect WIN OS and 64 bitness
@node-core/website:test:unit:     ok 1 - should detect WIN OS and 64 bitness
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 215.5085
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should detect WIN OS and 64 bitness from user agent
@node-core/website:test:unit:     ok 2 - should detect WIN OS and 64 bitness from user agent
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 117.8903
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should detect MAC OS and default bitness
@node-core/website:test:unit:     ok 3 - should detect MAC OS and default bitness
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 103.4938
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 5 - useDetectOS
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 438.933
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: useMediaQuery
@node-core/website:test:unit:     # Subtest: should return undefined initially
@node-core/website:test:unit:     ok 1 - should return undefined initially
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 38.03
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return true for matched query
@node-core/website:test:unit:     ok 2 - should return true for matched query
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 4.2781
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return false for not-matched query
@node-core/website:test:unit:     ok 3 - should return false for not-matched query
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.4503
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should subscribe for media changes
@node-core/website:test:unit:     ok 4 - should subscribe for media changes
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.931
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..4
@node-core/website:test:unit: ok 6 - useMediaQuery
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 50.2065
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: useNotification
@node-core/website:test:unit:     # Subtest: should return the notification dispatch function
@node-core/website:test:unit:     ok 1 - should return the notification dispatch function
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 242.34
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return null outside NotificationProvider
@node-core/website:test:unit:     ok 2 - should return null outside NotificationProvider
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 10.7773
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 7 - useNotification
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 254.9165
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: generateReleaseData
@node-core/website:test:unit:     # Subtest: generates release data with correct status
@node-core/website:test:unit:     ok 1 - generates release data with correct status
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 110.2317
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 8 - generateReleaseData
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 121.5406
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: generateWebsiteFeeds
@node-core/website:test:unit:     # Subtest: generates website feeds with correct data
@node-core/website:test:unit:     ok 1 - generates website feeds with correct data
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 3.7017
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 9 - generateWebsiteFeeds
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 5.4195
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: MatterProvider
@node-core/website:test:unit:     # Subtest: renders the provider with the provided context value
@node-core/website:test:unit:     ok 1 - renders the provider with the provided context value
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 109.2878
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 10 - MatterProvider
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 111.1069
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: NavigationStateProvider
@node-core/website:test:unit:     # Subtest: should render without crashing
@node-core/website:test:unit:     ok 1 - should render without crashing
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 41.2759
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should provide navigation state context
@node-core/website:test:unit:     ok 2 - should provide navigation state context
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 41.8048
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 11 - NavigationStateProvider
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 84.7092
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: Tabs
@node-core/ui-components:test:unit:     # Subtest: should render the correct number of tabs
@node-core/ui-components:test:unit:     ok 1 - should render the correct number of tabs
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 324.1218
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: should render the correct tab content when clicked
@node-core/ui-components:test:unit:     ok 2 - should render the correct tab content when clicked
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 292.5645
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: should render the given addons
@node-core/ui-components:test:unit:     ok 3 - should render the given addons
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 34.8602
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..3
@node-core/ui-components:test:unit: ok 6 - Tabs
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 654.0302
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: ThemeToggle
@node-core/ui-components:test:unit:     # Subtest: switches dark theme to light theme
@node-core/ui-components:test:unit:     ok 1 - switches dark theme to light theme
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 276.253
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     # Subtest: switches light theme to dark theme
@node-core/ui-components:test:unit:     ok 2 - switches light theme to dark theme
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 87.0848
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..2
@node-core/ui-components:test:unit: ok 7 - ThemeToggle
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 365.8328
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: # Subtest: MetaBar
@node-core/ui-components:test:unit:     # Subtest: does not render h5s in the table of contents
@node-core/ui-components:test:unit:     ok 1 - does not render h5s in the table of contents
@node-core/ui-components:test:unit:       ---
@node-core/ui-components:test:unit:       duration_ms: 84.9186
@node-core/ui-components:test:unit:       ...
@node-core/ui-components:test:unit:     1..1
@node-core/ui-components:test:unit: ok 8 - MetaBar
@node-core/ui-components:test:unit:   ---
@node-core/ui-components:test:unit:   duration_ms: 86.4299
@node-core/ui-components:test:unit:   type: 'suite'
@node-core/ui-components:test:unit:   ...
@node-core/ui-components:test:unit: 1..8
@node-core/ui-components:test:unit: # tests 24
@node-core/ui-components:test:unit: # suites 11
@node-core/ui-components:test:unit: # pass 24
@node-core/ui-components:test:unit: # fail 0
@node-core/ui-components:test:unit: # cancelled 0
@node-core/ui-components:test:unit: # skipped 0
@node-core/ui-components:test:unit: # todo 0
@node-core/ui-components:test:unit: # duration_ms 22570.6444
@node-core/ui-components:test:unit: # start of coverage report
@node-core/ui-components:test:unit: # -------------------------------------------------------------------------------------------------------
@node-core/ui-components:test:unit: # file                       | line % | branch % | funcs % | uncovered lines
@node-core/ui-components:test:unit: # -------------------------------------------------------------------------------------------------------
@node-core/ui-components:test:unit: # Common                     |        |          |         | 
@node-core/ui-components:test:unit: #  AvatarGroup               |        |          |         | 
@node-core/ui-components:test:unit: #   Avatar                   |        |          |         | 
@node-core/ui-components:test:unit: #    index.tsx               |  86.84 |    50.00 |  100.00 | 67-76
@node-core/ui-components:test:unit: #   index.tsx                |  98.89 |    90.91 |  100.00 | 1
@node-core/ui-components:test:unit: #   Overlay                  |        |          |         | 
@node-core/ui-components:test:unit: #    index.tsx               |  43.59 |   100.00 |    0.00 | 18-39
@node-core/ui-components:test:unit: #  BaseActiveLink            |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                |  91.18 |    66.67 |  100.00 | 28-30
@node-core/ui-components:test:unit: #  BaseButton                |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                |  76.27 |    85.71 |  100.00 | 46-59
@node-core/ui-components:test:unit: #  BasePagination            |        |          |         | 
@node-core/ui-components:test:unit: #   Ellipsis                 |        |          |         | 
@node-core/ui-components:test:unit: #    index.tsx               |  90.91 |   100.00 |  100.00 | 1
@node-core/ui-components:test:unit: #   index.tsx                | 100.00 |   100.00 |  100.00 | 
@node-core/ui-components:test:unit: #   PaginationListItem       |        |          |         | 
@node-core/ui-components:test:unit: #    index.tsx               |  94.87 |   100.00 |  100.00 | 1 3
@node-core/ui-components:test:unit: #   useGetPageElements.tsx   |  73.48 |   100.00 |  100.00 | 1 3 39-47 49-51 53-56 58-60 118-120 122-132
@node-core/ui-components:test:unit: #  Select                    |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                |  92.06 |    80.00 |   92.31 | 1 78-80 94-99 124-128
@node-core/ui-components:test:unit: #  Skeleton                  |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                |  66.67 |    50.00 |  100.00 | 25-26 29-39
@node-core/ui-components:test:unit: #  Tabs                      |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                |  88.89 |    80.00 |  100.00 | 41-46
@node-core/ui-components:test:unit: #  ThemeToggle               |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                | 100.00 |   100.00 |   50.00 | 
@node-core/ui-components:test:unit: #  Tooltip                   |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                | 100.00 |   100.00 |  100.00 | 
@node-core/ui-components:test:unit: # Containers                 |        |          |         | 
@node-core/ui-components:test:unit: #  MetaBar                   |        |          |         | 
@node-core/ui-components:test:unit: #   index.tsx                |  90.28 |    90.00 |   66.67 | 1 40-45
@node-core/ui-components:test:unit: # ..                         |        |          |         | 
@node-core/ui-components:test:unit: #  ..                        |        |          |         | 
@node-core/ui-components:test:unit: #   tests                    |        |          |         | 
@node-core/ui-components:test:unit: #    loader.mjs              | 100.00 |   100.00 |  100.00 | 
@node-core/ui-components:test:unit: #    mocks                   |        |          |         | 
@node-core/ui-components:test:unit: #     css.mjs                | 100.00 |   100.00 |  100.00 | 
@node-core/ui-components:test:unit: #    setup.mjs               | 100.00 |   100.00 |  100.00 | 
@node-core/ui-components:test:unit: #    utilities.mjs           | 100.00 |   100.00 |  100.00 | 
@node-core/ui-components:test:unit: # -------------------------------------------------------------------------------------------------------
@node-core/ui-components:test:unit: # all files                  |  87.62 |    87.38 |   88.89 | 
@node-core/ui-components:test:unit: # -------------------------------------------------------------------------------------------------------
@node-core/ui-components:test:unit: # end of coverage report
@node-core/website:test:unit: # Subtest: NotificationProvider
@node-core/website:test:unit:     # Subtest: renders children and shows notification with the provided message
@node-core/website:test:unit:     ok 1 - renders children and shows notification with the provided message
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 268.7453
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 12 - NotificationProvider
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 270.8786
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: ReleaseProvider
@node-core/website:test:unit:     # Subtest: should render without crashing
@node-core/website:test:unit:     ok 1 - should render without crashing
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 64.3102
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should set version from parent provider
@node-core/website:test:unit:     ok 2 - should set version from parent provider
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 28.3237
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 13 - ReleaseProvider
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 96.3575
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: ThemeProvider
@node-core/website:test:unit:     # Subtest: renders NextThemeProvider with the correct props
@node-core/website:test:unit:     ok 1 - renders NextThemeProvider with the correct props
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 160.2003
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 14 - ThemeProvider
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 162.7129
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: releaseReducer
@node-core/website:test:unit:     # Subtest: should return the initial state
@node-core/website:test:unit:     ok 1 - should return the initial state
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.5186
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should handle SET_VERSION action
@node-core/website:test:unit:     ok 2 - should handle SET_VERSION action
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.1866
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should handle SET_OS action
@node-core/website:test:unit:     ok 3 - should handle SET_OS action
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2986
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should handle SET_PLATFORM action
@node-core/website:test:unit:     ok 4 - should handle SET_PLATFORM action
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2608
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should handle SET_INSTALL_METHOD action
@node-core/website:test:unit:     ok 5 - should handle SET_INSTALL_METHOD action
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2515
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should handle SET_MANAGER action
@node-core/website:test:unit:     ok 6 - should handle SET_MANAGER action
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2426
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..6
@node-core/website:test:unit: ok 15 - releaseReducer
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 7.5884
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getActions
@node-core/website:test:unit:     # Subtest: should create actions correctly
@node-core/website:test:unit:     ok 1 - should create actions correctly
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.1888
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 16 - getActions
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 1.4428
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: formatLighthouseResults
@node-core/website:test:unit:     # Subtest: formats preview urls correctly
@node-core/website:test:unit:     ok 1 - formats preview urls correctly
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 4.1588
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: formats stoplight colors correctly
@node-core/website:test:unit:     ok 2 - formats stoplight colors correctly
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.0421
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 17 - formatLighthouseResults
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 7.1529
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: assignClientContext
@node-core/website:test:unit:     # Subtest: should assign properties to the client context
@node-core/website:test:unit:     ok 1 - should assign properties to the client context
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.8882
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should use default values for missing properties
@node-core/website:test:unit:     ok 2 - should use default values for missing properties
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.5565
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 18 - assignClientContext
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 6.2312
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: mapAuthorToCardAuthors
@node-core/website:test:unit:     # Subtest: maps authors to card authors with default avatar source
@node-core/website:test:unit:     ok 1 - maps authors to card authors with default avatar source
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 3.0559
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: handles multiple authors separated by various delimiters
@node-core/website:test:unit:     ok 2 - handles multiple authors separated by various delimiters
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.5266
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: when has more than one author
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine, John Doe"
@node-core/website:test:unit:         ok 1 - correctly parses: "Timothy J Fontaine, John Doe"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.7893
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine and John Doe"
@node-core/website:test:unit:         ok 2 - correctly parses: "Timothy J Fontaine and John Doe"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.256
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine;John Doe"
@node-core/website:test:unit:         ok 3 - correctly parses: "Timothy J Fontaine;John Doe"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2626
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine & John Doe"
@node-core/website:test:unit:         ok 4 - correctly parses: "Timothy J Fontaine & John Doe"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.243
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine by John Doe"
@node-core/website:test:unit:         ok 5 - correctly parses: "Timothy J Fontaine by John Doe"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2009
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine prepared by John Doe"
@node-core/website:test:unit:         ok 6 - correctly parses: "Timothy J Fontaine prepared by John Doe"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.207
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine (@TimothyJFontaine) & John Doe (@JohnDoe)"
@node-core/website:test:unit:         ok 7 - correctly parses: "Timothy J Fontaine (@TimothyJFontaine) & John Doe (@JohnDoe)"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.3812
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: correctly parses: "Timothy J Fontaine (TimothyJFontaine) & John Doe (JohnDoe)"
@node-core/website:test:unit:         ok 8 - correctly parses: "Timothy J Fontaine (TimothyJFontaine) & John Doe (JohnDoe)"
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2467
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: returns the correct card authors without GitHub usernames
@node-core/website:test:unit:         ok 9 - returns the correct card authors without GitHub usernames
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.367
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: returns the correct card authors with GitHub usernames
@node-core/website:test:unit:         ok 10 - returns the correct card authors with GitHub usernames
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.3847
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..10
@node-core/website:test:unit:     ok 3 - when has more than one author
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 3.9709
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 19 - mapAuthorToCardAuthors
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 9.5367
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getAuthorWithId
@node-core/website:test:unit:     # Subtest: should return author details when author is found
@node-core/website:test:unit:     ok 1 - should return author details when author is found
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.9238
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: returns objects with GitHub avatars
@node-core/website:test:unit:     ok 2 - returns objects with GitHub avatars
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4271
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 20 - getAuthorWithId
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 1.6037
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getAuthorWithName
@node-core/website:test:unit:     # Subtest: should return author details when author is found
@node-core/website:test:unit:     ok 1 - should return author details when author is found
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4544
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return fallback details when author is not found
@node-core/website:test:unit:     ok 2 - should return fallback details when author is not found
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2639
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: returns known author details or fallback to acronym
@node-core/website:test:unit:     ok 3 - returns known author details or fallback to acronym
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.276
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 21 - getAuthorWithName
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 1.197
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getAuthors
@node-core/website:test:unit:     # Subtest: uses getAuthorWithId if usernames array is provided
@node-core/website:test:unit:     ok 1 - uses getAuthorWithId if usernames array is provided
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3623
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 22 - getAuthors
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 0.4753
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: Extra parsing checks
@node-core/website:test:unit:     # Subtest: mapAuthorToCardAuthors splits authors by common separators
@node-core/website:test:unit:     ok 1 - mapAuthorToCardAuthors splits authors by common separators
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3152
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 23 - Extra parsing checks
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 0.4194
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: mapBlogCategoryToPreviewType
@node-core/website:test:unit:     # Subtest: returns the correct preview type for recognized categories
@node-core/website:test:unit:     ok 1 - returns the correct preview type for recognized categories
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.0497
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: defaults to announcements for unknown categories
@node-core/website:test:unit:     ok 2 - defaults to announcements for unknown categories
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4975
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 24 - mapBlogCategoryToPreviewType
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 4.4028
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: dateIsBetween
@node-core/website:test:unit:     # Subtest: should return true when the current date is between start and end dates
@node-core/website:test:unit:     ok 1 - should return true when the current date is between start and end dates
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.3443
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return false when the current date is not between start and end dates
@node-core/website:test:unit:     ok 2 - should return false when the current date is not between start and end dates
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3314
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should throw an error when either start or end date is invalid
@node-core/website:test:unit:     ok 3 - should throw an error when either start or end date is invalid
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.8308
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return true if now is between startDate and endDate
@node-core/website:test:unit:     ok 4 - should return true if now is between startDate and endDate
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3494
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should throw an error if dates are invalid
@node-core/website:test:unit:     ok 5 - should throw an error if dates are invalid
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3326
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..5
@node-core/website:test:unit: ok 25 - dateIsBetween
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 5.9921
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: debounce
@node-core/website:test:unit:     # Subtest: should call the function only once
@node-core/website:test:unit:     ok 1 - should call the function only once
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 4.5948
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should call the function with the last arguments
@node-core/website:test:unit:     ok 2 - should call the function with the last arguments
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.7699
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should call the function after the delay
@node-core/website:test:unit:     ok 3 - should call the function after the delay
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.5006
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 26 - debounce
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 9.373
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: deepMerge
@node-core/website:test:unit:     # Subtest: should merge nested objects
@node-core/website:test:unit:     ok 1 - should merge nested objects
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 3.7403
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should overwrite primitive properties
@node-core/website:test:unit:     ok 2 - should overwrite primitive properties
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.8293
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 27 - deepMerge
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 6.4727
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: detectOsInUserAgent
@node-core/website:test:unit:     # Subtest: should return WIN for userAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246
@node-core/website:test:unit:     ok 1 - should return WIN for userAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.2166
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return MAC for userAgent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
@node-core/website:test:unit:     ok 2 - should return MAC for userAgent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3067
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return OTHER for userAgent Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36
@node-core/website:test:unit:     ok 3 - should return OTHER for userAgent Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2006
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return LINUX for userAgent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1
@node-core/website:test:unit:     ok 4 - should return LINUX for userAgent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2493
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return MAC for userAgent Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.3 Mobile/15E148 Safari/604.1
@node-core/website:test:unit:     ok 5 - should return MAC for userAgent Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.3 Mobile/15E148 Safari/604.1
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2238
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return OTHER for userAgent 
@node-core/website:test:unit:     ok 6 - should return OTHER for userAgent 
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2211
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return OTHER for userAgent OTHERAgent/1.0
@node-core/website:test:unit:     ok 7 - should return OTHER for userAgent OTHERAgent/1.0
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2085
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return OTHER for userAgent undefined
@node-core/website:test:unit:     ok 8 - should return OTHER for userAgent undefined
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2473
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return OTHER if no match is found
@node-core/website:test:unit:     ok 9 - should return OTHER if no match is found
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2855
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should detect Windows
@node-core/website:test:unit:     ok 10 - should detect Windows
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.372
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should detect Linux
@node-core/website:test:unit:     ok 11 - should detect Linux
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2448
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..11
@node-core/website:test:unit: ok 28 - detectOsInUserAgent
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 6.7843
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: detectOS
@node-core/website:test:unit:     # Subtest: should call detectOsInUserAgent
@node-core/website:test:unit:     ok 1 - should call detectOsInUserAgent
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4055
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return OTHER if navigator is undefined
@node-core/website:test:unit:     ok 2 - should return OTHER if navigator is undefined
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2584
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..2
@node-core/website:test:unit: ok 29 - detectOS
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 0.8501
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: parseCompat
@node-core/website:test:unit:     # Subtest: should handle all OS, install methods, and package managers
@node-core/website:test:unit:     ok 1 - should handle all OS, install methods, and package managers
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 5.6156
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should validate platform compatibility
@node-core/website:test:unit:     ok 2 - should validate platform compatibility
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.2251
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: extended tests
@node-core/website:test:unit:         # Subtest: should disable items if OS is not supported
@node-core/website:test:unit:         ok 1 - should disable items if OS is not supported
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.42
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: should disable items if installMethod is not supported
@node-core/website:test:unit:         ok 2 - should disable items if installMethod is not supported
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2379
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: should disable items if platform is not supported
@node-core/website:test:unit:         ok 3 - should disable items if platform is not supported
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2153
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: should disable items if semver constraint is not satisfied
@node-core/website:test:unit:         ok 4 - should disable items if semver constraint is not satisfied
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2827
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: should disable items if release status is not supported
@node-core/website:test:unit:         ok 5 - should disable items if release status is not supported
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2068
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..5
@node-core/website:test:unit:     ok 3 - extended tests
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.6087
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 30 - parseCompat
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 9.6689
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: nextItem
@node-core/website:test:unit:     # Subtest: should find the first valid item if current is invalid
@node-core/website:test:unit:     ok 1 - should find the first valid item if current is invalid
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2795
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 31 - nextItem
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 0.3571
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getHighEntropyValues
@node-core/website:test:unit:     # Subtest: should resolve and return hint values
@node-core/website:test:unit:     ok 1 - should resolve and return hint values
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.4402
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return an empty object on rejection
@node-core/website:test:unit:     ok 2 - should return an empty object on rejection
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.6383
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return multiple hint values
@node-core/website:test:unit:     ok 3 - should return multiple hint values
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4099
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return undefined for unsupported hints
@node-core/website:test:unit:     ok 4 - should return undefined for unsupported hints
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3943
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..4
@node-core/website:test:unit: ok 32 - getHighEntropyValues
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 5.7619
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getLanguageDisplayName
@node-core/website:test:unit:     # Subtest: should return the display name for a known language
@node-core/website:test:unit:     ok 1 - should return the display name for a known language
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.8768
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the display name for another known language
@node-core/website:test:unit:     ok 2 - should return the display name for another known language
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3713
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the input language if it is not known
@node-core/website:test:unit:     ok 3 - should return the input language if it is not known
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3252
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 33 - getLanguageDisplayName
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 4.5323
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getNodeApiLink
@node-core/website:test:unit:     # Subtest: should return the correct API link for versions >=0.3.1 and <0.5.1
@node-core/website:test:unit:     ok 1 - should return the correct API link for versions >=0.3.1 and <0.5.1
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 4.7228
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the correct URL for versions >=0.3.1 and <0.5.1
@node-core/website:test:unit:     ok 2 - should return the correct URL for versions >=0.3.1 and <0.5.1
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.5313
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the correct API link for versions >=0.1.14 and <0.3.1
@node-core/website:test:unit:     ok 3 - should return the correct API link for versions >=0.1.14 and <0.3.1
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.715
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the correct API link for versions >=1.0.0 and <4.0.0
@node-core/website:test:unit:     ok 4 - should return the correct API link for versions >=1.0.0 and <4.0.0
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4082
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should form the correct URL for versions >=1.0.0 and <4.0.0
@node-core/website:test:unit:     ok 5 - should form the correct URL for versions >=1.0.0 and <4.0.0
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2491
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the correct API link for other versions
@node-core/website:test:unit:     ok 6 - should return the correct API link for other versions
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2501
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..6
@node-core/website:test:unit: ok 34 - getNodeApiLink
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 9.0803
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getNodeDownloadUrl
@node-core/website:test:unit:     # Subtest: should return the correct download URL for Mac
@node-core/website:test:unit:     ok 1 - should return the correct download URL for Mac
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.2993
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the correct download URL for Windows (32-bit)
@node-core/website:test:unit:     ok 2 - should return the correct download URL for Windows (32-bit)
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2705
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the correct download URL for Windows (64-bit)
@node-core/website:test:unit:     ok 3 - should return the correct download URL for Windows (64-bit)
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.212
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return the default download URL for other operating systems
@node-core/website:test:unit:     ok 4 - should return the default download URL for other operating systems
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1988
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: MAC
@node-core/website:test:unit:         # Subtest: should return .pkg link for installer
@node-core/website:test:unit:         ok 1 - should return .pkg link for installer
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.3056
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..1
@node-core/website:test:unit:     ok 5 - MAC
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4515
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: WIN
@node-core/website:test:unit:         # Subtest: should return an MSI link for installer
@node-core/website:test:unit:         ok 1 - should return an MSI link for installer
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2757
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..1
@node-core/website:test:unit:     ok 6 - WIN
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3988
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..6
@node-core/website:test:unit: ok 35 - getNodeDownloadUrl
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 5.6659
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: getUserPlatform
@node-core/website:test:unit:     # Subtest: should return arm64 for arm + 64
@node-core/website:test:unit:     ok 1 - should return arm64 for arm + 64
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.8394
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return x64 for non-arm + 64
@node-core/website:test:unit:     ok 2 - should return x64 for non-arm + 64
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3796
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return x86 otherwise
@node-core/website:test:unit:     ok 3 - should return x86 otherwise
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2964
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..3
@node-core/website:test:unit: ok 36 - getUserPlatform
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 4.3516
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: gitHubUtils
@node-core/website:test:unit:     # Subtest: getGitHubAvatarUrl returns the correct URL
@node-core/website:test:unit:     ok 1 - getGitHubAvatarUrl returns the correct URL
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.7576
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: createGitHubSlugger returns a slugger
@node-core/website:test:unit:     ok 2 - createGitHubSlugger returns a slugger
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3919
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getGitHubBlobUrl returns the correct URL
@node-core/website:test:unit:     ok 3 - getGitHubBlobUrl returns the correct URL
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3052
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getGitHubApiDocsUrl returns the correct URL
@node-core/website:test:unit:     ok 4 - getGitHubApiDocsUrl returns the correct URL
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3264
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getGitHubAvatarUrl
@node-core/website:test:unit:         # Subtest: should return a valid GitHub avatar URL
@node-core/website:test:unit:         ok 1 - should return a valid GitHub avatar URL
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.3023
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..1
@node-core/website:test:unit:     ok 5 - getGitHubAvatarUrl
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.5
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getGitHubBlobUrl
@node-core/website:test:unit:         # Subtest: should return the correct blob URL
@node-core/website:test:unit:         ok 1 - should return the correct blob URL
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.4405
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..1
@node-core/website:test:unit:     ok 6 - getGitHubBlobUrl
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.5873
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getGitHubApiDocsUrl
@node-core/website:test:unit:         # Subtest: should return the correct API docs URL
@node-core/website:test:unit:         ok 1 - should return the correct API docs URL
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.3031
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..1
@node-core/website:test:unit:     ok 7 - getGitHubApiDocsUrl
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4361
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..7
@node-core/website:test:unit: ok 37 - gitHubUtils
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 6.4567
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: hexToRGBA
@node-core/website:test:unit:     # Subtest: should convert a hex color to an rgba color
@node-core/website:test:unit:     ok 1 - should convert a hex color to an rgba color
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 2.2909
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should convert a hex color to an rgba color
@node-core/website:test:unit:     ok 2 - should convert a hex color to an rgba color
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.5508
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should convert hex to RGBA correctly
@node-core/website:test:unit:     ok 3 - should convert hex to RGBA correctly
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.3013
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should handle custom alpha value
@node-core/website:test:unit:     ok 4 - should handle custom alpha value
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2815
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..4
@node-core/website:test:unit: ok 38 - hexToRGBA
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 5.4646
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: isSvgImage
@node-core/website:test:unit:     # Subtest: should return true for a valid .svg URL
@node-core/website:test:unit:     ok 1 - should return true for a valid .svg URL
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.2001
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return true for a URL with query params
@node-core/website:test:unit:     ok 2 - should return true for a URL with query params
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1463
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return false for a URL without a .svg extension
@node-core/website:test:unit:     ok 3 - should return false for a URL without a .svg extension
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1254
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return false for a URL containing ".svg" but not ending with it
@node-core/website:test:unit:     ok 4 - should return false for a URL containing ".svg" but not ending with it
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1112
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return false for an empty string
@node-core/website:test:unit:     ok 5 - should return false for an empty string
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1065
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: should return false for a non-URL string
@node-core/website:test:unit:     ok 6 - should return false for a non-URL string
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1078
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..6
@node-core/website:test:unit: ok 39 - isSvgImage
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 2.943
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: imageUtils
@node-core/website:test:unit:     # Subtest: isSvgImage
@node-core/website:test:unit:         # Subtest: should detect .svg extension properly
@node-core/website:test:unit:         ok 1 - should detect .svg extension properly
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.1946
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: should return false for non-svg source
@node-core/website:test:unit:         ok 2 - should return false for non-svg source
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.1654
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..2
@node-core/website:test:unit:     ok 1 - isSvgImage
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4661
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..1
@node-core/website:test:unit: ok 40 - imageUtils
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 0.5713
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: # Subtest: String utils
@node-core/website:test:unit:     # Subtest: getAcronymFromString returns the correct acronym
@node-core/website:test:unit:     ok 1 - getAcronymFromString returns the correct acronym
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 1.5406
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getAcronymFromString returns the correct acronym for a single word
@node-core/website:test:unit:     ok 2 - getAcronymFromString returns the correct acronym for a single word
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2095
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getAcronymFromString if the string is empty, it returns NA
@node-core/website:test:unit:     ok 3 - getAcronymFromString if the string is empty, it returns NA
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1522
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText returns plain text without HTML and JSX tags
@node-core/website:test:unit:     ok 4 - parseRichTextIntoPlainText returns plain text without HTML and JSX tags
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.4113
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText replaces Markdown links with their text content
@node-core/website:test:unit:     ok 5 - parseRichTextIntoPlainText replaces Markdown links with their text content
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2409
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText replaces Markdown lists with their content
@node-core/website:test:unit:     ok 6 - parseRichTextIntoPlainText replaces Markdown lists with their content
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1843
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText replaces Markdown underscore, bold, and italic with their content
@node-core/website:test:unit:     ok 7 - parseRichTextIntoPlainText replaces Markdown underscore, bold, and italic with their content
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1654
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText replaces Markdown multiline code blocks with an empty string
@node-core/website:test:unit:     ok 8 - parseRichTextIntoPlainText replaces Markdown multiline code blocks with an empty string
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1509
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText removes empty lines or lines with just spaces
@node-core/website:test:unit:     ok 9 - parseRichTextIntoPlainText removes empty lines or lines with just spaces
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2387
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText removes leading and trailing spaces from each line
@node-core/website:test:unit:     ok 10 - parseRichTextIntoPlainText removes leading and trailing spaces from each line
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.163
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: dashToCamelCase returns correct camelCase
@node-core/website:test:unit:     ok 11 - dashToCamelCase returns correct camelCase
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.2323
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: dashToCamelCase returns correct camelCase with capital first letter
@node-core/website:test:unit:     ok 12 - dashToCamelCase returns correct camelCase with capital first letter
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1746
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: dashToCamelCase returns correct camelCase with numbers
@node-core/website:test:unit:     ok 13 - dashToCamelCase returns correct camelCase with numbers
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1328
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: getAcronymFromString returns an acronym for a simple string
@node-core/website:test:unit:     ok 14 - getAcronymFromString returns an acronym for a simple string
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1292
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: parseRichTextIntoPlainText removes markdown syntax
@node-core/website:test:unit:     ok 15 - parseRichTextIntoPlainText removes markdown syntax
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1356
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: dashToCamelCase converts dashed strings to camelCase
@node-core/website:test:unit:     ok 16 - dashToCamelCase converts dashed strings to camelCase
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.1311
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     # Subtest: stringUtils
@node-core/website:test:unit:         # Subtest: getAcronymFromString
@node-core/website:test:unit:             # Subtest: should return correct acronym
@node-core/website:test:unit:             ok 1 - should return correct acronym
@node-core/website:test:unit:               ---
@node-core/website:test:unit:               duration_ms: 0.155
@node-core/website:test:unit:               ...
@node-core/website:test:unit:             1..1
@node-core/website:test:unit:         ok 1 - getAcronymFromString
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2565
@node-core/website:test:unit:           type: 'suite'
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: parseRichTextIntoPlainText
@node-core/website:test:unit:             # Subtest: should remove markdown and HTML
@node-core/website:test:unit:             ok 1 - should remove markdown and HTML
@node-core/website:test:unit:               ---
@node-core/website:test:unit:               duration_ms: 0.1707
@node-core/website:test:unit:               ...
@node-core/website:test:unit:             1..1
@node-core/website:test:unit:         ok 2 - parseRichTextIntoPlainText
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.24
@node-core/website:test:unit:           type: 'suite'
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         # Subtest: dashToCamelCase
@node-core/website:test:unit:             # Subtest: should convert dash-case to camelCase
@node-core/website:test:unit:             ok 1 - should convert dash-case to camelCase
@node-core/website:test:unit:               ---
@node-core/website:test:unit:               duration_ms: 0.1631
@node-core/website:test:unit:               ...
@node-core/website:test:unit:             1..1
@node-core/website:test:unit:         ok 3 - dashToCamelCase
@node-core/website:test:unit:           ---
@node-core/website:test:unit:           duration_ms: 0.2267
@node-core/website:test:unit:           type: 'suite'
@node-core/website:test:unit:           ...
@node-core/website:test:unit:         1..3
@node-core/website:test:unit:     ok 17 - stringUtils
@node-core/website:test:unit:       ---
@node-core/website:test:unit:       duration_ms: 0.9636
@node-core/website:test:unit:       type: 'suite'
@node-core/website:test:unit:       ...
@node-core/website:test:unit:     1..17
@node-core/website:test:unit: ok 41 - String utils
@node-core/website:test:unit:   ---
@node-core/website:test:unit:   duration_ms: 6.8181
@node-core/website:test:unit:   type: 'suite'
@node-core/website:test:unit:   ...
@node-core/website:test:unit: 1..41
@node-core/website:test:unit: # tests 156
@node-core/website:test:unit: # suites 54
@node-core/website:test:unit: # pass 156
@node-core/website:test:unit: # fail 0
@node-core/website:test:unit: # cancelled 0
@node-core/website:test:unit: # skipped 0
@node-core/website:test:unit: # todo 0
@node-core/website:test:unit: # duration_ms 27279.6064
@node-core/website:test:unit: # start of coverage report
@node-core/website:test:unit: # -----------------------------------------------------------------------------------------------
@node-core/website:test:unit: # file                               | line % | branch % | funcs % | uncovered lines
@node-core/website:test:unit: # -----------------------------------------------------------------------------------------------
@node-core/website:test:unit: # authors.json                       |  99.65 |   100.00 |  100.00 | 1
@node-core/website:test:unit: # components                         |        |          |         | 
@node-core/website:test:unit: #  Blog                              |        |          |         | 
@node-core/website:test:unit: #   BlogHeader                       |        |          |         | 
@node-core/website:test:unit: #    index.tsx                       | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #   BlogPostCard                     |        |          |         | 
@node-core/website:test:unit: #    index.tsx                       | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  Common                            |        |          |         | 
@node-core/website:test:unit: #   FormattedTime.tsx                |  95.83 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  Link.tsx                          |  96.00 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  withAvatarGroup.tsx               |  97.14 |   100.00 |  100.00 | 1
@node-core/website:test:unit: # hooks                              |        |          |         | 
@node-core/website:test:unit: #  index.ts                          | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  react-client                      |        |          |         | 
@node-core/website:test:unit: #   index.ts                         | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #   useClientContext.ts              |  96.88 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #   useCopyToClipboard.ts            |  91.43 |    90.91 |   87.50 | 1 7-8
@node-core/website:test:unit: #   useDetectOS.ts                   |  98.18 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #   useMediaQuery.ts                 |  96.43 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #   useNavigationState.ts            |  24.39 |   100.00 |    0.00 | 1 3 10-38
@node-core/website:test:unit: #   useNotification.ts               |  88.89 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  react-generic                     |        |          |         | 
@node-core/website:test:unit: #   index.ts                         | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #   useSiteNavigation.ts             |  37.66 |   100.00 |    0.00 | 1 25-34 38-74
@node-core/website:test:unit: # navigation.json                    |  99.76 |   100.00 |  100.00 | 1
@node-core/website:test:unit: # navigation.mjs                     | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # next-data                          |        |          |         | 
@node-core/website:test:unit: #  generators                        |        |          |         | 
@node-core/website:test:unit: #   releaseData.mjs                  |  89.19 |    46.67 |  100.00 | 12 14-16 18-21
@node-core/website:test:unit: #   websiteFeeds.mjs                 | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # next.calendar.constants.mjs        | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # next.constants.mjs                 | 100.00 |    20.00 |  100.00 | 
@node-core/website:test:unit: # next.json.mjs                      | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # next.locales.mjs                   | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # providers                          |        |          |         | 
@node-core/website:test:unit: #  matterProvider.tsx                |  62.07 |   100.00 |  100.00 | 1 19-22 24-29
@node-core/website:test:unit: #  navigationStateProvider.tsx       |  54.55 |   100.00 |  100.00 | 1 13-15 17-22
@node-core/website:test:unit: #  notificationProvider.tsx          |  62.96 |   100.00 |   80.00 | 25-29 31 39-41 43 45-54
@node-core/website:test:unit: #  releaseProvider.tsx               |  74.32 |    90.91 |   85.71 | 1 3 38-39 41-45 57-62 71-74
@node-core/website:test:unit: #  themeProvider.tsx                 |  41.18 |   100.00 |  100.00 | 1 9-17
@node-core/website:test:unit: # redirects.json                     |  99.71 |   100.00 |  100.00 | 1
@node-core/website:test:unit: # reducers                           |        |          |         | 
@node-core/website:test:unit: #  releaseReducer.ts                 |  96.23 |   100.00 |  100.00 | 1 3
@node-core/website:test:unit: # scripts                            |        |          |         | 
@node-core/website:test:unit: #  lighthouse                        |        |          |         | 
@node-core/website:test:unit: #   index.mjs                        | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # shiki.config.mjs                   |  22.22 |    50.00 |  100.00 | 6-7 11-13 15-36 38-45
@node-core/website:test:unit: # site.json                          |  97.92 |   100.00 |  100.00 | 1
@node-core/website:test:unit: # tests                              |        |          |         | 
@node-core/website:test:unit: #  loader.mjs                        | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  mocks                             |        |          |         | 
@node-core/website:test:unit: #   github-slugger.mjs               |  77.78 |   100.00 |    0.00 | 5-6
@node-core/website:test:unit: #   next-intl.jsx                    |  64.52 |   100.00 |   56.25 | 1 4-11 22 31
@node-core/website:test:unit: #  setup.mjs                         | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # util                               |        |          |         | 
@node-core/website:test:unit: #  assignClientContext.ts            |  95.00 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  authorUtils.ts                    | 100.00 |    82.35 |  100.00 | 
@node-core/website:test:unit: #  blogUtils.ts                      |  92.86 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  dateUtils.ts                      | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  debounce.ts                       |  93.75 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  deepMerge.ts                      | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  detectOS.ts                       |  90.91 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  downloadUtils.tsx                 |  99.69 |   100.00 |  100.00 | 1
@node-core/website:test:unit: #  getHighEntropyValues.ts           |  90.91 |   100.00 |   66.67 | 1 3-4
@node-core/website:test:unit: #  getLanguageDisplayName.ts         | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  getNodeApiLink.ts                 | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  getNodeDownloadUrl.ts             |  60.00 |    63.64 |  100.00 | 15-16 27-32 47-52 54-69
@node-core/website:test:unit: #  getUserPlatform.ts                |  73.33 |   100.00 |  100.00 | 1 3-5
@node-core/website:test:unit: #  gitHubUtils.ts                    | 100.00 |   100.00 |   80.00 | 
@node-core/website:test:unit: #  hexToRGBA.ts                      | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #  imageUtils.ts                     |  36.84 |   100.00 |  100.00 | 1-12
@node-core/website:test:unit: #  stringUtils.ts                    | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: # ..                                 |        |          |         | 
@node-core/website:test:unit: #  ..                                |        |          |         | 
@node-core/website:test:unit: #   packages                         |        |          |         | 
@node-core/website:test:unit: #    i18n                            |        |          |         | 
@node-core/website:test:unit: #     config.json                    | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #     lib                            |        |          |         | 
@node-core/website:test:unit: #      index.mjs                     |  97.44 |   100.00 |   90.91 | 12
@node-core/website:test:unit: #    ui-components                   |        |          |         | 
@node-core/website:test:unit: #     Common                         |        |          |         | 
@node-core/website:test:unit: #      AvatarGroup                   |        |          |         | 
@node-core/website:test:unit: #       Avatar                       |        |          |         | 
@node-core/website:test:unit: #        index.tsx                   |  86.84 |    50.00 |  100.00 | 56-65
@node-core/website:test:unit: #       index.tsx                    |  78.89 |    57.14 |   75.00 | 1 45-46 75-90
@node-core/website:test:unit: #       Overlay                      |        |          |         | 
@node-core/website:test:unit: #        index.tsx                   |  43.59 |   100.00 |    0.00 | 18-39
@node-core/website:test:unit: #      Notification                  |        |          |         | 
@node-core/website:test:unit: #       index.tsx                    | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #      Preview                       |        |          |         | 
@node-core/website:test:unit: #       index.tsx                    | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #      Tooltip                       |        |          |         | 
@node-core/website:test:unit: #       index.tsx                    | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #     Icons                          |        |          |         | 
@node-core/website:test:unit: #      HexagonGrid.tsx               |  99.86 |   100.00 |  100.00 | 1 3
@node-core/website:test:unit: #      InstallationMethod            |        |          |         | 
@node-core/website:test:unit: #       Choco.tsx                    |   3.85 |   100.00 |    0.00 | 1 5-78
@node-core/website:test:unit: #       Devbox.tsx                   |  14.29 |   100.00 |    0.00 | 1 5-21
@node-core/website:test:unit: #       Docker.tsx                   |  15.00 |   100.00 |    0.00 | 1 5-20
@node-core/website:test:unit: #       FNM.tsx                      |   2.27 |   100.00 |    0.00 | 1 5-132
@node-core/website:test:unit: #       Homebrew.tsx                 |   4.35 |   100.00 |    0.00 | 1 5-69
@node-core/website:test:unit: #       index.ts                     |  90.00 |   100.00 |  100.00 | 10
@node-core/website:test:unit: #       N.tsx                        |   9.38 |   100.00 |    0.00 | 1 5-32
@node-core/website:test:unit: #       NVM.tsx                      |   4.76 |   100.00 |    0.00 | 1 5-63
@node-core/website:test:unit: #       Volta.tsx                    |   8.82 |   100.00 |    0.00 | 1 5-34
@node-core/website:test:unit: #      Logos                         |        |          |         | 
@node-core/website:test:unit: #       JsWhite.tsx                  |  94.59 |   100.00 |  100.00 | 1 3
@node-core/website:test:unit: #      OperatingSystem               |        |          |         | 
@node-core/website:test:unit: #       AIX.tsx                      |   6.52 |   100.00 |    0.00 | 1 5-46
@node-core/website:test:unit: #       Apple.tsx                    |  13.04 |   100.00 |    0.00 | 1 5-23
@node-core/website:test:unit: #       index.ts                     |  83.33 |   100.00 |  100.00 | 6
@node-core/website:test:unit: #       Linux.tsx                    |   0.31 |   100.00 |    0.00 | 1 5-969
@node-core/website:test:unit: #       Microsoft.tsx                |  15.79 |   100.00 |    0.00 | 1 5-19
@node-core/website:test:unit: #      PackageManager                |        |          |         | 
@node-core/website:test:unit: #       index.ts                     |  80.00 |   100.00 |  100.00 | 5
@node-core/website:test:unit: #       Npm.tsx                      |  14.29 |   100.00 |    0.00 | 1 5-21
@node-core/website:test:unit: #       Pnpm.tsx                     |  13.64 |   100.00 |    0.00 | 1 5-22
@node-core/website:test:unit: #       Yarn.tsx                     |  13.64 |   100.00 |    0.00 | 1 5-22
@node-core/website:test:unit: #   tests                            |        |          |         | 
@node-core/website:test:unit: #    loader.mjs                      | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #    mocks                           |        |          |         | 
@node-core/website:test:unit: #     css.mjs                        | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #    setup.mjs                       | 100.00 |   100.00 |  100.00 | 
@node-core/website:test:unit: #    utilities.mjs                   |  90.00 |    75.00 |  100.00 | 15-16
@node-core/website:test:unit: # -----------------------------------------------------------------------------------------------
@node-core/website:test:unit: # all files                          |  73.04 |    92.07 |   80.90 | 
@node-core/website:test:unit: # -----------------------------------------------------------------------------------------------
@node-core/website:test:unit: # end of coverage report

 Tasks:    2 successful, 2 total
Cached:    0 cached, 2 total
  Time:    33.352s 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Switch from Jest to Node.js's Native Test Runner
5 participants