react / react-0.13.3 / examples / basic-commonjs / node_modules / reactify / node_modules / react-tools / src / core / __tests__ / ReactBind-test.js
81155 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*/10/*global global:true*/11"use strict";1213var mocks = require('mocks');14var React = require('React');15var ReactDoNotBindDeprecated = require('ReactDoNotBindDeprecated');16var ReactTestUtils = require('ReactTestUtils');17var reactComponentExpect = require('reactComponentExpect');1819// TODO: Test render and all stock methods.20describe('autobinding', function() {2122it('Holds reference to instance', function() {2324var mouseDidEnter = mocks.getMockFunction();25var mouseDidLeave = mocks.getMockFunction();26var mouseDidClick = mocks.getMockFunction();2728var TestBindComponent = React.createClass({29getInitialState: function() {30return {something: 'hi'};31},32onMouseEnter: ReactDoNotBindDeprecated.doNotBind(mouseDidEnter),33onMouseLeave: ReactDoNotBindDeprecated.doNotBind(mouseDidLeave),34onClick: mouseDidClick,3536// auto binding only occurs on top level functions in class defs.37badIdeas: {38badBind: function() {39this.state.something;40}41},4243render: function() {44return (45<div46onMouseOver={this.onMouseEnter.bind(this)}47onMouseOut={this.onMouseLeave}48onClick={this.onClick}49/>50);51}52});5354var instance1 = <TestBindComponent />;55var mountedInstance1 = ReactTestUtils.renderIntoDocument(instance1);56var rendered1 = reactComponentExpect(mountedInstance1)57.expectRenderedChild()58.instance();5960var instance2 = <TestBindComponent />;61var mountedInstance2 = ReactTestUtils.renderIntoDocument(instance2);62var rendered2 = reactComponentExpect(mountedInstance2)63.expectRenderedChild()64.instance();6566expect(function() {67var badIdea = instance1.badIdeas.badBind;68badIdea();69}).toThrow();7071expect(mountedInstance1.onMouseEnter).toBe(mountedInstance2.onMouseEnter);72expect(mountedInstance1.onMouseLeave).toBe(mountedInstance2.onMouseLeave);73expect(mountedInstance1.onClick).not.toBe(mountedInstance2.onClick);7475ReactTestUtils.Simulate.click(rendered1);76expect(mouseDidClick.mock.instances.length).toBe(1);77expect(mouseDidClick.mock.instances[0]).toBe(mountedInstance1);7879ReactTestUtils.Simulate.click(rendered2);80expect(mouseDidClick.mock.instances.length).toBe(2);81expect(mouseDidClick.mock.instances[1]).toBe(mountedInstance2);8283ReactTestUtils.Simulate.mouseOver(rendered1);84expect(mouseDidEnter.mock.instances.length).toBe(1);85expect(mouseDidEnter.mock.instances[0]).toBe(mountedInstance1);8687ReactTestUtils.Simulate.mouseOver(rendered2);88expect(mouseDidEnter.mock.instances.length).toBe(2);89expect(mouseDidEnter.mock.instances[1]).toBe(mountedInstance2);9091ReactTestUtils.Simulate.mouseOut(rendered1);92expect(mouseDidLeave.mock.instances.length).toBe(1);93expect(mouseDidLeave.mock.instances[0]).toBe(global);9495ReactTestUtils.Simulate.mouseOut(rendered2);96expect(mouseDidLeave.mock.instances.length).toBe(2);97expect(mouseDidLeave.mock.instances[1]).toBe(global);98});99100it('works with mixins', function() {101var mouseDidClick = mocks.getMockFunction();102103var TestMixin = {104onClick: mouseDidClick105};106107var TestBindComponent = React.createClass({108mixins: [TestMixin],109110render: function() {111return <div onClick={this.onClick} />;112}113});114115var instance1 = <TestBindComponent />;116var mountedInstance1 = ReactTestUtils.renderIntoDocument(instance1);117var rendered1 = reactComponentExpect(mountedInstance1)118.expectRenderedChild()119.instance();120121ReactTestUtils.Simulate.click(rendered1);122expect(mouseDidClick.mock.instances.length).toBe(1);123expect(mouseDidClick.mock.instances[0]).toBe(mountedInstance1);124});125126});127128129