/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import {render, fireEvent} from '@testing-library/react'; import {TestUtils} from '../../'; import {sleep} from '../../utils/sleep'; import React, {Component} from 'react'; import { setGlobalInteractionReporter, resetGlobalInteractionReporter, InteractionReport, Tracked, wrapInteractionHandler, describeElement, TrackingScope, withTrackingScope, } from '../Tracked'; let events: InteractionReport[] = []; beforeEach(() => { events = []; setGlobalInteractionReporter((e) => { e.duration = 0; // avoid test unstability e.totalDuration = 0; events.push(e); }); }); afterEach(() => { resetGlobalInteractionReporter(); }); test('Tracked button', () => { const rendering = render( , ); fireEvent.click(rendering.getByTestId('test')); expect(events[0]).toEqual({ action: ` , ); fireEvent.doubleClick(rendering.getByTestId('test')); expect(events[0]).toEqual({ action: `)).toBe('Hi!'); // title expect( describeElement( , ), ).toBe('b'); // key + text expect(describeElement()).toBe('Hi!'); // Rich JSX expect( describeElement( , ), ).toBe(''); // Rich JSX with key expect( describeElement( , ), ).toBe('test'); }); test('Scoped Tracked button', () => { const rendering = render( , ); fireEvent.click(rendering.getByTestId('test')); expect(events[0].scope).toEqual('outer:inner'); }); test('Scoped Tracked button in plugin', () => { const res = TestUtils.renderPlugin({ plugin() { return {}; }, Component() { return ( ); }, }); fireEvent.click(res.renderer.getByTestId('test')); expect(events[0].scope).toEqual('plugin:TestPlugin:outer:inner'); }); test('withScope - fn', () => { const MyCoolComponent = withTrackingScope(function MyCoolComponent() { return ( ); }); const res = TestUtils.renderPlugin({ plugin() { return {}; }, Component() { return ; }, }); fireEvent.click(res.renderer.getByTestId('test')); expect(events[0].scope).toEqual('plugin:TestPlugin:MyCoolComponent'); }); test('withScope - class', () => { const MyCoolComponent = withTrackingScope( class MyCoolComponent extends Component { render() { return ( ); } }, ); const res = TestUtils.renderPlugin({ plugin() { return {}; }, Component() { return ; }, }); fireEvent.click(res.renderer.getByTestId('test')); expect(events[0].scope).toEqual('plugin:TestPlugin:MyCoolComponent'); });