diff --git a/packages/react-native/src/private/webapis/dom/nodes/__tests__/ReactNativeDocument-itest.js b/packages/react-native/src/private/webapis/dom/nodes/__tests__/ReactNativeDocument-itest.js index 75afc1751af..ccfdd12129e 100644 --- a/packages/react-native/src/private/webapis/dom/nodes/__tests__/ReactNativeDocument-itest.js +++ b/packages/react-native/src/private/webapis/dom/nodes/__tests__/ReactNativeDocument-itest.js @@ -125,6 +125,32 @@ describe('ReactNativeDocument', () => { expect(document.textContent).toBe(null); }); + it('provides a documentElement node that behaves like a regular element', () => { + let lastNode; + + const root = Fantom.createRoot({viewportWidth: 200, viewportHeight: 100}); + Fantom.runTask(() => { + root.render( + { + lastNode = node; + }} + />, + ); + }); + + const element = ensureInstance(lastNode, ReactNativeElement); + const document = ensureInstance(element.ownerDocument, ReactNativeDocument); + + const {x, y, width, height} = + document.documentElement.getBoundingClientRect(); + + expect(x).toBe(0); + expect(y).toBe(0); + expect(width).toBe(200); + expect(height).toBe(100); + }); + it('implements compareDocumentPosition correctly', () => { let lastNode; diff --git a/packages/react-native/src/private/webapis/dom/nodes/internals/NodeInternals.js b/packages/react-native/src/private/webapis/dom/nodes/internals/NodeInternals.js index 77cd8a796f0..44e105c869e 100644 --- a/packages/react-native/src/private/webapis/dom/nodes/internals/NodeInternals.js +++ b/packages/react-native/src/private/webapis/dom/nodes/internals/NodeInternals.js @@ -129,6 +129,12 @@ export function getNativeElementReference( // $FlowExpectedError[incompatible-cast] We know ReadOnlyElement instances provide InternalInstanceHandle const instanceHandle = getInstanceHandle(node) as InternalInstanceHandle; + if (isReactNativeDocumentElementInstanceHandle(instanceHandle)) { + return getNativeElementReferenceFromReactNativeDocumentElementInstanceHandle( + instanceHandle, + ); + } + // $FlowExpectedError[incompatible-return] return getRendererProxy().getNodeFromInternalInstanceHandle(instanceHandle); }