UNPKG

react-native-integrate

Version:

Automate integration of additional code into React Native projects

134 lines (133 loc) 4.2 kB
"use strict"; // noinspection JSUnusedGlobalSymbols var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.mockFs = void 0; const constants_1 = require("../../constants"); const escapeRegExp_1 = require("../../utils/escapeRegExp"); const path_1 = __importDefault(require("path")); let store = {}; const permissions = { read: true, write: true, }; function isDirectoryMatch(path, directory) { return new RegExp((0, escapeRegExp_1.escapeRegExp)(directory) + `(?:${(0, escapeRegExp_1.escapeRegExp)(path_1.default.sep)}|$)`, 'i').test(path); } exports.mockFs = { existsSync: jest.fn((path) => { path = path_1.default.resolve(path); return Object.keys(store).some(key => isDirectoryMatch(key, path)); }), renameSync: (from, to) => { from = path_1.default.resolve(from); to = path_1.default.resolve(to); Object.entries(store) .filter(([key]) => isDirectoryMatch(key, from)) .forEach(([key, value]) => { store[key.replace(from, to)] = value; delete store[key]; }); }, readFileSync: (path) => { path = path_1.default.resolve(path); if (!permissions.read) throw new Error('[mock] permission denied'); if (!(path in store)) throw new Error('[mock] file not found'); return store[path]; }, writeFileSync: (path, data) => { path = path_1.default.resolve(path); if (!permissions.write) throw new Error('[mock] permission denied'); store[path] = data; return true; }, copyFileSync: (from, to) => { from = path_1.default.resolve(from); to = path_1.default.resolve(to); const content = exports.mockFs.readFileSync(from); exports.mockFs.writeFileSync(to, content); return true; }, copyFile: jest.fn((from, to, cb) => { from = path_1.default.resolve(from); to = path_1.default.resolve(to); exports.mockFs.copyFileSync(from, to); cb(); }), mkdirSync: () => { return true; }, rmSync: (path) => { path = path_1.default.resolve(path); Object.keys(store) .filter(key => isDirectoryMatch(key, path)) .forEach(key => delete store[key]); return true; }, rm: jest.fn((path, _opts, cb) => { exports.mockFs.rmSync(path); cb(); }), mkdir: jest.fn((_path, _opts, cb) => cb()), readdirSync: () => { return ['test' + constants_1.Constants.XCODEPROJ_EXT]; }, readdir: jest.fn(), unlink: jest.fn((filePath, cb) => { filePath = path_1.default.resolve(filePath); delete store[filePath]; cb(); }), lstatSync: jest.fn((p) => { p = path_1.default.resolve(p); if (Object.keys(store).includes(p)) { return { isFile: () => true, isDirectory: () => false, }; } else if (Object.keys(store).some(key => isDirectoryMatch(key, p))) { return { isFile: () => false, isDirectory: () => true, }; } else { throw new Error('[mock] file not found'); } }), watch: (_filePath, // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types _opts, listener) => { if (!permissions.read) throw new Error('[mock] permission denied'); // simulate created setImmediate(() => listener('rename', 'file.json')); return { close: jest.fn(), }; }, reset() { store = {}; permissions.read = true; permissions.write = true; }, getStore() { return store; }, setReadPermission(value) { permissions.read = value; }, setWritePermission(value) { permissions.write = value; }, get permissions() { return permissions; }, }; jest.mock('fs', () => exports.mockFs);