node-pty 1.2.0-beta.1 → 1.2.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/README.md +4 -5
  2. package/binding.gyp +76 -37
  3. package/lib/conpty_console_list_agent.js +10 -1
  4. package/lib/unixTerminal.js +6 -3
  5. package/lib/utils.js +1 -1
  6. package/lib/windowsPtyAgent.js +62 -95
  7. package/lib/windowsTerminal.js +4 -2
  8. package/package.json +6 -5
  9. package/prebuilds/darwin-arm64/pty.node +0 -0
  10. package/prebuilds/darwin-arm64/spawn-helper +0 -0
  11. package/prebuilds/darwin-x64/pty.node +0 -0
  12. package/prebuilds/darwin-x64/spawn-helper +0 -0
  13. package/prebuilds/linux-arm64/pty.node +0 -0
  14. package/prebuilds/linux-x64/pty.node +0 -0
  15. package/prebuilds/win32-arm64/conpty.node +0 -0
  16. package/prebuilds/win32-arm64/conpty.pdb +0 -0
  17. package/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  18. package/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  19. package/prebuilds/win32-x64/conpty.node +0 -0
  20. package/prebuilds/win32-x64/conpty.pdb +0 -0
  21. package/prebuilds/win32-x64/conpty_console_list.node +0 -0
  22. package/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  23. package/scripts/post-install.js +1 -5
  24. package/src/unix/pty.cc +111 -35
  25. package/src/win/conpty.cc +1 -2
  26. package/typings/node-pty.d.ts +13 -9
  27. package/deps/.editorconfig +0 -2
  28. package/deps/winpty/.drone.yml +0 -17
  29. package/deps/winpty/.gitattributes +0 -19
  30. package/deps/winpty/LICENSE +0 -21
  31. package/deps/winpty/Makefile +0 -166
  32. package/deps/winpty/README.md +0 -151
  33. package/deps/winpty/RELEASES.md +0 -280
  34. package/deps/winpty/VERSION.txt +0 -1
  35. package/deps/winpty/configure +0 -167
  36. package/deps/winpty/misc/BufferResizeTests.cc +0 -90
  37. package/deps/winpty/misc/ChangeScreenBuffer.cc +0 -53
  38. package/deps/winpty/misc/ClearConsole.cc +0 -72
  39. package/deps/winpty/misc/ConinMode.cc +0 -117
  40. package/deps/winpty/misc/ConinMode.ps1 +0 -116
  41. package/deps/winpty/misc/ConoutMode.cc +0 -113
  42. package/deps/winpty/misc/DebugClient.py +0 -42
  43. package/deps/winpty/misc/DebugServer.py +0 -63
  44. package/deps/winpty/misc/DumpLines.py +0 -5
  45. package/deps/winpty/misc/EnableExtendedFlags.txt +0 -46
  46. package/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +0 -528
  47. package/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +0 -633
  48. package/deps/winpty/misc/Font-Report-June2016/CP932.txt +0 -630
  49. package/deps/winpty/misc/Font-Report-June2016/CP936.txt +0 -630
  50. package/deps/winpty/misc/Font-Report-June2016/CP949.txt +0 -630
  51. package/deps/winpty/misc/Font-Report-June2016/CP950.txt +0 -630
  52. package/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +0 -16
  53. package/deps/winpty/misc/Font-Report-June2016/Results.txt +0 -4
  54. package/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +0 -144
  55. package/deps/winpty/misc/FontSurvey.cc +0 -100
  56. package/deps/winpty/misc/FormatChar.h +0 -21
  57. package/deps/winpty/misc/FreezePerfTest.cc +0 -62
  58. package/deps/winpty/misc/GetCh.cc +0 -20
  59. package/deps/winpty/misc/GetConsolePos.cc +0 -41
  60. package/deps/winpty/misc/GetFont.cc +0 -261
  61. package/deps/winpty/misc/IdentifyConsoleWindow.ps1 +0 -51
  62. package/deps/winpty/misc/IsNewConsole.cc +0 -87
  63. package/deps/winpty/misc/MouseInputNotes.txt +0 -90
  64. package/deps/winpty/misc/MoveConsoleWindow.cc +0 -34
  65. package/deps/winpty/misc/Notes.txt +0 -219
  66. package/deps/winpty/misc/OSVersion.cc +0 -27
  67. package/deps/winpty/misc/ScreenBufferFreezeInactive.cc +0 -101
  68. package/deps/winpty/misc/ScreenBufferTest.cc +0 -671
  69. package/deps/winpty/misc/ScreenBufferTest2.cc +0 -151
  70. package/deps/winpty/misc/SelectAllTest.cc +0 -45
  71. package/deps/winpty/misc/SetBufferSize.cc +0 -32
  72. package/deps/winpty/misc/SetCursorPos.cc +0 -10
  73. package/deps/winpty/misc/SetFont.cc +0 -145
  74. package/deps/winpty/misc/SetWindowRect.cc +0 -36
  75. package/deps/winpty/misc/ShowArgv.cc +0 -12
  76. package/deps/winpty/misc/ShowConsoleInput.cc +0 -40
  77. package/deps/winpty/misc/Spew.py +0 -5
  78. package/deps/winpty/misc/TestUtil.cc +0 -172
  79. package/deps/winpty/misc/UnicodeDoubleWidthTest.cc +0 -102
  80. package/deps/winpty/misc/UnicodeWideTest1.cc +0 -246
  81. package/deps/winpty/misc/UnicodeWideTest2.cc +0 -130
  82. package/deps/winpty/misc/UnixEcho.cc +0 -89
  83. package/deps/winpty/misc/Utf16Echo.cc +0 -46
  84. package/deps/winpty/misc/VeryLargeRead.cc +0 -122
  85. package/deps/winpty/misc/VkEscapeTest.cc +0 -56
  86. package/deps/winpty/misc/Win10ResizeWhileFrozen.cc +0 -52
  87. package/deps/winpty/misc/Win10WrapTest1.cc +0 -57
  88. package/deps/winpty/misc/Win10WrapTest2.cc +0 -30
  89. package/deps/winpty/misc/Win32Echo1.cc +0 -26
  90. package/deps/winpty/misc/Win32Echo2.cc +0 -19
  91. package/deps/winpty/misc/Win32Test1.cc +0 -46
  92. package/deps/winpty/misc/Win32Test2.cc +0 -70
  93. package/deps/winpty/misc/Win32Test3.cc +0 -78
  94. package/deps/winpty/misc/Win32Write1.cc +0 -44
  95. package/deps/winpty/misc/WindowsBugCrashReader.cc +0 -27
  96. package/deps/winpty/misc/WriteConsole.cc +0 -106
  97. package/deps/winpty/misc/build32.sh +0 -9
  98. package/deps/winpty/misc/build64.sh +0 -9
  99. package/deps/winpty/misc/color-test.sh +0 -212
  100. package/deps/winpty/misc/font-notes.txt +0 -300
  101. package/deps/winpty/misc/winbug-15048.cc +0 -201
  102. package/deps/winpty/ship/build-pty4j-libpty.bat +0 -36
  103. package/deps/winpty/ship/common_ship.py +0 -53
  104. package/deps/winpty/ship/make_msvc_package.py +0 -165
  105. package/deps/winpty/ship/ship.py +0 -108
  106. package/deps/winpty/src/agent/Agent.cc +0 -613
  107. package/deps/winpty/src/agent/Agent.h +0 -103
  108. package/deps/winpty/src/agent/AgentCreateDesktop.cc +0 -84
  109. package/deps/winpty/src/agent/AgentCreateDesktop.h +0 -28
  110. package/deps/winpty/src/agent/ConsoleFont.cc +0 -632
  111. package/deps/winpty/src/agent/ConsoleFont.h +0 -28
  112. package/deps/winpty/src/agent/ConsoleInput.cc +0 -852
  113. package/deps/winpty/src/agent/ConsoleInput.h +0 -109
  114. package/deps/winpty/src/agent/ConsoleInputReencoding.cc +0 -121
  115. package/deps/winpty/src/agent/ConsoleInputReencoding.h +0 -36
  116. package/deps/winpty/src/agent/ConsoleLine.cc +0 -152
  117. package/deps/winpty/src/agent/ConsoleLine.h +0 -41
  118. package/deps/winpty/src/agent/Coord.h +0 -87
  119. package/deps/winpty/src/agent/DebugShowInput.cc +0 -239
  120. package/deps/winpty/src/agent/DebugShowInput.h +0 -32
  121. package/deps/winpty/src/agent/DefaultInputMap.cc +0 -422
  122. package/deps/winpty/src/agent/DefaultInputMap.h +0 -28
  123. package/deps/winpty/src/agent/DsrSender.h +0 -30
  124. package/deps/winpty/src/agent/EventLoop.cc +0 -99
  125. package/deps/winpty/src/agent/EventLoop.h +0 -47
  126. package/deps/winpty/src/agent/InputMap.cc +0 -246
  127. package/deps/winpty/src/agent/InputMap.h +0 -114
  128. package/deps/winpty/src/agent/LargeConsoleRead.cc +0 -71
  129. package/deps/winpty/src/agent/LargeConsoleRead.h +0 -68
  130. package/deps/winpty/src/agent/NamedPipe.cc +0 -378
  131. package/deps/winpty/src/agent/NamedPipe.h +0 -125
  132. package/deps/winpty/src/agent/Scraper.cc +0 -699
  133. package/deps/winpty/src/agent/Scraper.h +0 -103
  134. package/deps/winpty/src/agent/SimplePool.h +0 -75
  135. package/deps/winpty/src/agent/SmallRect.h +0 -143
  136. package/deps/winpty/src/agent/Terminal.cc +0 -535
  137. package/deps/winpty/src/agent/Terminal.h +0 -69
  138. package/deps/winpty/src/agent/UnicodeEncoding.h +0 -157
  139. package/deps/winpty/src/agent/UnicodeEncodingTest.cc +0 -189
  140. package/deps/winpty/src/agent/Win32Console.cc +0 -107
  141. package/deps/winpty/src/agent/Win32Console.h +0 -67
  142. package/deps/winpty/src/agent/Win32ConsoleBuffer.cc +0 -193
  143. package/deps/winpty/src/agent/Win32ConsoleBuffer.h +0 -99
  144. package/deps/winpty/src/agent/main.cc +0 -114
  145. package/deps/winpty/src/agent/subdir.mk +0 -61
  146. package/deps/winpty/src/configurations.gypi +0 -60
  147. package/deps/winpty/src/debugserver/DebugServer.cc +0 -117
  148. package/deps/winpty/src/debugserver/subdir.mk +0 -41
  149. package/deps/winpty/src/include/winpty.h +0 -242
  150. package/deps/winpty/src/include/winpty_constants.h +0 -131
  151. package/deps/winpty/src/libwinpty/AgentLocation.cc +0 -75
  152. package/deps/winpty/src/libwinpty/AgentLocation.h +0 -28
  153. package/deps/winpty/src/libwinpty/LibWinptyException.h +0 -54
  154. package/deps/winpty/src/libwinpty/WinptyInternal.h +0 -72
  155. package/deps/winpty/src/libwinpty/subdir.mk +0 -46
  156. package/deps/winpty/src/libwinpty/winpty.cc +0 -970
  157. package/deps/winpty/src/shared/AgentMsg.h +0 -38
  158. package/deps/winpty/src/shared/BackgroundDesktop.cc +0 -122
  159. package/deps/winpty/src/shared/BackgroundDesktop.h +0 -73
  160. package/deps/winpty/src/shared/Buffer.cc +0 -103
  161. package/deps/winpty/src/shared/Buffer.h +0 -102
  162. package/deps/winpty/src/shared/DebugClient.cc +0 -187
  163. package/deps/winpty/src/shared/DebugClient.h +0 -38
  164. package/deps/winpty/src/shared/GenRandom.cc +0 -138
  165. package/deps/winpty/src/shared/GenRandom.h +0 -55
  166. package/deps/winpty/src/shared/GetCommitHash.bat +0 -13
  167. package/deps/winpty/src/shared/Mutex.h +0 -54
  168. package/deps/winpty/src/shared/OsModule.h +0 -63
  169. package/deps/winpty/src/shared/OwnedHandle.cc +0 -36
  170. package/deps/winpty/src/shared/OwnedHandle.h +0 -45
  171. package/deps/winpty/src/shared/PrecompiledHeader.h +0 -43
  172. package/deps/winpty/src/shared/StringBuilder.h +0 -227
  173. package/deps/winpty/src/shared/StringBuilderTest.cc +0 -114
  174. package/deps/winpty/src/shared/StringUtil.cc +0 -55
  175. package/deps/winpty/src/shared/StringUtil.h +0 -80
  176. package/deps/winpty/src/shared/TimeMeasurement.h +0 -63
  177. package/deps/winpty/src/shared/UnixCtrlChars.h +0 -45
  178. package/deps/winpty/src/shared/UpdateGenVersion.bat +0 -20
  179. package/deps/winpty/src/shared/WindowsSecurity.cc +0 -460
  180. package/deps/winpty/src/shared/WindowsSecurity.h +0 -104
  181. package/deps/winpty/src/shared/WindowsVersion.cc +0 -252
  182. package/deps/winpty/src/shared/WindowsVersion.h +0 -29
  183. package/deps/winpty/src/shared/WinptyAssert.cc +0 -55
  184. package/deps/winpty/src/shared/WinptyAssert.h +0 -64
  185. package/deps/winpty/src/shared/WinptyException.cc +0 -57
  186. package/deps/winpty/src/shared/WinptyException.h +0 -43
  187. package/deps/winpty/src/shared/WinptyVersion.cc +0 -42
  188. package/deps/winpty/src/shared/WinptyVersion.h +0 -27
  189. package/deps/winpty/src/shared/winpty_snprintf.h +0 -99
  190. package/deps/winpty/src/subdir.mk +0 -5
  191. package/deps/winpty/src/tests/subdir.mk +0 -28
  192. package/deps/winpty/src/tests/trivial_test.cc +0 -158
  193. package/deps/winpty/src/unix-adapter/InputHandler.cc +0 -114
  194. package/deps/winpty/src/unix-adapter/InputHandler.h +0 -56
  195. package/deps/winpty/src/unix-adapter/OutputHandler.cc +0 -80
  196. package/deps/winpty/src/unix-adapter/OutputHandler.h +0 -53
  197. package/deps/winpty/src/unix-adapter/Util.cc +0 -86
  198. package/deps/winpty/src/unix-adapter/Util.h +0 -31
  199. package/deps/winpty/src/unix-adapter/WakeupFd.cc +0 -70
  200. package/deps/winpty/src/unix-adapter/WakeupFd.h +0 -42
  201. package/deps/winpty/src/unix-adapter/main.cc +0 -729
  202. package/deps/winpty/src/unix-adapter/subdir.mk +0 -41
  203. package/deps/winpty/src/winpty.gyp +0 -234
  204. package/deps/winpty/vcbuild.bat +0 -83
  205. package/lib/conpty_console_list_agent.js.map +0 -1
  206. package/lib/eventEmitter2.js.map +0 -1
  207. package/lib/eventEmitter2.test.js +0 -30
  208. package/lib/eventEmitter2.test.js.map +0 -1
  209. package/lib/index.js.map +0 -1
  210. package/lib/interfaces.js.map +0 -1
  211. package/lib/shared/conout.js.map +0 -1
  212. package/lib/terminal.js.map +0 -1
  213. package/lib/terminal.test.js +0 -139
  214. package/lib/terminal.test.js.map +0 -1
  215. package/lib/testUtils.test.js +0 -28
  216. package/lib/testUtils.test.js.map +0 -1
  217. package/lib/types.js.map +0 -1
  218. package/lib/unixTerminal.js.map +0 -1
  219. package/lib/unixTerminal.test.js +0 -351
  220. package/lib/unixTerminal.test.js.map +0 -1
  221. package/lib/utils.js.map +0 -1
  222. package/lib/windowsConoutConnection.js.map +0 -1
  223. package/lib/windowsPtyAgent.js.map +0 -1
  224. package/lib/windowsPtyAgent.test.js +0 -90
  225. package/lib/windowsPtyAgent.test.js.map +0 -1
  226. package/lib/windowsTerminal.js.map +0 -1
  227. package/lib/windowsTerminal.test.js +0 -219
  228. package/lib/windowsTerminal.test.js.map +0 -1
  229. package/lib/worker/conoutSocketWorker.js.map +0 -1
  230. package/prebuilds/win32-arm64/pty.node +0 -0
  231. package/prebuilds/win32-arm64/pty.pdb +0 -0
  232. package/prebuilds/win32-arm64/winpty-agent.exe +0 -0
  233. package/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
  234. package/prebuilds/win32-arm64/winpty.dll +0 -0
  235. package/prebuilds/win32-arm64/winpty.pdb +0 -0
  236. package/prebuilds/win32-x64/pty.node +0 -0
  237. package/prebuilds/win32-x64/pty.pdb +0 -0
  238. package/prebuilds/win32-x64/winpty-agent.exe +0 -0
  239. package/prebuilds/win32-x64/winpty-agent.pdb +0 -0
  240. package/prebuilds/win32-x64/winpty.dll +0 -0
  241. package/prebuilds/win32-x64/winpty.pdb +0 -0
  242. package/scripts/gen-compile-commands.js +0 -8
  243. package/scripts/increment-version.js +0 -54
  244. package/src/conpty_console_list_agent.ts +0 -15
  245. package/src/eventEmitter2.test.ts +0 -30
  246. package/src/eventEmitter2.ts +0 -48
  247. package/src/index.ts +0 -52
  248. package/src/interfaces.ts +0 -130
  249. package/src/native.d.ts +0 -54
  250. package/src/shared/conout.ts +0 -15
  251. package/src/terminal.test.ts +0 -119
  252. package/src/terminal.ts +0 -211
  253. package/src/testUtils.test.ts +0 -23
  254. package/src/tsconfig.json +0 -22
  255. package/src/types.ts +0 -15
  256. package/src/unixTerminal.test.ts +0 -367
  257. package/src/unixTerminal.ts +0 -388
  258. package/src/utils.ts +0 -29
  259. package/src/win/winpty.cc +0 -333
  260. package/src/windowsConoutConnection.ts +0 -82
  261. package/src/windowsPtyAgent.test.ts +0 -94
  262. package/src/windowsPtyAgent.ts +0 -321
  263. package/src/windowsTerminal.test.ts +0 -229
  264. package/src/windowsTerminal.ts +0 -203
  265. package/src/worker/conoutSocketWorker.ts +0 -22
