Skip to content

Commit f9f306f

Browse files
committed
fix(__tests__/hooks/svg-filters) Add tests
1 parent c2b4a15 commit f9f306f

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
2+
import { render, unmountComponentAtNode } from 'react-dom'
3+
import Filter from '../../src/components/svg-filters'
4+
import React from 'react'
5+
import { act } from 'react-dom/test-utils'
6+
7+
let container
8+
9+
beforeEach(() => {
10+
container = document.createElement('div')
11+
document.body.appendChild(container)
12+
})
13+
afterEach(() => {
14+
unmountComponentAtNode(container)
15+
container.remove()
16+
container = null
17+
})
18+
19+
it('should set default attributes', () => {
20+
21+
let filter
22+
23+
act(() => {
24+
render(<svg><Filter name='shadow' /></svg>, container)
25+
})
26+
27+
filter = container.querySelector('filter')
28+
29+
expect(filter.id).toBe('shadow')
30+
expect(filter.getAttribute('width')).toBe('300%')
31+
expect(filter.getAttribute('height')).toBe('300%')
32+
expect(filter.getAttribute('x')).toBe('-100%')
33+
expect(filter.getAttribute('y')).toBe('-100%')
34+
// Only when last primitive is <feBlend>, <feComposite>, or <feMerge>
35+
expect(filter.lastElementChild.getAttribute('in')).toBe('SourceGraphic')
36+
37+
act(() => {
38+
render(<svg><Filter name='shadow-inset' /></svg>, container)
39+
})
40+
41+
filter = container.querySelector('filter')
42+
43+
expect(filter.getAttribute('width')).toBe('100%')
44+
expect(filter.getAttribute('height')).toBe('100%')
45+
expect(filter.getAttribute('x')).toBe('0%')
46+
expect(filter.getAttribute('y')).toBe('0%')
47+
})
48+
it('should set expected dimension/coordinate atributes', () => {
49+
50+
act(() => {
51+
render(<svg><Filter name='shadow' x='50%' height='300%' /></svg>, container)
52+
})
53+
54+
const filter = container.querySelector('filter')
55+
56+
expect(filter.getAttribute('width')).toBeNull()
57+
expect(filter.getAttribute('height')).toBe('300%')
58+
expect(filter.getAttribute('x')).toBe('50%')
59+
expect(filter.getAttribute('y')).toBe('-100%')
60+
})
61+
it('should compose multiple filter primitives when given a `in` prop', () => {
62+
63+
act(() => {
64+
render(
65+
<svg>
66+
<filter id='shadow-glow'>
67+
<Filter result='shadow' name='shadow' />
68+
<Filter in='shadow' name='glow' />
69+
</filter>
70+
</svg>,
71+
container)
72+
})
73+
74+
// Ie. blend/compose/merge in the result of the previous effect.
75+
expect(container.querySelector('filter').lastElementChild.getAttribute('in')).toBe('shadow')
76+
})

0 commit comments

Comments
 (0)