react/packages/react-native-renderer/src/__mocks__/FabricUIManager.js

115 lines
2.9 KiB
JavaScript

/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
// Mock of the Native Hooks
const invariant = require('fbjs/lib/invariant');
const roots = new Map();
const allocatedTags = new Set();
const RCTFabricUIManager = {
__dumpHierarchyForJestTestsOnly: function() {
function dumpSubtree(info, indent) {
let out = '';
out +=
' '.repeat(indent) + info.viewName + ' ' + JSON.stringify(info.props);
// eslint-disable-next-line no-for-of-loops/no-for-of-loops
for (const child of info.children) {
out += '\n' + dumpSubtree(child, indent + 2);
}
return out;
}
let result = [];
// eslint-disable-next-line no-for-of-loops/no-for-of-loops
for (const [rootTag, childSet] of roots) {
result.push(rootTag);
// eslint-disable-next-line no-for-of-loops/no-for-of-loops
for (const child of childSet) {
result.push(dumpSubtree(child, 1));
}
}
return result.join('\n');
},
createNode: jest.fn(function createNode(
reactTag,
viewName,
rootTag,
props,
instanceHandle,
) {
invariant(
!allocatedTags.has(reactTag),
'Created two native views with tag %s',
reactTag,
);
allocatedTags.add(reactTag);
return {
reactTag: reactTag,
viewName: viewName,
props: props,
children: [],
};
}),
cloneNode: jest.fn(function cloneNode(node) {
return {
reactTag: node.reactTag,
viewName: node.viewName,
props: node.props,
children: node.children,
};
}),
cloneNodeWithNewChildren: jest.fn(function cloneNodeWithNewChildren(node) {
return {
reactTag: node.reactTag,
viewName: node.viewName,
props: node.props,
children: [],
};
}),
cloneNodeWithNewProps: jest.fn(function cloneNodeWithNewProps(
node,
newPropsDiff,
) {
return {
reactTag: node.reactTag,
viewName: node.viewName,
props: {...node.props, ...newPropsDiff},
children: node.children,
};
}),
cloneNodeWithNewChildrenAndProps: jest.fn(
function cloneNodeWithNewChildrenAndProps(node, newPropsDiff) {
return {
reactTag: node.reactTag,
viewName: node.viewName,
props: {...node.props, ...newPropsDiff},
children: [],
};
},
),
appendChild: jest.fn(function appendChild(parentNode, childNode) {
parentNode.children.push(childNode);
}),
createChildSet: jest.fn(function createChildSet() {
return [];
}),
appendChildToSet: jest.fn(function appendChildToSet(childSet, childNode) {
childSet.push(childNode);
}),
completeRoot: jest.fn(function completeRoot(rootTag, newChildSet) {
roots.set(rootTag, newChildSet);
}),
};
module.exports = RCTFabricUIManager;