Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81155 views
1
/**
2
* Copyright 2013-2014, Facebook, Inc.
3
* All rights reserved.
4
*
5
* This source code is licensed under the BSD-style license found in the
6
* LICENSE file in the root directory of this source tree. An additional grant
7
* of patent rights can be found in the PATENTS file in the same directory.
8
*
9
* @emails react-core
10
*/
11
/*global global:true*/
12
"use strict";
13
14
var mocks = require('mocks');
15
var React = require('React');
16
var ReactDoNotBindDeprecated = require('ReactDoNotBindDeprecated');
17
var ReactTestUtils = require('ReactTestUtils');
18
var reactComponentExpect = require('reactComponentExpect');
19
20
// TODO: Test render and all stock methods.
21
describe('autobinding', function() {
22
23
it('Holds reference to instance', function() {
24
25
var mouseDidEnter = mocks.getMockFunction();
26
var mouseDidLeave = mocks.getMockFunction();
27
var mouseDidClick = mocks.getMockFunction();
28
29
var TestBindComponent = React.createClass({
30
getInitialState: function() {
31
return {something: 'hi'};
32
},
33
onMouseEnter: ReactDoNotBindDeprecated.doNotBind(mouseDidEnter),
34
onMouseLeave: ReactDoNotBindDeprecated.doNotBind(mouseDidLeave),
35
onClick: mouseDidClick,
36
37
// auto binding only occurs on top level functions in class defs.
38
badIdeas: {
39
badBind: function() {
40
this.state.something;
41
}
42
},
43
44
render: function() {
45
return (
46
<div
47
onMouseOver={this.onMouseEnter.bind(this)}
48
onMouseOut={this.onMouseLeave}
49
onClick={this.onClick}
50
/>
51
);
52
}
53
});
54
55
var instance1 = <TestBindComponent />;
56
var mountedInstance1 = ReactTestUtils.renderIntoDocument(instance1);
57
var rendered1 = reactComponentExpect(mountedInstance1)
58
.expectRenderedChild()
59
.instance();
60
61
var instance2 = <TestBindComponent />;
62
var mountedInstance2 = ReactTestUtils.renderIntoDocument(instance2);
63
var rendered2 = reactComponentExpect(mountedInstance2)
64
.expectRenderedChild()
65
.instance();
66
67
expect(function() {
68
var badIdea = instance1.badIdeas.badBind;
69
badIdea();
70
}).toThrow();
71
72
expect(mountedInstance1.onMouseEnter).toBe(mountedInstance2.onMouseEnter);
73
expect(mountedInstance1.onMouseLeave).toBe(mountedInstance2.onMouseLeave);
74
expect(mountedInstance1.onClick).not.toBe(mountedInstance2.onClick);
75
76
ReactTestUtils.Simulate.click(rendered1);
77
expect(mouseDidClick.mock.instances.length).toBe(1);
78
expect(mouseDidClick.mock.instances[0]).toBe(mountedInstance1);
79
80
ReactTestUtils.Simulate.click(rendered2);
81
expect(mouseDidClick.mock.instances.length).toBe(2);
82
expect(mouseDidClick.mock.instances[1]).toBe(mountedInstance2);
83
84
ReactTestUtils.Simulate.mouseOver(rendered1);
85
expect(mouseDidEnter.mock.instances.length).toBe(1);
86
expect(mouseDidEnter.mock.instances[0]).toBe(mountedInstance1);
87
88
ReactTestUtils.Simulate.mouseOver(rendered2);
89
expect(mouseDidEnter.mock.instances.length).toBe(2);
90
expect(mouseDidEnter.mock.instances[1]).toBe(mountedInstance2);
91
92
ReactTestUtils.Simulate.mouseOut(rendered1);
93
expect(mouseDidLeave.mock.instances.length).toBe(1);
94
expect(mouseDidLeave.mock.instances[0]).toBe(global);
95
96
ReactTestUtils.Simulate.mouseOut(rendered2);
97
expect(mouseDidLeave.mock.instances.length).toBe(2);
98
expect(mouseDidLeave.mock.instances[1]).toBe(global);
99
});
100
101
it('works with mixins', function() {
102
var mouseDidClick = mocks.getMockFunction();
103
104
var TestMixin = {
105
onClick: mouseDidClick
106
};
107
108
var TestBindComponent = React.createClass({
109
mixins: [TestMixin],
110
111
render: function() {
112
return <div onClick={this.onClick} />;
113
}
114
});
115
116
var instance1 = <TestBindComponent />;
117
var mountedInstance1 = ReactTestUtils.renderIntoDocument(instance1);
118
var rendered1 = reactComponentExpect(mountedInstance1)
119
.expectRenderedChild()
120
.instance();
121
122
ReactTestUtils.Simulate.click(rendered1);
123
expect(mouseDidClick.mock.instances.length).toBe(1);
124
expect(mouseDidClick.mock.instances[0]).toBe(mountedInstance1);
125
});
126
127
});
128
129