Skip to content

Commit

Permalink
test: add test for metroPlatformResolver
Browse files Browse the repository at this point in the history
  • Loading branch information
thymikee committed Nov 27, 2023
1 parent 2b9f43c commit 371c355
Showing 1 changed file with 110 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
* @format
* @oncall react_native
*/

import type {CustomResolutionContext} from 'metro-resolver/src/types';

import {reactNativePlatformResolver} from '../metroPlatformResolver';

jest.dontMock('../metroPlatformResolver');

describe('reactNativePlatformResolver', () => {
let resolveRequest = jest.fn();
let metroContextMock: Partial<{...CustomResolutionContext}> = {
customResolverOptions: {},
resolveRequest,
};
beforeEach(() => {
resolveRequest.mockReset();
});

test('forwards non react-native module', () => {
reactNativePlatformResolver({visionos: 'react-native-visionos'})(
// $FlowFixMe[incompatible-call]
metroContextMock,
'module-name',
'ios',
);

expect(resolveRequest).toHaveBeenCalledWith(
metroContextMock,
'module-name',
'ios',
);
});

test('rewrites react-native module to out-of-tree platform "macos"', () => {
reactNativePlatformResolver({macos: 'react-native-macos'})(
// $FlowFixMe[incompatible-call]
metroContextMock,
'react-native',
'macos',
);

expect(resolveRequest).toHaveBeenCalledWith(
metroContextMock,
'react-native-macos',
'macos',
);
});

test('rewrites internal react-native/Libraries/Utilities/Platform path to out-of-tree platform "macos"', () => {
reactNativePlatformResolver({macos: 'react-native-macos'})(
// $FlowFixMe[incompatible-call]
metroContextMock,
'react-native/Libraries/Utilities/Platform',
'macos',
);

expect(resolveRequest).toHaveBeenCalledWith(
metroContextMock,
'react-native-macos/Libraries/Utilities/Platform',
'macos',
);
});

test('rewrites react-native module to out-of-tree variant "visionos" based on "ios" platform', () => {
const metroContextMockWithVariant: Partial<{...CustomResolutionContext}> = {
...metroContextMock,
customResolverOptions: {variant: 'visionos'},
};
reactNativePlatformResolver({visionos: 'react-native-visionos'})(
// $FlowFixMe[incompatible-call]
metroContextMockWithVariant,
'react-native',
'ios',
);

expect(resolveRequest).toHaveBeenCalledWith(
metroContextMockWithVariant,
'react-native-visionos',
'ios',
);
});

test('rewrites internal react-native/Libraries/Utilities/Platform path to out-of-tree variant "visionos" based on "ios" platform', () => {
const metroContextMockWithVariant: Partial<{...CustomResolutionContext}> = {
...metroContextMock,
customResolverOptions: {variant: 'visionos'},
};
reactNativePlatformResolver({visionos: 'react-native-visionos'})(
// $FlowFixMe[incompatible-call]
metroContextMockWithVariant,
'react-native/Libraries/Utilities/Platform',
'ios',
);

expect(resolveRequest).toHaveBeenCalledWith(
metroContextMockWithVariant,
'react-native-visionos/Libraries/Utilities/Platform',
'ios',
);
});
});

0 comments on commit 371c355

Please sign in to comment.