node-pty 1.1.0 → 1.2.0-beta.10

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 (264) hide show
  1. package/README.md +3 -5
  2. package/binding.gyp +76 -37
  3. package/lib/unixTerminal.js +6 -3
  4. package/lib/utils.js +1 -1
  5. package/lib/windowsPtyAgent.js +32 -95
  6. package/lib/windowsTerminal.js +2 -2
  7. package/package.json +6 -5
  8. package/prebuilds/darwin-arm64/pty.node +0 -0
  9. package/prebuilds/darwin-arm64/spawn-helper +0 -0
  10. package/prebuilds/darwin-x64/pty.node +0 -0
  11. package/prebuilds/darwin-x64/spawn-helper +0 -0
  12. package/prebuilds/linux-arm64/pty.node +0 -0
  13. package/prebuilds/linux-x64/pty.node +0 -0
  14. package/prebuilds/win32-arm64/conpty.node +0 -0
  15. package/prebuilds/win32-arm64/conpty.pdb +0 -0
  16. package/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  17. package/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  18. package/prebuilds/win32-x64/conpty.node +0 -0
  19. package/prebuilds/win32-x64/conpty.pdb +0 -0
  20. package/prebuilds/win32-x64/conpty_console_list.node +0 -0
  21. package/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  22. package/scripts/post-install.js +1 -5
  23. package/src/unix/pty.cc +111 -35
  24. package/src/win/conpty.cc +1 -2
  25. package/typings/node-pty.d.ts +13 -9
  26. package/deps/.editorconfig +0 -2
  27. package/deps/winpty/.drone.yml +0 -17
  28. package/deps/winpty/.gitattributes +0 -19
  29. package/deps/winpty/LICENSE +0 -21
  30. package/deps/winpty/Makefile +0 -166
  31. package/deps/winpty/README.md +0 -151
  32. package/deps/winpty/RELEASES.md +0 -280
  33. package/deps/winpty/VERSION.txt +0 -1
  34. package/deps/winpty/configure +0 -167
  35. package/deps/winpty/misc/BufferResizeTests.cc +0 -90
  36. package/deps/winpty/misc/ChangeScreenBuffer.cc +0 -53
  37. package/deps/winpty/misc/ClearConsole.cc +0 -72
  38. package/deps/winpty/misc/ConinMode.cc +0 -117
  39. package/deps/winpty/misc/ConinMode.ps1 +0 -116
  40. package/deps/winpty/misc/ConoutMode.cc +0 -113
  41. package/deps/winpty/misc/DebugClient.py +0 -42
  42. package/deps/winpty/misc/DebugServer.py +0 -63
  43. package/deps/winpty/misc/DumpLines.py +0 -5
  44. package/deps/winpty/misc/EnableExtendedFlags.txt +0 -46
  45. package/deps/winpty/misc/Font-Report-June2016/CP437-Consolas.txt +0 -528
  46. package/deps/winpty/misc/Font-Report-June2016/CP437-Lucida.txt +0 -633
  47. package/deps/winpty/misc/Font-Report-June2016/CP932.txt +0 -630
  48. package/deps/winpty/misc/Font-Report-June2016/CP936.txt +0 -630
  49. package/deps/winpty/misc/Font-Report-June2016/CP949.txt +0 -630
  50. package/deps/winpty/misc/Font-Report-June2016/CP950.txt +0 -630
  51. package/deps/winpty/misc/Font-Report-June2016/MinimumWindowWidths.txt +0 -16
  52. package/deps/winpty/misc/Font-Report-June2016/Results.txt +0 -4
  53. package/deps/winpty/misc/Font-Report-June2016/Windows10SetFontBugginess.txt +0 -144
  54. package/deps/winpty/misc/FontSurvey.cc +0 -100
  55. package/deps/winpty/misc/FormatChar.h +0 -21
  56. package/deps/winpty/misc/FreezePerfTest.cc +0 -62
  57. package/deps/winpty/misc/GetCh.cc +0 -20
  58. package/deps/winpty/misc/GetConsolePos.cc +0 -41
  59. package/deps/winpty/misc/GetFont.cc +0 -261
  60. package/deps/winpty/misc/IdentifyConsoleWindow.ps1 +0 -51
  61. package/deps/winpty/misc/IsNewConsole.cc +0 -87
  62. package/deps/winpty/misc/MouseInputNotes.txt +0 -90
  63. package/deps/winpty/misc/MoveConsoleWindow.cc +0 -34
  64. package/deps/winpty/misc/Notes.txt +0 -219
  65. package/deps/winpty/misc/OSVersion.cc +0 -27
  66. package/deps/winpty/misc/ScreenBufferFreezeInactive.cc +0 -101
  67. package/deps/winpty/misc/ScreenBufferTest.cc +0 -671
  68. package/deps/winpty/misc/ScreenBufferTest2.cc +0 -151
  69. package/deps/winpty/misc/SelectAllTest.cc +0 -45
  70. package/deps/winpty/misc/SetBufferSize.cc +0 -32
  71. package/deps/winpty/misc/SetCursorPos.cc +0 -10
  72. package/deps/winpty/misc/SetFont.cc +0 -145
  73. package/deps/winpty/misc/SetWindowRect.cc +0 -36
  74. package/deps/winpty/misc/ShowArgv.cc +0 -12
  75. package/deps/winpty/misc/ShowConsoleInput.cc +0 -40
  76. package/deps/winpty/misc/Spew.py +0 -5
  77. package/deps/winpty/misc/TestUtil.cc +0 -172
  78. package/deps/winpty/misc/UnicodeDoubleWidthTest.cc +0 -102
  79. package/deps/winpty/misc/UnicodeWideTest1.cc +0 -246
  80. package/deps/winpty/misc/UnicodeWideTest2.cc +0 -130
  81. package/deps/winpty/misc/UnixEcho.cc +0 -89
  82. package/deps/winpty/misc/Utf16Echo.cc +0 -46
  83. package/deps/winpty/misc/VeryLargeRead.cc +0 -122
  84. package/deps/winpty/misc/VkEscapeTest.cc +0 -56
  85. package/deps/winpty/misc/Win10ResizeWhileFrozen.cc +0 -52
  86. package/deps/winpty/misc/Win10WrapTest1.cc +0 -57
  87. package/deps/winpty/misc/Win10WrapTest2.cc +0 -30
  88. package/deps/winpty/misc/Win32Echo1.cc +0 -26
  89. package/deps/winpty/misc/Win32Echo2.cc +0 -19
  90. package/deps/winpty/misc/Win32Test1.cc +0 -46
  91. package/deps/winpty/misc/Win32Test2.cc +0 -70
  92. package/deps/winpty/misc/Win32Test3.cc +0 -78
  93. package/deps/winpty/misc/Win32Write1.cc +0 -44
  94. package/deps/winpty/misc/WindowsBugCrashReader.cc +0 -27
  95. package/deps/winpty/misc/WriteConsole.cc +0 -106
  96. package/deps/winpty/misc/build32.sh +0 -9
  97. package/deps/winpty/misc/build64.sh +0 -9
  98. package/deps/winpty/misc/color-test.sh +0 -212
  99. package/deps/winpty/misc/font-notes.txt +0 -300
  100. package/deps/winpty/misc/winbug-15048.cc +0 -201
  101. package/deps/winpty/ship/build-pty4j-libpty.bat +0 -36
  102. package/deps/winpty/ship/common_ship.py +0 -53
  103. package/deps/winpty/ship/make_msvc_package.py +0 -165
  104. package/deps/winpty/ship/ship.py +0 -108
  105. package/deps/winpty/src/agent/Agent.cc +0 -613
  106. package/deps/winpty/src/agent/Agent.h +0 -103
  107. package/deps/winpty/src/agent/AgentCreateDesktop.cc +0 -84
  108. package/deps/winpty/src/agent/AgentCreateDesktop.h +0 -28
  109. package/deps/winpty/src/agent/ConsoleFont.cc +0 -632
  110. package/deps/winpty/src/agent/ConsoleFont.h +0 -28
  111. package/deps/winpty/src/agent/ConsoleInput.cc +0 -852
  112. package/deps/winpty/src/agent/ConsoleInput.h +0 -109
  113. package/deps/winpty/src/agent/ConsoleInputReencoding.cc +0 -121
  114. package/deps/winpty/src/agent/ConsoleInputReencoding.h +0 -36
  115. package/deps/winpty/src/agent/ConsoleLine.cc +0 -152
  116. package/deps/winpty/src/agent/ConsoleLine.h +0 -41
  117. package/deps/winpty/src/agent/Coord.h +0 -87
  118. package/deps/winpty/src/agent/DebugShowInput.cc +0 -239
  119. package/deps/winpty/src/agent/DebugShowInput.h +0 -32
  120. package/deps/winpty/src/agent/DefaultInputMap.cc +0 -422
  121. package/deps/winpty/src/agent/DefaultInputMap.h +0 -28
  122. package/deps/winpty/src/agent/DsrSender.h +0 -30
  123. package/deps/winpty/src/agent/EventLoop.cc +0 -99
  124. package/deps/winpty/src/agent/EventLoop.h +0 -47
  125. package/deps/winpty/src/agent/InputMap.cc +0 -246
  126. package/deps/winpty/src/agent/InputMap.h +0 -114
  127. package/deps/winpty/src/agent/LargeConsoleRead.cc +0 -71
  128. package/deps/winpty/src/agent/LargeConsoleRead.h +0 -68
  129. package/deps/winpty/src/agent/NamedPipe.cc +0 -378
  130. package/deps/winpty/src/agent/NamedPipe.h +0 -125
  131. package/deps/winpty/src/agent/Scraper.cc +0 -699
  132. package/deps/winpty/src/agent/Scraper.h +0 -103
  133. package/deps/winpty/src/agent/SimplePool.h +0 -75
  134. package/deps/winpty/src/agent/SmallRect.h +0 -143
  135. package/deps/winpty/src/agent/Terminal.cc +0 -535
  136. package/deps/winpty/src/agent/Terminal.h +0 -69
  137. package/deps/winpty/src/agent/UnicodeEncoding.h +0 -157
  138. package/deps/winpty/src/agent/UnicodeEncodingTest.cc +0 -189
  139. package/deps/winpty/src/agent/Win32Console.cc +0 -107
  140. package/deps/winpty/src/agent/Win32Console.h +0 -67
  141. package/deps/winpty/src/agent/Win32ConsoleBuffer.cc +0 -193
  142. package/deps/winpty/src/agent/Win32ConsoleBuffer.h +0 -99
  143. package/deps/winpty/src/agent/main.cc +0 -114
  144. package/deps/winpty/src/agent/subdir.mk +0 -61
  145. package/deps/winpty/src/configurations.gypi +0 -60
  146. package/deps/winpty/src/debugserver/DebugServer.cc +0 -117
  147. package/deps/winpty/src/debugserver/subdir.mk +0 -41
  148. package/deps/winpty/src/include/winpty.h +0 -242
  149. package/deps/winpty/src/include/winpty_constants.h +0 -131
  150. package/deps/winpty/src/libwinpty/AgentLocation.cc +0 -75
  151. package/deps/winpty/src/libwinpty/AgentLocation.h +0 -28
  152. package/deps/winpty/src/libwinpty/LibWinptyException.h +0 -54
  153. package/deps/winpty/src/libwinpty/WinptyInternal.h +0 -72
  154. package/deps/winpty/src/libwinpty/subdir.mk +0 -46
  155. package/deps/winpty/src/libwinpty/winpty.cc +0 -970
  156. package/deps/winpty/src/shared/AgentMsg.h +0 -38
  157. package/deps/winpty/src/shared/BackgroundDesktop.cc +0 -122
  158. package/deps/winpty/src/shared/BackgroundDesktop.h +0 -73
  159. package/deps/winpty/src/shared/Buffer.cc +0 -103
  160. package/deps/winpty/src/shared/Buffer.h +0 -102
  161. package/deps/winpty/src/shared/DebugClient.cc +0 -187
  162. package/deps/winpty/src/shared/DebugClient.h +0 -38
  163. package/deps/winpty/src/shared/GenRandom.cc +0 -138
  164. package/deps/winpty/src/shared/GenRandom.h +0 -55
  165. package/deps/winpty/src/shared/GetCommitHash.bat +0 -13
  166. package/deps/winpty/src/shared/Mutex.h +0 -54
  167. package/deps/winpty/src/shared/OsModule.h +0 -63
  168. package/deps/winpty/src/shared/OwnedHandle.cc +0 -36
  169. package/deps/winpty/src/shared/OwnedHandle.h +0 -45
  170. package/deps/winpty/src/shared/PrecompiledHeader.h +0 -43
  171. package/deps/winpty/src/shared/StringBuilder.h +0 -227
  172. package/deps/winpty/src/shared/StringBuilderTest.cc +0 -114
  173. package/deps/winpty/src/shared/StringUtil.cc +0 -55
  174. package/deps/winpty/src/shared/StringUtil.h +0 -80
  175. package/deps/winpty/src/shared/TimeMeasurement.h +0 -63
  176. package/deps/winpty/src/shared/UnixCtrlChars.h +0 -45
  177. package/deps/winpty/src/shared/UpdateGenVersion.bat +0 -20
  178. package/deps/winpty/src/shared/WindowsSecurity.cc +0 -460
  179. package/deps/winpty/src/shared/WindowsSecurity.h +0 -104
  180. package/deps/winpty/src/shared/WindowsVersion.cc +0 -252
  181. package/deps/winpty/src/shared/WindowsVersion.h +0 -29
  182. package/deps/winpty/src/shared/WinptyAssert.cc +0 -55
  183. package/deps/winpty/src/shared/WinptyAssert.h +0 -64
  184. package/deps/winpty/src/shared/WinptyException.cc +0 -57
  185. package/deps/winpty/src/shared/WinptyException.h +0 -43
  186. package/deps/winpty/src/shared/WinptyVersion.cc +0 -42
  187. package/deps/winpty/src/shared/WinptyVersion.h +0 -27
  188. package/deps/winpty/src/shared/winpty_snprintf.h +0 -99
  189. package/deps/winpty/src/subdir.mk +0 -5
  190. package/deps/winpty/src/tests/subdir.mk +0 -28
  191. package/deps/winpty/src/tests/trivial_test.cc +0 -158
  192. package/deps/winpty/src/unix-adapter/InputHandler.cc +0 -114
  193. package/deps/winpty/src/unix-adapter/InputHandler.h +0 -56
  194. package/deps/winpty/src/unix-adapter/OutputHandler.cc +0 -80
  195. package/deps/winpty/src/unix-adapter/OutputHandler.h +0 -53
  196. package/deps/winpty/src/unix-adapter/Util.cc +0 -86
  197. package/deps/winpty/src/unix-adapter/Util.h +0 -31
  198. package/deps/winpty/src/unix-adapter/WakeupFd.cc +0 -70
  199. package/deps/winpty/src/unix-adapter/WakeupFd.h +0 -42
  200. package/deps/winpty/src/unix-adapter/main.cc +0 -729
  201. package/deps/winpty/src/unix-adapter/subdir.mk +0 -41
  202. package/deps/winpty/src/winpty.gyp +0 -234
  203. package/deps/winpty/vcbuild.bat +0 -83
  204. package/lib/conpty_console_list_agent.js.map +0 -1
  205. package/lib/eventEmitter2.js.map +0 -1
  206. package/lib/eventEmitter2.test.js +0 -30
  207. package/lib/eventEmitter2.test.js.map +0 -1
  208. package/lib/index.js.map +0 -1
  209. package/lib/interfaces.js.map +0 -1
  210. package/lib/shared/conout.js.map +0 -1
  211. package/lib/terminal.js.map +0 -1
  212. package/lib/terminal.test.js +0 -139
  213. package/lib/terminal.test.js.map +0 -1
  214. package/lib/testUtils.test.js +0 -28
  215. package/lib/testUtils.test.js.map +0 -1
  216. package/lib/types.js.map +0 -1
  217. package/lib/unixTerminal.js.map +0 -1
  218. package/lib/unixTerminal.test.js +0 -351
  219. package/lib/unixTerminal.test.js.map +0 -1
  220. package/lib/utils.js.map +0 -1
  221. package/lib/windowsConoutConnection.js.map +0 -1
  222. package/lib/windowsPtyAgent.js.map +0 -1
  223. package/lib/windowsPtyAgent.test.js +0 -90
  224. package/lib/windowsPtyAgent.test.js.map +0 -1
  225. package/lib/windowsTerminal.js.map +0 -1
  226. package/lib/windowsTerminal.test.js +0 -219
  227. package/lib/windowsTerminal.test.js.map +0 -1
  228. package/lib/worker/conoutSocketWorker.js.map +0 -1
  229. package/prebuilds/win32-arm64/pty.node +0 -0
  230. package/prebuilds/win32-arm64/pty.pdb +0 -0
  231. package/prebuilds/win32-arm64/winpty-agent.exe +0 -0
  232. package/prebuilds/win32-arm64/winpty-agent.pdb +0 -0
  233. package/prebuilds/win32-arm64/winpty.dll +0 -0
  234. package/prebuilds/win32-arm64/winpty.pdb +0 -0
  235. package/prebuilds/win32-x64/pty.node +0 -0
  236. package/prebuilds/win32-x64/pty.pdb +0 -0
  237. package/prebuilds/win32-x64/winpty-agent.exe +0 -0
  238. package/prebuilds/win32-x64/winpty-agent.pdb +0 -0
  239. package/prebuilds/win32-x64/winpty.dll +0 -0
  240. package/prebuilds/win32-x64/winpty.pdb +0 -0
  241. package/scripts/gen-compile-commands.js +0 -8
  242. package/scripts/increment-version.js +0 -54
  243. package/src/conpty_console_list_agent.ts +0 -15
  244. package/src/eventEmitter2.test.ts +0 -30
  245. package/src/eventEmitter2.ts +0 -48
  246. package/src/index.ts +0 -52
  247. package/src/interfaces.ts +0 -130
  248. package/src/native.d.ts +0 -54
  249. package/src/shared/conout.ts +0 -15
  250. package/src/terminal.test.ts +0 -119
  251. package/src/terminal.ts +0 -211
  252. package/src/testUtils.test.ts +0 -23
  253. package/src/tsconfig.json +0 -22
  254. package/src/types.ts +0 -15
  255. package/src/unixTerminal.test.ts +0 -367
  256. package/src/unixTerminal.ts +0 -388
  257. package/src/utils.ts +0 -29
  258. package/src/win/winpty.cc +0 -333
  259. package/src/windowsConoutConnection.ts +0 -82
  260. package/src/windowsPtyAgent.test.ts +0 -94
  261. package/src/windowsPtyAgent.ts +0 -321
  262. package/src/windowsTerminal.test.ts +0 -229
  263. package/src/windowsTerminal.ts +0 -203
  264. 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
- }