Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81159 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
12
"use strict";
13
14
var mocks = require('mocks');
15
16
describe('AnalyticsEventPlugin', function() {
17
var AnalyticsEventPluginFactory;
18
var EventPluginHub;
19
var EventPluginRegistry;
20
var React;
21
var ReactBrowserEventEmitter;
22
var ReactTestUtils;
23
24
var DefaultEventPluginOrder;
25
var EnterLeaveEventPlugin;
26
var ChangeEventPlugin;
27
var ReactInstanceHandles;
28
var SimpleEventPlugin;
29
30
beforeEach(function() {
31
AnalyticsEventPluginFactory = require('AnalyticsEventPluginFactory');
32
EventPluginHub = require('EventPluginHub');
33
EventPluginRegistry = require('EventPluginRegistry');
34
React = require('React');
35
ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');
36
ReactTestUtils = require('ReactTestUtils');
37
38
EventPluginRegistry._resetEventPlugins();
39
40
// Re-inject default events system after resetting.
41
DefaultEventPluginOrder = require('DefaultEventPluginOrder');
42
EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');
43
ChangeEventPlugin = require('ChangeEventPlugin');
44
ReactInstanceHandles = require('ReactInstanceHandles');
45
SimpleEventPlugin = require('SimpleEventPlugin');
46
47
EventPluginHub.injection.injectEventPluginOrder(DefaultEventPluginOrder);
48
EventPluginHub.injection.injectInstanceHandle(ReactInstanceHandles);
49
50
EventPluginHub.injection.injectEventPluginsByName({
51
'SimpleEventPlugin': SimpleEventPlugin,
52
'EnterLeaveEventPlugin': EnterLeaveEventPlugin,
53
'ChangeEventPlugin': ChangeEventPlugin
54
});
55
56
});
57
58
it('should count events correctly', function() {
59
var numClickEvents = 5;
60
var numDoubleClickEvents = 7;
61
var TEST_ANALYTICS_ID = 'test_analytics_id';
62
var TestValidEvents = React.createClass({
63
render: function() {
64
return (
65
<div ref="testDiv"
66
data-analytics-id={TEST_ANALYTICS_ID}
67
data-analytics-events='click,doubleClick'>
68
Test
69
</div>
70
);
71
}
72
});
73
var renderedComponent =
74
ReactTestUtils.renderIntoDocument(<TestValidEvents />);
75
76
var cb = mocks.getMockFunction().mockImplementation(
77
function(analyticsData) {
78
expect(Object.keys(analyticsData).length).toBe(1);
79
expect(Object.keys(analyticsData[TEST_ANALYTICS_ID]).length).toBe(2);
80
expect(analyticsData[TEST_ANALYTICS_ID].click).toBe(numClickEvents);
81
expect(analyticsData[TEST_ANALYTICS_ID].doubleClick).toBe(
82
numDoubleClickEvents
83
);
84
}
85
);
86
87
EventPluginHub.injection.injectEventPluginsByName({
88
AnalyticsEventPlugin:
89
AnalyticsEventPluginFactory.createAnalyticsPlugin(cb)
90
});
91
92
// Simulate some clicks
93
for (var i = 0; i < numClickEvents; i++) {
94
ReactTestUtils.SimulateNative.click(renderedComponent.refs.testDiv);
95
}
96
// Simulate some double clicks
97
for (i = 0; i < numDoubleClickEvents; i++) {
98
ReactTestUtils.SimulateNative.doubleClick(renderedComponent.refs.testDiv);
99
}
100
// Simulate some other events not being tracked for analytics
101
ReactTestUtils.SimulateNative.focus(renderedComponent.refs.testDiv);
102
103
window.mockRunTimersOnce();
104
expect(cb).toBeCalled();
105
});
106
107
it('error non no callback', function() {
108
expect(function() {
109
AnalyticsEventPluginFactory.createAnalyticsPlugin(null);
110
}).toThrow();
111
});
112
113
it('error on invalid analytics events', function() {
114
var TestInvalidEvents = React.createClass({
115
render: function() {
116
return (
117
<div ref="testDiv"
118
data-analytics-id='test_invalid_events'
119
data-analytics-events='click,123'>
120
Test
121
</div>
122
);
123
}
124
});
125
var renderedComponent =
126
ReactTestUtils.renderIntoDocument(<TestInvalidEvents />);
127
128
var cb = mocks.getMockFunction();
129
130
EventPluginHub.injection.injectEventPluginsByName({
131
AnalyticsEventPlugin: AnalyticsEventPluginFactory.createAnalyticsPlugin(
132
cb
133
)
134
});
135
136
var error = false;
137
try {
138
ReactTestUtils.SimulateNative.click(renderedComponent.refs.testDiv);
139
} catch(e) {
140
error = true;
141
}
142
143
expect(error).toBe(true);
144
});
145
});
146
147