mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
35b2150adb
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/35211 This enables the generation of C++ TurboModule specs in addition to existing Java/ObjC ones. An example is shown in https://github.com/facebook/react-native/pull/35138 Changelog: [Internal] Reviewed By: cipolleschi Differential Revision: D41057630 fbshipit-source-id: 303881a63eb82f0fe8dfe10e533043a6eedb3d11
89 lines
2.7 KiB
JavaScript
89 lines
2.7 KiB
JavaScript
/**
|
|
* 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.
|
|
*
|
|
* @format
|
|
* @oncall react_native
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const sut = require('../generate-specs-cli-executor');
|
|
const fixtures = require('../__test_fixtures__/fixtures');
|
|
const {normalize} = require('path');
|
|
|
|
describe('generateSpec', () => {
|
|
it('invokes RNCodegen with the right params', () => {
|
|
const platform = 'ios';
|
|
const libraryType = 'all';
|
|
const schemaPath = './';
|
|
const componentsOutputDir = normalize(
|
|
'app/ios/build/generated/ios/react/renderer/components/library',
|
|
);
|
|
const modulesOutputDir = normalize('app/ios/build/generated/ios/library');
|
|
const outputDirectory = normalize('app/ios/build/generated/ios');
|
|
const libraryName = 'library';
|
|
const packageName = 'com.library';
|
|
const generators = ['componentsIOS', 'modulesIOS', 'modulesCxx'];
|
|
|
|
jest.mock('fs', () => ({
|
|
readFileSync: (path, encoding) => {
|
|
expect(path).toBe(schemaPath);
|
|
expect(encoding).toBe('utf-8');
|
|
return fixtures.schemaText;
|
|
},
|
|
}));
|
|
|
|
let mkdirpSyncInvoked = 0;
|
|
jest.mock('mkdirp', () => ({
|
|
sync: folder => {
|
|
if (mkdirpSyncInvoked === 0) {
|
|
expect(folder).toBe(outputDirectory);
|
|
}
|
|
|
|
if (mkdirpSyncInvoked === 1) {
|
|
expect(folder).toBe(componentsOutputDir);
|
|
}
|
|
|
|
if (mkdirpSyncInvoked === 2) {
|
|
expect(folder).toBe(modulesOutputDir);
|
|
}
|
|
|
|
mkdirpSyncInvoked += 1;
|
|
},
|
|
}));
|
|
|
|
// We cannot mock directly the `RNCodegen` object because the
|
|
// code access the `lib` folder directly and request a file explicitly.
|
|
// This makes testing harder than usually. To overcome this, we created a utility
|
|
// to retrieve the `Codegen`. By doing that, we can mock the wrapper so that it returns
|
|
// an object with the same interface of the `RNCodegen` object.
|
|
jest.mock('../codegen-utils', () => ({
|
|
getCodegen: () => ({
|
|
generate: (libraryConfig, generatorConfigs) => {
|
|
expect(libraryConfig.libraryName).toBe(libraryName);
|
|
expect(libraryConfig.schema).toStrictEqual(fixtures.schema);
|
|
expect(libraryConfig.outputDirectory).toBe(outputDirectory);
|
|
expect(libraryConfig.packageName).toBe(packageName);
|
|
|
|
expect(generatorConfigs.generators).toStrictEqual(generators);
|
|
expect(generatorConfigs.test).toBeUndefined();
|
|
},
|
|
}),
|
|
}));
|
|
|
|
sut.execute(
|
|
platform,
|
|
schemaPath,
|
|
outputDirectory,
|
|
libraryName,
|
|
packageName,
|
|
libraryType,
|
|
);
|
|
|
|
expect(mkdirpSyncInvoked).toBe(3);
|
|
});
|
|
});
|