diff --git a/README.md b/README.md
index 4a4c2caf..1778f8fe 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,6 @@ clear to read and to maintain.
-
- [Installation](#installation)
- [Usage](#usage)
- [With TypeScript](#with-typescript)
@@ -424,6 +423,14 @@ An element is visible if **all** the following conditions are met:
Visible Example
Hidden Attribute Example
+
+ Title of hidden text
+ Hidden Details Example
+
+
+ Title of visible text
+
Visible Details Example
+
```
```javascript
@@ -433,6 +440,8 @@ expect(getByText('Display None Example')).not.toBeVisible()
expect(getByText('Hidden Parent Example')).not.toBeVisible()
expect(getByText('Visible Example')).toBeVisible()
expect(getByText('Hidden Attribute Example')).not.toBeVisible()
+expect(getByText('Hidden Details Example')).not.toBeVisible()
+expect(getByText('Visible Details Example')).toBeVisible()
```
@@ -1204,12 +1213,8 @@ To perform a partial match, you can pass a `RegExp` or use
#### Examples
```html
-
-
- Closing will discard any changes
-
+
+
Closing will discard any changes
```
diff --git a/src/__tests__/to-be-visible.js b/src/__tests__/to-be-visible.js
index f2b4277a..177a938c 100644
--- a/src/__tests__/to-be-visible.js
+++ b/src/__tests__/to-be-visible.js
@@ -134,6 +134,74 @@ describe('.toBeVisible', () => {
})
})
+ describe('when the inner text does not have an enclosing element', () => {
+ describe('when the details is not opened', () => {
+ beforeEach(() => {
+ subject = render(`
+
+ Title of hidden innerText
+ hidden innerText
+
+ `)
+ })
+
+ it('returns false to the details content', () => {
+ expect(subject.container.querySelector('details')).not.toBeVisible()
+ })
+
+ it('returns true to the details summary', () => {
+ expect(subject.container.querySelector('summary')).toBeVisible()
+ })
+
+ describe('when the user clicks on the summary', () => {
+ beforeEach(() => subject.container.querySelector('summary').click())
+
+ it('returns true to the details content', () => {
+ expect(subject.container.querySelector('details')).toBeVisible()
+ })
+
+ it('returns true to the details summary', () => {
+ expect(subject.container.querySelector('summary')).toBeVisible()
+ })
+ })
+ })
+
+ describe('when the details is opened', () => {
+ beforeEach(() => {
+ subject = render(`
+
+ Title of visible innerText
+ visible innerText
+
+ `)
+ })
+
+ it('returns true to the details content', () => {
+ expect(subject.container.querySelector('details')).toBeVisible()
+ })
+
+ it('returns true to inner small content', () => {
+ expect(subject.container.querySelector('small')).toBeVisible()
+ })
+
+ describe('when the user clicks on the summary', () => {
+ beforeEach(() => subject.container.querySelector('summary').click())
+
+ it('returns false to the details content', () => {
+ expect(subject.container.querySelector('details')).not.toBeVisible()
+ })
+
+ it('returns false to the inner small content', () => {
+ expect(subject.container.querySelector('small')).not.toBeVisible()
+ })
+
+ it('returns true to the details summary', () => {
+ expect(subject.container.querySelector('summary')).toBeVisible()
+ })
+ })
+ })
+ })
+
describe('with a nested element', () => {
describe('when the nested is opened', () => {
beforeEach(() => {
@@ -247,6 +315,113 @@ describe('.toBeVisible', () => {
).toBeVisible()
})
})
+
+ describe('with nested details (unenclosed outer, enclosed inner)', () => {
+ describe('when both outer and inner are opened', () => {
+ beforeEach(() => {
+ subject = render(`
+
+ Title of outer unenclosed
+ Unenclosed innerText
+
+ Title of inner enclosed
+
Enclosed innerText
+
+
+ `)
+ })
+
+ it('returns true to outer unenclosed innerText', () => {
+ expect(subject.container.querySelector('details')).toBeVisible()
+ })
+
+ it('returns true to outer summary', () => {
+ expect(subject.container.querySelector('summary')).toBeVisible()
+ })
+
+ it('returns true to inner enclosed innerText', () => {
+ expect(
+ subject.container.querySelector('details > details > div'),
+ ).toBeVisible()
+ })
+
+ it('returns true to inner summary', () => {
+ expect(
+ subject.container.querySelector('details > details > summary'),
+ ).toBeVisible()
+ })
+ })
+
+ describe('when outer is opened and inner is not opened', () => {
+ beforeEach(() => {
+ subject = render(`
+
+ Title of outer unenclosed
+ Unenclosed innerText
+
+ Title of inner enclosed
+
Enclosed innerText
+
+
+ `)
+ })
+
+ it('returns true to outer unenclosed innerText', () => {
+ expect(subject.container.querySelector('details')).toBeVisible()
+ })
+
+ it('returns true to outer summary', () => {
+ expect(subject.container.querySelector('summary')).toBeVisible()
+ })
+
+ it('returns false to inner enclosed innerText', () => {
+ expect(
+ subject.container.querySelector('details > details > div'),
+ ).not.toBeVisible()
+ })
+
+ it('returns true to inner summary', () => {
+ expect(
+ subject.container.querySelector('details > details > summary'),
+ ).toBeVisible()
+ })
+ })
+
+ describe('when outer is not opened and inner is opened', () => {
+ beforeEach(() => {
+ subject = render(`
+
+ Title of outer unenclosed
+ Unenclosed innerText
+
+ Title of inner enclosed
+