forked from jquense/react-widgets
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlist.browser.jsx
105 lines (80 loc) · 2.95 KB
/
list.browser.jsx
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
'use strict';
require('../vendor/phantomjs-shim')
var React = require('react/addons');
var List = require('../src/List.jsx');
//console.log(sinon)
var TestUtils = React.addons.TestUtils
, render = TestUtils.renderIntoDocument;
describe('List', function(){
var data = [
{ label: 'jimmy', id: 0 },
{ label: 'sally', id: 1 },
{ label: 'pat', id: 2 },
{ label: 'jason', id: 3 },
{ label: 'natalie', id: 4 }
];
it('should set initial values', function(){
var list = render(
<List data={data} onChange={()=>{}} />);
expect( list.getDOMNode().children.length).to.be(5);
})
it('should generate ids', function(){
var focused = data[2]
, list = render(<List data={data} focused={focused} />);
let seen = [];
$(React.findDOMNode(list)).children().each(
function(){
expect(this.hasAttribute('id')).to.equal(true);
expect(seen.indexOf(this.id)).to.equal(-1);
seen.push(this.id);
})
})
it('should respect textField and valueFields', function(){
var list = render(
<List data={data} textField='label' valueField='id' />);
expect($(list.getDOMNode()).find('li:first-child').text())
.to.be('jimmy');
})
it('should render an empty list message', function(){
var list = render(<List data={[]} textField='label' valueField='id' />);
expect($(list.getDOMNode()).find('li').text())
.to.be('There are no items in this list');
})
it('should use a Item template', function(){
var Templ = React.createClass({
render: function() {
return (<span>{'hello - ' + this.props.item.label}</span>);
}
});
var list = render(<List data={data} itemComponent={Templ} />);
expect( $(list.getDOMNode()).find('li:first-child').text()).to.be('hello - jimmy');
})
it('should implement first()', function(){
var focused = data[2]
, selected = data[1]
, list = render(<List data={data} selected={selected} focused={focused} />);
expect(list.first(focused)).to.be(data[0]);
})
it('should implement prev()', function(){
var focused = data[4]
, selected = data[3]
, list = render(<List data={data} selected={selected} focused={focused} textField='label' />);
expect(list.prev(selected)).to.be(data[2]);
expect(list.prev(selected, 'sa')).to.be(data[1]);
expect(list.prev(focused)).to.be(data[3]);
expect(list.prev(focused, 'ji')).to.be(data[0]);
})
it('should implement next()', function(){
var focused = data[2]
, selected = data[1]
, list = render(<List data={data} selected={selected} focused={focused} textField='label'/>);
expect(list.next(selected)).to.be(data[2]);
expect(list.next(selected, 'ja')).to.be(data[3]);
expect(list.next(focused, 'na')).to.be(data[4]);
})
it('should implement last()', function(){
var focused = data[2]
, list = render(<List data={data} focused={focused} />);
expect(list.last(focused)).to.be(data[4]);
})
})