1. /**
    
  2.  * Copyright (c) Meta Platforms, Inc. and affiliates.
    
  3.  *
    
  4.  * This source code is licensed under the MIT license found in the
    
  5.  * LICENSE file in the root directory of this source tree.
    
  6.  *
    
  7.  * @emails react-core
    
  8.  */
    
  9. 
    
  10. 'use strict';
    
  11. 
    
  12. let React;
    
  13. let ReactDOM;
    
  14. 
    
  15. describe('SyntheticEvent', () => {
    
  16.   let container;
    
  17. 
    
  18.   beforeEach(() => {
    
  19.     React = require('react');
    
  20.     ReactDOM = require('react-dom');
    
  21. 
    
  22.     container = document.createElement('div');
    
  23.     document.body.appendChild(container);
    
  24.   });
    
  25. 
    
  26.   afterEach(() => {
    
  27.     document.body.removeChild(container);
    
  28.     container = null;
    
  29.   });
    
  30. 
    
  31.   it('should be able to `preventDefault`', () => {
    
  32.     let expectedCount = 0;
    
  33. 
    
  34.     const eventHandler = syntheticEvent => {
    
  35.       expect(syntheticEvent.isDefaultPrevented()).toBe(false);
    
  36.       syntheticEvent.preventDefault();
    
  37.       expect(syntheticEvent.isDefaultPrevented()).toBe(true);
    
  38.       expect(syntheticEvent.defaultPrevented).toBe(true);
    
  39. 
    
  40.       expectedCount++;
    
  41.     };
    
  42.     const node = ReactDOM.render(<div onClick={eventHandler} />, container);
    
  43. 
    
  44.     const event = document.createEvent('Event');
    
  45.     event.initEvent('click', true, true);
    
  46.     node.dispatchEvent(event);
    
  47. 
    
  48.     expect(expectedCount).toBe(1);
    
  49.   });
    
  50. 
    
  51.   it('should be prevented if nativeEvent is prevented', () => {
    
  52.     let expectedCount = 0;
    
  53. 
    
  54.     const eventHandler = syntheticEvent => {
    
  55.       expect(syntheticEvent.isDefaultPrevented()).toBe(true);
    
  56. 
    
  57.       expectedCount++;
    
  58.     };
    
  59.     const node = ReactDOM.render(<div onClick={eventHandler} />, container);
    
  60. 
    
  61.     let event;
    
  62.     event = document.createEvent('Event');
    
  63.     event.initEvent('click', true, true);
    
  64.     event.preventDefault();
    
  65.     node.dispatchEvent(event);
    
  66. 
    
  67.     event = document.createEvent('Event');
    
  68.     event.initEvent('click', true, true);
    
  69.     // Emulate IE8
    
  70.     Object.defineProperty(event, 'defaultPrevented', {
    
  71.       get() {},
    
  72.     });
    
  73.     Object.defineProperty(event, 'returnValue', {
    
  74.       get() {
    
  75.         return false;
    
  76.       },
    
  77.     });
    
  78.     node.dispatchEvent(event);
    
  79. 
    
  80.     expect(expectedCount).toBe(2);
    
  81.   });
    
  82. 
    
  83.   it('should be able to `stopPropagation`', () => {
    
  84.     let expectedCount = 0;
    
  85. 
    
  86.     const eventHandler = syntheticEvent => {
    
  87.       expect(syntheticEvent.isPropagationStopped()).toBe(false);
    
  88.       syntheticEvent.stopPropagation();
    
  89.       expect(syntheticEvent.isPropagationStopped()).toBe(true);
    
  90. 
    
  91.       expectedCount++;
    
  92.     };
    
  93.     const node = ReactDOM.render(<div onClick={eventHandler} />, container);
    
  94. 
    
  95.     const event = document.createEvent('Event');
    
  96.     event.initEvent('click', true, true);
    
  97.     node.dispatchEvent(event);
    
  98. 
    
  99.     expect(expectedCount).toBe(1);
    
  100.   });
    
  101. });