| | |
| | |
| | |
| | |
| |
|
| | import { UnixTerminal } from './unixTerminal'; |
| | import * as assert from 'assert'; |
| | import * as path from 'path'; |
| | import { pollUntil } from './testUtils.test'; |
| |
|
| | const FIXTURES_PATH = path.normalize(path.join(__dirname, '..', 'fixtures', 'utf8-character.txt')); |
| |
|
| | if (process.platform !== 'win32') { |
| | describe('UnixTerminal', () => { |
| | describe('Constructor', () => { |
| | it('should set a valid pts name', () => { |
| | const term = new UnixTerminal('/bin/bash', [], {}); |
| | let regExp; |
| | if (process.platform === 'linux') { |
| | |
| | regExp = /^\/dev\/pts\/\d+$/; |
| | } |
| | if (process.platform === 'darwin') { |
| | |
| | regExp = /^\/dev\/tty[p-sP-S][a-z0-9]+$/; |
| | } |
| | if (regExp) { |
| | assert.ok(regExp.test((<any>term)._pty), '"' + (<any>term)._pty + '" should match ' + regExp.toString()); |
| | } |
| | }); |
| | }); |
| |
|
| | describe('PtyForkEncodingOption', () => { |
| | it('should default to utf8', (done) => { |
| | const term = new UnixTerminal('/bin/bash', [ '-c', `cat "${FIXTURES_PATH}"` ]); |
| | term.on('data', (data) => { |
| | assert.equal(typeof data, 'string'); |
| | assert.equal(data, '\u00E6'); |
| | done(); |
| | }); |
| | }); |
| | it('should return a Buffer when encoding is null', (done) => { |
| | const term = new UnixTerminal('/bin/bash', [ '-c', `cat "${FIXTURES_PATH}"` ], { |
| | encoding: null |
| | }); |
| | term.on('data', (data) => { |
| | assert.equal(typeof data, 'object'); |
| | assert.ok(data instanceof Buffer); |
| | assert.equal(0xC3, data[0]); |
| | assert.equal(0xA6, data[1]); |
| | done(); |
| | }); |
| | }); |
| | it('should support other encodings', (done) => { |
| | const text = 'test æ!'; |
| | const term = new UnixTerminal(null, ['-c', 'echo "' + text + '"'], { |
| | encoding: 'base64' |
| | }); |
| | let buffer = ''; |
| | term.on('data', (data) => { |
| | assert.equal(typeof data, 'string'); |
| | buffer += data; |
| | }); |
| | term.on('exit', () => { |
| | assert.equal(Buffer.alloc(8, buffer, 'base64').toString().replace('\r', '').replace('\n', ''), text); |
| | done(); |
| | }); |
| | }); |
| | }); |
| |
|
| | describe('open', () => { |
| | let term: UnixTerminal; |
| |
|
| | afterEach(() => { |
| | if (term) { |
| | term.slave.destroy(); |
| | term.master.destroy(); |
| | } |
| | }); |
| |
|
| | it('should open a pty with access to a master and slave socket', (done) => { |
| | let doneCalled = false; |
| | term = UnixTerminal.open({}); |
| |
|
| | let slavebuf = ''; |
| | term.slave.on('data', (data) => { |
| | slavebuf += data; |
| | }); |
| |
|
| | let masterbuf = ''; |
| | term.master.on('data', (data) => { |
| | masterbuf += data; |
| | }); |
| |
|
| | pollUntil(() => { |
| | if (masterbuf === 'slave\r\nmaster\r\n' && slavebuf === 'master\n') { |
| | done(); |
| | return true; |
| | } |
| | return false; |
| | }, 200, 10); |
| |
|
| | term.slave.write('slave\n'); |
| | term.master.write('master\n'); |
| | }); |
| | }); |
| | }); |
| | } |
| |
|