react-native-builder-bob
Version:
CLI to build JavaScript files for React Native libraries
103 lines (98 loc) • 3.65 kB
JavaScript
import path from 'node:path';
import { afterEach, beforeEach, describe, expect, test } from 'vitest';
import fs from 'fs-extra';
import mockfs from 'mock-fs';
import { patchCodegenAndroidPackage } from "./patchCodegenAndroidPackage.js";
const mockPackageJson = {
codegenConfig: {
outputDir: {
android: 'android/generated',
},
android: {
javaPackageName: 'com.bobtest',
},
},
};
const mockReport = {
info: console.log,
warn: console.log,
error: console.error,
success: console.log,
};
const mockJavaModuleSpec = `
/**
* Some comment
*/
package com.facebook.fbreact.specs;
import com.example.exampleimport;
class SomeClass {
public void someMethod() {
// some code
}
}`;
const mockJavaViewSpec = `
/**
* Some comment
*/
package com.facebook.react.viewmanagers;
public interface SomeInterface<T extends View> {
void setColor(T view, @Nullable String value);
}
`;
const mockProjectPath = path.resolve(import.meta.dirname, 'mockProject');
const mockCodegenModuleSpecsPath = path.resolve(mockProjectPath, 'android/generated/java/com/facebook/fbreact/specs');
const mockCodegenViewSpecsPath = path.resolve(mockProjectPath, 'android/generated/java/com/facebook/react/viewmanagers');
describe('patchCodegenAndroidPackage', () => {
beforeEach(() => {
mockfs({
[]: {
'package.json': JSON.stringify(mockPackageJson),
},
[]: {
'NativeBobtestSpec.java': mockJavaModuleSpec,
},
});
});
afterEach(() => {
mockfs.restore();
});
test('moves the files to correct dir', async () => {
await patchCodegenAndroidPackage(mockProjectPath, mockPackageJson, mockReport);
const expectedDir = path.resolve(mockProjectPath, 'android/generated/java/com/bobtest');
expect(await fs.pathExists(expectedDir)).toBe(true);
});
test('replaces the package name in the files', async () => {
await patchCodegenAndroidPackage(mockProjectPath, mockPackageJson, mockReport);
const expectedDir = path.resolve(mockProjectPath, 'android/generated/java/com/bobtest');
const expectedFile = path.resolve(expectedDir, 'NativeBobtestSpec.java');
const fileContent = await fs.readFile(expectedFile, 'utf8');
expect(fileContent).toContain('package com.bobtest;');
});
test('removes the old package dir', async () => {
await patchCodegenAndroidPackage(mockProjectPath, mockPackageJson, mockReport);
expect(await fs.pathExists(mockCodegenModuleSpecsPath)).toBe(false);
});
test("doesn't delete the view manager specs", async () => {
const mockPackageJsonWithTypeAll = {
...mockPackageJson,
codegenConfig: {
...mockPackageJson.codegenConfig,
type: 'all',
},
};
mockfs({
[]: {
'package.json': JSON.stringify(mockPackageJsonWithTypeAll),
},
[]: {
'NativeBobtestSpec.java': mockJavaModuleSpec,
},
[]: {
'BobtestViewManagerInterface.java': mockJavaViewSpec,
},
});
await patchCodegenAndroidPackage(mockProjectPath, mockPackageJsonWithTypeAll, mockReport);
expect(await fs.pathExists(path.join(mockCodegenViewSpecsPath, 'BobtestViewManagerInterface.java'))).toBeTruthy();
});
});
//# sourceMappingURL=patchCodegenAndroidPackage.test.js.map