"use strict";
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.eventPersist = exports.simulate = exports.cleanUp = exports.render = void 0;
var react_dom_1 = __importDefault(require("react-dom"));
var test_utils_1 = __importDefault(require("react-dom/test-utils"));
// eslint-disable-next-line no-console
console.warn('arui-feather/test-utils is deprecated. Use `jest` + `enzyme` instead');
var sharedContainer;
/**
 * Рендерит компонент в настоящий DOM, возвращает тестовую обертку.
 *
 * @param element JSX для рендера.
 * @param options Опции для рендера.
 *
 * @returns Тестовая обертка.
 */
function render(element, options) {
    if (options === void 0) { options = {}; }
    var container = options.container;
    if (!container) {
        if (!sharedContainer) {
            sharedContainer = document.createElement('div');
            document.body.appendChild(sharedContainer);
        }
        container = sharedContainer;
    }
    var instance = react_dom_1.default.render(element, container);
    if (!instance) {
        return null;
    }
    return {
        instance: instance,
        node: react_dom_1.default.findDOMNode(instance),
        container: container,
    };
}
exports.render = render;
/**
 * Очищает содержимое DOM после тестов.
 */
function cleanUp() {
    if (sharedContainer) {
        sharedContainer = null;
    }
    while (document.body.childNodes.length > 0) {
        document.body.removeChild(document.body.firstChild);
    }
}
exports.cleanUp = cleanUp;
/**
 * Симулирует событие на HTML узле.
 *
 * @param node HTML узел, на котором необходимо сгенерить событие.
 * @param eventType Тип события.
 * @param eventData Данные для прокисрования в событие.
 */
function simulate(node, eventType, eventData) {
    test_utils_1.default.Simulate[eventType](node, eventData);
}
exports.simulate = simulate;
/**
 * Обеспечивает сохранение полей события в случае SyntheticEvent.
 *
 * @param event Synthetic event.
 */
function eventPersist(event) {
    if (event.persist) {
        event.persist();
    }
}
exports.eventPersist = eventPersist;

//# sourceMappingURL=test-utils.js.map
