1import { getUserTerminal } from '../terminal'; 2 3const platform = process.platform; 4 5const mockPlatform = (value: typeof process.platform) => 6 Object.defineProperty(process, 'platform', { 7 value, 8 }); 9 10afterEach(() => { 11 mockPlatform(platform); 12}); 13 14describe(getUserTerminal, () => { 15 // We go hard on testing environment variables because they're global, untyped, unversioned territory. 16 const originalValues = { 17 REACT_TERMINAL: process.env.REACT_TERMINAL, 18 TERM_PROGRAM: process.env.TERM_PROGRAM, 19 TERM: process.env.TERM, 20 }; 21 afterEach(() => { 22 Object.keys(originalValues).forEach((key) => { 23 process.env[key] = originalValues[key]; 24 }); 25 }); 26 beforeEach(() => { 27 mockPlatform('darwin'); 28 Object.keys(originalValues).forEach((key) => { 29 delete process.env[key]; 30 }); 31 }); 32 it('defaults to $TERM on non-darwin', () => { 33 mockPlatform('win32'); 34 process.env.TERM_PROGRAM = 'TERM_PROGRAM'; 35 process.env.TERM = 'TERM'; 36 expect(getUserTerminal()).toEqual('TERM'); 37 }); 38 it('defaults to $TERM_PROGRAM on darwin', () => { 39 mockPlatform('darwin'); 40 process.env.TERM_PROGRAM = 'TERM_PROGRAM'; 41 process.env.TERM = 'TERM'; 42 expect(getUserTerminal()).toEqual('TERM_PROGRAM'); 43 }); 44 it('uses $REACT_TERMINAL if defined', () => { 45 process.env.REACT_TERMINAL = 'REACT_TERMINAL'; 46 process.env.TERM_PROGRAM = 'TERM_PROGRAM'; 47 process.env.TERM = 'TERM'; 48 for (const platform of ['darwin', 'win32'] as const) { 49 mockPlatform(platform); 50 expect(getUserTerminal()).toEqual('REACT_TERMINAL'); 51 } 52 }); 53 it('returns undefined when no terminals are defined', () => { 54 for (const platform of ['darwin', 'win32'] as const) { 55 mockPlatform(platform); 56 expect(getUserTerminal()).toEqual(undefined); 57 } 58 }); 59}); 60