@@ -1,367 +0,0 @@
1
- /**
2
- * Copyright (c) 2017, Daniel Imms (MIT License).
3
- * Copyright (c) 2018, Microsoft Corporation (MIT License).
4
- */
5
-
6
- import { UnixTerminal } from './unixTerminal';
7
- import * as assert from 'assert';
8
- import * as cp from 'child_process';
9
- import * as path from 'path';
10
- import * as tty from 'tty';
11
- import * as fs from 'fs';
12
- import { constants } from 'os';
13
- import { pollUntil } from './testUtils.test';
14
- import { pid } from 'process';
15
-
16
- const FIXTURES_PATH = path.normalize(path.join(__dirname, '..', 'fixtures', 'utf8-character.txt'));
17
-
18
- if (process.platform !== 'win32') {
19
- describe('UnixTerminal', () => {
20
- describe('Constructor', () => {
21
- it('should set a valid pts name', () => {
22
- const term = new UnixTerminal('/bin/bash', [], {});
23
- let regExp: RegExp | undefined;
24
- if (process.platform === 'linux') {
25
- // https://linux.die.net/man/4/pts
26
- regExp = /^\/dev\/pts\/\d+$/;
27
- }
28
- if (process.platform === 'darwin') {
29
- // https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man4/pty.4.html
30
- regExp = /^\/dev\/tty[p-sP-S][a-z0-9]+$/;
31
- }
32
- if (regExp) {
33
- assert.ok(regExp.test(term.ptsName), '"' + term.ptsName + '" should match ' + regExp.toString());
34
- }
35
- assert.ok(tty.isatty(term.fd));
36
- });
37
- });
38
-
39
- describe('PtyForkEncodingOption', () => {
40
- it('should default to utf8', (done) => {
41
- const term = new UnixTerminal('/bin/bash', [ '-c', `cat "${FIXTURES_PATH}"` ]);
42
- term.on('data', (data) => {
43
- assert.strictEqual(typeof data, 'string');
44
- assert.strictEqual(data, '\u00E6');
45
- done();
46
- });
47
- });
48
- it('should return a Buffer when encoding is null', (done) => {
49
- const term = new UnixTerminal('/bin/bash', [ '-c', `cat "${FIXTURES_PATH}"` ], {
50
- encoding: null
51
- });
52
- term.on('data', (data) => {
53
- assert.strictEqual(typeof data, 'object');
54
- assert.ok(data instanceof Buffer);
55
- assert.strictEqual(0xC3, data[0]);
56
- assert.strictEqual(0xA6, data[1]);
57
- done();
58
- });
59
- });
60
- it('should support other encodings', (done) => {
61
- const text = 'test æ!';
62
- const term = new UnixTerminal(undefined, ['-c', 'echo "' + text + '"'], {
63
- encoding: 'base64'
64
- });
65
- let buffer = '';
66
- term.onData((data) => {
67
- assert.strictEqual(typeof data, 'string');
68
- buffer += data;
69
- });
70
- term.onExit(() => {
71
- assert.strictEqual(Buffer.alloc(8, buffer, 'base64').toString().replace('\r', '').replace('\n', ''), text);
72
- done();
73
- });
74
- });
75
- });
76
-
77
- describe('open', () => {
78
- let term: UnixTerminal;
79
-
80
- afterEach(() => {
81
- if (term) {
82
- term.slave!.destroy();
83
- term.master!.destroy();
84
- }
85
- });
86
-
87
- it('should open a pty with access to a master and slave socket', (done) => {
88
- term = UnixTerminal.open({});
89
-
90
- let slavebuf = '';
91
- term.slave!.on('data', (data) => {
92
- slavebuf += data;
93
- });
94
-
95
- let masterbuf = '';
96
- term.master!.on('data', (data) => {
97
- masterbuf += data;
98
- });
99
-
100
- pollUntil(() => {
101
- if (masterbuf === 'slave\r\nmaster\r\n' && slavebuf === 'master\n') {
102
- done();
103
- return true;
104
- }
105
- return false;
106
- }, 200, 10);
107
-
108
- term.slave!.write('slave\n');
109
- term.master!.write('master\n');
110
- });
111
- });
112
- describe('close', () => {
113
- const term = new UnixTerminal('node');
114
- it('should exit when terminal is destroyed programmatically', (done) => {
115
- term.on('exit', (code, signal) => {
116
- assert.strictEqual(code, 0);
117
- assert.strictEqual(signal, constants.signals.SIGHUP);
118
- done();
119
- });
120
- term.destroy();
121
- });
122
- });
123
- describe('signals in parent and child', () => {
124
- it('SIGINT - custom in parent and child', done => {
125
- // this test is cumbersome - we have to run it in a sub process to
126
- // see behavior of SIGINT handlers
127
- const data = `
128
- var pty = require('./lib/index');
129
- process.on('SIGINT', () => console.log('SIGINT in parent'));
130
- var ptyProcess = pty.spawn('node', ['-e', 'process.on("SIGINT", ()=>console.log("SIGINT in child"));setTimeout(() => null, 300);'], {
131
- name: 'xterm-color',
132
- cols: 80,
133
- rows: 30,
134
- cwd: process.env.HOME,
135
- env: process.env
136
- });
137
- ptyProcess.on('data', function (data) {
138
- console.log(data);
139
- });
140
- setTimeout(() => null, 500);
141
- console.log('ready', ptyProcess.pid);
142
- `;
143
- const buffer: string[] = [];
144
- const p = cp.spawn('node', ['-e', data]);
145
- let sub = '';
146
- p.stdout.on('data', (data) => {
147
- if (!data.toString().indexOf('ready')) {
148
- sub = data.toString().split(' ')[1].slice(0, -1);
149
- setTimeout(() => {
150
- process.kill(parseInt(sub), 'SIGINT'); // SIGINT to child
151
- p.kill('SIGINT'); // SIGINT to parent
152
- }, 200);
153
- } else {
154
- buffer.push(data.toString().replace(/^\s+|\s+$/g, ''));
155
- }
156
- });
157
- p.on('close', () => {
158
- // handlers in parent and child should have been triggered
159
- assert.strictEqual(buffer.indexOf('SIGINT in child') !== -1, true);
160
- assert.strictEqual(buffer.indexOf('SIGINT in parent') !== -1, true);
161
- done();
162
- });
163
- });
164
- it('SIGINT - custom in parent, default in child', done => {
165
- // this tests the original idea of the signal(...) change in pty.cc:
166
- // to make sure the SIGINT handler of a pty child is reset to default
167
- // and does not interfere with the handler in the parent
168
- const data = `
169
- var pty = require('./lib/index');
170
- process.on('SIGINT', () => console.log('SIGINT in parent'));
171
- var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("should not be printed"), 300);'], {
172
- name: 'xterm-color',
173
- cols: 80,
174
- rows: 30,
175
- cwd: process.env.HOME,
176
- env: process.env
177
- });
178
- ptyProcess.on('data', function (data) {
179
- console.log(data);
180
- });
181
- setTimeout(() => null, 500);
182
- console.log('ready', ptyProcess.pid);
183
- `;
184
- const buffer: string[] = [];
185
- const p = cp.spawn('node', ['-e', data]);
186
- let sub = '';
187
- p.stdout.on('data', (data) => {
188
- if (!data.toString().indexOf('ready')) {
189
- sub = data.toString().split(' ')[1].slice(0, -1);
190
- setTimeout(() => {
191
- process.kill(parseInt(sub), 'SIGINT'); // SIGINT to child
192
- p.kill('SIGINT'); // SIGINT to parent
193
- }, 200);
194
- } else {
195
- buffer.push(data.toString().replace(/^\s+|\s+$/g, ''));
196
- }
197
- });
198
- p.on('close', () => {
199
- // handlers in parent and child should have been triggered
200
- assert.strictEqual(buffer.indexOf('should not be printed') !== -1, false);
201
- assert.strictEqual(buffer.indexOf('SIGINT in parent') !== -1, true);
202
- done();
203
- });
204
- });
205
- it('SIGHUP default (child only)', done => {
206
- const term = new UnixTerminal('node', [ '-e', `
207
- console.log('ready');
208
- setTimeout(()=>console.log('timeout'), 200);`
209
- ]);
210
- let buffer = '';
211
- term.on('data', (data) => {
212
- if (data === 'ready\r\n') {
213
- term.kill();
214
- } else {
215
- buffer += data;
216
- }
217
- });
218
- term.on('exit', () => {
219
- // no timeout in buffer
220
- assert.strictEqual(buffer, '');
221
- done();
222
- });
223
- });
224
- it('SIGUSR1 - custom in parent and child', done => {
225
- let pHandlerCalled = 0;
226
- const handleSigUsr = function(h: any): any {
227
- return function(): void {
228
- pHandlerCalled += 1;
229
- process.removeListener('SIGUSR1', h);
230
- };
231
- };
232
- process.on('SIGUSR1', handleSigUsr(handleSigUsr));
233
-
234
- const term = new UnixTerminal('node', [ '-e', `
235
- process.on('SIGUSR1', () => {
236
- console.log('SIGUSR1 in child');
237
- });
238
- console.log('ready');
239
- setTimeout(()=>null, 200);`
240
- ]);
241
- let buffer = '';
242
- term.on('data', (data) => {
243
- if (data === 'ready\r\n') {
244
- process.kill(process.pid, 'SIGUSR1');
245
- term.kill('SIGUSR1');
246
- } else {
247
- buffer += data;
248
- }
249
- });
250
- term.on('exit', () => {
251
- // should have called both handlers and only once
252
- assert.strictEqual(pHandlerCalled, 1);
253
- assert.strictEqual(buffer, 'SIGUSR1 in child\r\n');
254
- done();
255
- });
256
- });
257
- });
258
- describe('spawn', () => {
259
- if (process.platform === 'darwin') {
260
- it('should return the name of the process', (done) => {
261
- const term = new UnixTerminal('/bin/echo');
262
- assert.strictEqual(term.process, '/bin/echo');
263
- term.on('exit', () => done());
264
- term.destroy();
265
- });
266
- it('should return the name of the sub process', (done) => {
267
- const data = `
268
- var pty = require('./lib/index');
269
- var ptyProcess = pty.spawn('zsh', ['-c', 'python3'], {
270
- env: process.env
271
- });
272
- ptyProcess.on('data', function (data) {
273
- if (ptyProcess.process === 'Python') {
274
- console.log('title', ptyProcess.process);
275
- console.log('ready', ptyProcess.pid);
276
- }
277
- });
278
- `;
279
- const p = cp.spawn('node', ['-e', data]);
280
- let sub = '';
281
- let pid = '';
282
- p.stdout.on('data', (data) => {
283
- if (!data.toString().indexOf('title')) {
284
- sub = data.toString().split(' ')[1].slice(0, -1);
285
- } else if (!data.toString().indexOf('ready')) {
286
- pid = data.toString().split(' ')[1].slice(0, -1);
287
- process.kill(parseInt(pid), 'SIGINT');
288
- p.kill('SIGINT');
289
- }
290
- });
291
- p.on('exit', () => {
292
- assert.notStrictEqual(pid, '');
293
- assert.strictEqual(sub, 'Python');
294
- done();
295
- });
296
- });
297
- it('should close on exec', (done) => {
298
- const data = `
299
- var pty = require('./lib/index');
300
- var ptyProcess = pty.spawn('node', ['-e', 'setTimeout(() => console.log("hello from terminal"), 300);']);
301
- ptyProcess.on('data', function (data) {
302
- console.log(data);
303
- });
304
- setTimeout(() => null, 500);
305
- console.log('ready', ptyProcess.pid);
306
- `;
307
- const buffer: string[] = [];
308
- const readFd = fs.openSync(FIXTURES_PATH, 'r');
309
- const p = cp.spawn('node', ['-e', data], {
310
- stdio: ['ignore', 'pipe', 'pipe', readFd]
311
- });
312
- let sub = '';
313
- p.stdout!.on('data', (data) => {
314
- if (!data.toString().indexOf('ready')) {
315
- sub = data.toString().split(' ')[1].slice(0, -1);
316
- try {
317
- fs.statSync(`/proc/${sub}/fd/${readFd}`);
318
- done('not reachable');
319
- } catch (error) {
320
- assert.notStrictEqual(error.message.indexOf('ENOENT'), -1);
321
- }
322
- setTimeout(() => {
323
- process.kill(parseInt(sub), 'SIGINT'); // SIGINT to child
324
- p.kill('SIGINT'); // SIGINT to parent
325
- }, 200);
326
- } else {
327
- buffer.push(data.toString().replace(/^\s+|\s+$/g, ''));
328
- }
329
- });
330
- p.on('close', () => {
331
- done();
332
- });
333
- });
334
- }
335
- it('should handle exec() errors', (done) => {
336
- const term = new UnixTerminal('/bin/bogus.exe', []);
337
- term.on('exit', (code, signal) => {
338
- assert.strictEqual(code, 1);
339
- done();
340
- });
341
- });
342
- it('should handle chdir() errors', (done) => {
343
- const term = new UnixTerminal('/bin/echo', [], { cwd: '/nowhere' });
344
- term.on('exit', (code, signal) => {
345
- assert.strictEqual(code, 1);
346
- done();
347
- });
348
- });
349
- it('should not leak child process', (done) => {
350
- const count = cp.execSync('ps -ax | grep node | wc -l');
351
- const term = new UnixTerminal('node', [ '-e', `
352
- console.log('ready');
353
- setTimeout(()=>console.log('timeout'), 200);`
354
- ]);
355
- term.on('data', async (data) => {
356
- if (data === 'ready\r\n') {
357
- process.kill(term.pid, 'SIGINT');
358
- await setTimeout(() => null, 1000);
359
- const newCount = cp.execSync('ps -ax | grep node | wc -l');
360
- assert.strictEqual(count.toString(), newCount.toString());
361
- done();
362
- }
363
- });
364
- });
365
- });
366
- });
367
- }