addons/isl/src/__tests__/terminalOutput.test.tsxblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import {processTerminalLines} from '../terminalOutput';
b69ab319
b69ab3110describe('terminalOutput', () => {
b69ab3111 describe('handles \\r', () => {
b69ab3112 function lines(s: string): Array<string> {
b69ab3113 // lines from process output may be flushed at different times, not necessarily only at `\n`
b69ab3114 return s.split(/([\r\n])/);
b69ab3115 }
b69ab3116 it('handles normal lines', () => {
b69ab3117 expect(processTerminalLines(lines('foo\nbar\nbaz'))).toEqual(['foo', 'bar', 'baz']);
b69ab3118 expect(processTerminalLines(lines('foo\nbar\nbaz\n'))).toEqual(['foo', 'bar', 'baz']);
b69ab3119 });
b69ab3120
b69ab3121 it('handles \\r\\n as line endings', () => {
b69ab3122 expect(processTerminalLines(lines('foo\r\nbar\r\nbaz\r\n'))).toEqual(['foo', 'bar', 'baz']);
b69ab3123 });
b69ab3124
b69ab3125 it('erases earlier parts of lines using \\r', () => {
b69ab3126 expect(
b69ab3127 processTerminalLines(
b69ab3128 lines('foo\nProgress 0%\rProgress 33%\rProgress 66%\rProgress 100%\nDone!\n'),
b69ab3129 ),
b69ab3130 ).toEqual(['foo', 'Progress 100%', 'Done!']);
b69ab3131 expect(
b69ab3132 processTerminalLines(
b69ab3133 lines('foo\nProgress 0%\rProgress 33%\rProgress 66%\rProgress 100%\r\nDone!\n'),
b69ab3134 ),
b69ab3135 ).toEqual(['foo', 'Progress 100%', 'Done!']);
b69ab3136 });
b69ab3137
b69ab3138 it('trailing \\r still shows progress', () => {
b69ab3139 expect(processTerminalLines(lines('foo\nProgress 0%\rProgress 33%\rProgress 66%\r'))).toEqual(
b69ab3140 ['foo', 'Progress 66%'],
b69ab3141 );
b69ab3142 expect(
b69ab3143 processTerminalLines(lines('foo\nProgress 0%\rProgress 33%\rProgress 66%\r\n')),
b69ab3144 ).toEqual(['foo', 'Progress 66%']);
b69ab3145 });
b69ab3146 });
b69ab3147});