kibana/packages/kbn-eslint-plugin-eui-a11y/helpers/get_intent_from_node.test.ts
Coen Warmer 46b4e1fc6d
Add support for wrapping elements in eslint-plugin-eui-a11y plugin (#216339)
## Summary

Adds support for wrapping elements.

| Code | Turns into |
|--------|--------|
| <img width="764" alt="Screenshot 2025-04-01 at 09 25 09"
src="https://github.com/user-attachments/assets/9b5d2743-3b61-4d21-b726-0a0be9539d99"
/> | <img width="827" alt="Screenshot 2025-04-01 at 09 25 20"
src="https://github.com/user-attachments/assets/9879d1cb-e22f-4c80-a666-001b273d6d7d"
/>
| <img width="744" alt="Screenshot 2025-04-01 at 09 25 54"
src="https://github.com/user-attachments/assets/c4320ff8-baa2-4fcc-9b3c-f7ab86c1cb23"
/> | <img width="838" alt="Screenshot 2025-04-01 at 09 26 07"
src="https://github.com/user-attachments/assets/d81a1232-a643-4775-ac83-a1a97bcbc528"
/> |

**Message**
<img width="804" alt="Screenshot 2025-03-25 at 13 59 36"
src="https://github.com/user-attachments/assets/8eaa2f54-aee6-4828-b1d5-15d4d2bfb4c0"
/>

**Exceptions**
If elements have a `aria-label`, `aria-labelledby` or `label`, they are
not flagged.

**Autofix suggestion**
- autofixes are translated with `i18n.translate`
- if `i18n` is not imported yet, an import statement is added
- If a `placeholder` prop is found, it uses that as the `i18n.translate`
default message for `aria-label`
- If the element has children, it uses the text value of the children as
the default message for the `i18n.translate` default message for
`aria-label`

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Milosz Marcinkowski <38698566+miloszmarcinkowski@users.noreply.github.com>
2025-04-09 18:16:00 +02:00

71 lines
1.8 KiB
TypeScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the "Elastic License
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
* Public License v 1"; you may not use this file except in compliance with, at
* your election, the "Elastic License 2.0", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/
import { getIntentFromNode } from './get_intent_from_node';
describe('getIntentFromNode', () => {
it('should return the intent if it exists', () => {
const mockNode = {
parent: {
type: 'JSXElement',
id: {
type: 'Identifier',
name: 'myIntent',
},
children: [
{
type: 'JSXText',
value: 'hello',
},
{
type: 'JSXText',
value: 'world',
},
],
},
};
expect(getIntentFromNode(mockNode as any)).toEqual('hello world');
});
it('should return an empty string if there is parent element', () => {
const mockNode = {
parent: {},
};
expect(getIntentFromNode(mockNode as any)).toEqual('');
});
it('should return an empty string if there are no children to the parent element', () => {
const mockNode = {
parent: {
type: 'JSXElement',
id: {
type: 'Identifier',
name: 'myIntent',
},
children: [],
},
};
expect(getIntentFromNode(mockNode as any)).toEqual('');
const mockNodeAlt = {
parent: {
type: 'JSXElement',
id: {
type: 'Identifier',
name: 'myIntent',
},
},
};
expect(getIntentFromNode(mockNodeAlt as any)).toEqual('');
});
});