UNPKG

react-native-integrate

Version:

Automate integration of additional code into React Native projects

107 lines (106 loc) 4.02 kB
"use strict"; /* eslint-disable @typescript-eslint/no-unsafe-call */ const stdout = { write: jest.fn(), clearLine: jest.fn(), cursorTo: jest.fn(), }; const stdin = { isTTY: true, setRawMode: jest.fn(), off: jest.fn(), pause: jest.fn(), resume: jest.fn(), on: jest.fn((_, listener) => listener('')), }; describe('waitForInputToContinue', () => { const rollBack = []; beforeAll(() => { Object.entries(stdout).forEach(([key, value]) => { // @ts-ignore const orig = process.stdout[key]; rollBack.push(() => { // @ts-ignore process.stdout[key] = orig; }); // @ts-ignore process.stdout[key] = value; }); Object.entries(stdin).forEach(([key, value]) => { // @ts-ignore const orig = process.stdin[key]; rollBack.push(() => { // @ts-ignore process.stdin[key] = orig; }); // @ts-ignore process.stdin[key] = value; }); }); afterAll(() => { rollBack.forEach(x => x()); }); it('should resolve', async () => { const { waitInputToContinue, } = require('../../../utils/waitInputToContinue'); expect(process.stdin.isTTY).toBe(true); await expect(waitInputToContinue()).resolves.toBe(''); }); it('should reject if user cancels', async () => { // @ts-ignore process.stdin.on = jest.fn((_, listener) => listener(decodeURI('%03'))); const { waitInputToContinue, } = require('../../../utils/waitInputToContinue'); expect(process.stdin.isTTY).toBe(true); await expect(waitInputToContinue()).rejects.toThrowError(''); }); it('should resolve with keys', async () => { // @ts-ignore process.stdin.on = jest.fn((_, listener) => { listener('x'); //should ignore random input listener('y'); //should accept y or n }); const { waitInputToContinue, } = require('../../../utils/waitInputToContinue'); expect(process.stdin.isTTY).toBe(true); await expect(waitInputToContinue('', 'yn')).resolves.toBe('y'); }); it('should resolve with case sensitive keys', async () => { // @ts-ignore process.stdin.on = jest.fn((_, listener) => { listener('x'); //should ignore random input listener('İ'); //should accept y or n }); const { waitInputToContinue, } = require('../../../utils/waitInputToContinue'); expect(process.stdin.isTTY).toBe(true); await expect(waitInputToContinue('', 'İı')).resolves.toBe('İ'); }); describe('listenForKeys', () => { it('should resolve', () => { jest.useFakeTimers(); // @ts-ignore process.stdin.on = jest.fn((_, listener) => { listener('s'); // should accept s }); const { listenForKeys } = require('../../../utils/waitInputToContinue'); const onKey = jest.fn(); const release = listenForKeys('s', onKey); jest.advanceTimersByTime(0); release(); expect(process.stdin.isTTY).toBe(true); expect(onKey).toHaveBeenCalledWith('s'); }); it('should resolve with case sensitive keys', () => { jest.useFakeTimers(); // @ts-ignore process.stdin.on = jest.fn((_, listener) => { listener('x'); //should ignore random input listener('İ'); //should accept y or n }); const { listenForKeys } = require('../../../utils/waitInputToContinue'); const onKey = jest.fn(); const release = listenForKeys('İı', onKey); jest.advanceTimersByTime(0); release(); expect(process.stdin.isTTY).toBe(true); expect(onKey).toHaveBeenCalledWith('İ'); }); }); });