react / react-0.13.3 / examples / basic-commonjs / node_modules / reactify / node_modules / react-tools / src / browser / eventPlugins / __tests__ / AnalyticsEventPlugin-test.js
81159 views/**1* Copyright 2013-2014, Facebook, Inc.2* All rights reserved.3*4* This source code is licensed under the BSD-style license found in the5* LICENSE file in the root directory of this source tree. An additional grant6* of patent rights can be found in the PATENTS file in the same directory.7*8* @emails react-core9*/1011"use strict";1213var mocks = require('mocks');1415describe('AnalyticsEventPlugin', function() {16var AnalyticsEventPluginFactory;17var EventPluginHub;18var EventPluginRegistry;19var React;20var ReactBrowserEventEmitter;21var ReactTestUtils;2223var DefaultEventPluginOrder;24var EnterLeaveEventPlugin;25var ChangeEventPlugin;26var ReactInstanceHandles;27var SimpleEventPlugin;2829beforeEach(function() {30AnalyticsEventPluginFactory = require('AnalyticsEventPluginFactory');31EventPluginHub = require('EventPluginHub');32EventPluginRegistry = require('EventPluginRegistry');33React = require('React');34ReactBrowserEventEmitter = require('ReactBrowserEventEmitter');35ReactTestUtils = require('ReactTestUtils');3637EventPluginRegistry._resetEventPlugins();3839// Re-inject default events system after resetting.40DefaultEventPluginOrder = require('DefaultEventPluginOrder');41EnterLeaveEventPlugin = require('EnterLeaveEventPlugin');42ChangeEventPlugin = require('ChangeEventPlugin');43ReactInstanceHandles = require('ReactInstanceHandles');44SimpleEventPlugin = require('SimpleEventPlugin');4546EventPluginHub.injection.injectEventPluginOrder(DefaultEventPluginOrder);47EventPluginHub.injection.injectInstanceHandle(ReactInstanceHandles);4849EventPluginHub.injection.injectEventPluginsByName({50'SimpleEventPlugin': SimpleEventPlugin,51'EnterLeaveEventPlugin': EnterLeaveEventPlugin,52'ChangeEventPlugin': ChangeEventPlugin53});5455});5657it('should count events correctly', function() {58var numClickEvents = 5;59var numDoubleClickEvents = 7;60var TEST_ANALYTICS_ID = 'test_analytics_id';61var TestValidEvents = React.createClass({62render: function() {63return (64<div ref="testDiv"65data-analytics-id={TEST_ANALYTICS_ID}66data-analytics-events='click,doubleClick'>67Test68</div>69);70}71});72var renderedComponent =73ReactTestUtils.renderIntoDocument(<TestValidEvents />);7475var cb = mocks.getMockFunction().mockImplementation(76function(analyticsData) {77expect(Object.keys(analyticsData).length).toBe(1);78expect(Object.keys(analyticsData[TEST_ANALYTICS_ID]).length).toBe(2);79expect(analyticsData[TEST_ANALYTICS_ID].click).toBe(numClickEvents);80expect(analyticsData[TEST_ANALYTICS_ID].doubleClick).toBe(81numDoubleClickEvents82);83}84);8586EventPluginHub.injection.injectEventPluginsByName({87AnalyticsEventPlugin:88AnalyticsEventPluginFactory.createAnalyticsPlugin(cb)89});9091// Simulate some clicks92for (var i = 0; i < numClickEvents; i++) {93ReactTestUtils.SimulateNative.click(renderedComponent.refs.testDiv);94}95// Simulate some double clicks96for (i = 0; i < numDoubleClickEvents; i++) {97ReactTestUtils.SimulateNative.doubleClick(renderedComponent.refs.testDiv);98}99// Simulate some other events not being tracked for analytics100ReactTestUtils.SimulateNative.focus(renderedComponent.refs.testDiv);101102window.mockRunTimersOnce();103expect(cb).toBeCalled();104});105106it('error non no callback', function() {107expect(function() {108AnalyticsEventPluginFactory.createAnalyticsPlugin(null);109}).toThrow();110});111112it('error on invalid analytics events', function() {113var TestInvalidEvents = React.createClass({114render: function() {115return (116<div ref="testDiv"117data-analytics-id='test_invalid_events'118data-analytics-events='click,123'>119Test120</div>121);122}123});124var renderedComponent =125ReactTestUtils.renderIntoDocument(<TestInvalidEvents />);126127var cb = mocks.getMockFunction();128129EventPluginHub.injection.injectEventPluginsByName({130AnalyticsEventPlugin: AnalyticsEventPluginFactory.createAnalyticsPlugin(131cb132)133});134135var error = false;136try {137ReactTestUtils.SimulateNative.click(renderedComponent.refs.testDiv);138} catch(e) {139error = true;140}141142expect(error).toBe(true);143});144});145146147