forked from react-bootstrap/react-bootstrap
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCarouselSpec.js
131 lines (108 loc) · 4.66 KB
/
CarouselSpec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import React from 'react';
import ReactTestUtils from 'react/lib/ReactTestUtils';
import Carousel from '../src/Carousel';
import CarouselItem from '../src/CarouselItem';
describe('Carousel', () => {
it('Should show the correct item', () => {
let instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={1}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
assert.equal(instance.refs.item1.props.active, false);
assert.equal(instance.refs.item2.props.active, true);
instance = ReactTestUtils.renderIntoDocument(
<Carousel defaultActiveIndex={1}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
assert.equal(instance.refs.item1.props.active, false);
assert.equal(instance.refs.item2.props.active, true);
assert.equal(
ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'carousel-indicators')
.getElementsByTagName('li').length, 2
);
});
it('Should handle null children', () => {
let instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={1}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
{null}
{false}
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
assert.equal(instance.refs.item1.props.active, false);
assert.equal(instance.refs.item2.props.active, true);
assert.equal(
ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'carousel-indicators')
.getElementsByTagName('li').length, 2
);
});
it('Should call onSelect when indicator selected', (done) => {
function onSelect(index, direction) {
assert.equal(index, 0);
assert.equal(direction, 'prev');
done();
}
let instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={1} onSelect={onSelect}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
ReactTestUtils.Simulate.click(
ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'carousel-indicators')
.getElementsByTagName('li')[0]
);
});
it('Should show all controls on the first/last image if wrap is true', () => {
let instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={0} controls={true} wrap={true}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
let backButton = ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'left');
assert.ok(backButton);
assert.equal(backButton.getAttribute('href'), '#prev');
instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={1} controls={true} wrap={true}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
let nextButton = ReactTestUtils.findRenderedDOMComponentWithClass(instance, 'right');
assert.ok(nextButton);
assert.equal(nextButton.getAttribute('href'), '#next');
});
it('Should not show the prev button on the first image if wrap is false', () => {
let instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={0} controls={true} wrap={false}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
</Carousel>
);
let backButtons = ReactTestUtils.scryRenderedDOMComponentsWithClass(instance, 'left');
let nextButtons = ReactTestUtils.scryRenderedDOMComponentsWithClass(instance, 'right');
assert.equal(backButtons.length, 0);
assert.equal(nextButtons.length, 1);
});
it('Should allow user to specify a previous and next icon', () => {
let instance = ReactTestUtils.renderIntoDocument(
<Carousel activeIndex={1} controls={true} wrap={false}
prevIcon={<span className='ficon ficon-left'/>}
nextIcon={<span className='ficon ficon-right'/>}>
<CarouselItem ref="item1">Item 1 content</CarouselItem>
<CarouselItem ref="item2">Item 2 content</CarouselItem>
<CarouselItem ref="item3">Item 3 content</CarouselItem>
</Carousel>
);
let backButtons = ReactTestUtils.scryRenderedDOMComponentsWithClass(instance, 'ficon-left');
let nextButtons = ReactTestUtils.scryRenderedDOMComponentsWithClass(instance, 'ficon-right');
assert.equal(backButtons.length, 1);
assert.equal(nextButtons.length, 1);
});
});