1// Copyright Joyent, Inc. and other Node contributors. 2// 3// Permission is hereby granted, free of charge, to any person obtaining a 4// copy of this software and associated documentation files (the 5// "Software"), to deal in the Software without restriction, including 6// without limitation the rights to use, copy, modify, merge, publish, 7// distribute, sublicense, and/or sell copies of the Software, and to permit 8// persons to whom the Software is furnished to do so, subject to the 9// following conditions: 10// 11// The above copyright notice and this permission notice shall be included 12// in all copies or substantial portions of the Software. 13// 14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 17// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 18// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20// USE OR OTHER DEALINGS IN THE SOFTWARE. 21 22'use strict'; 23require('../common'); 24const assert = require('assert'); 25const readline = require('readline'); 26const Stream = require('stream'); 27 28const stream = new Stream(); 29let expectedRawMode = true; 30let rawModeCalled = false; 31let resumeCalled = false; 32let pauseCalled = false; 33 34stream.setRawMode = function(mode) { 35 rawModeCalled = true; 36 assert.strictEqual(mode, expectedRawMode); 37}; 38stream.resume = function() { 39 resumeCalled = true; 40}; 41stream.pause = function() { 42 pauseCalled = true; 43}; 44 45// When the "readline" starts in "terminal" mode, 46// then setRawMode(true) should be called 47const rli = readline.createInterface({ 48 input: stream, 49 output: stream, 50 terminal: true 51}); 52assert(rli.terminal); 53assert(rawModeCalled); 54assert(resumeCalled); 55assert(!pauseCalled); 56 57 58// pause() should call *not* call setRawMode() 59rawModeCalled = false; 60resumeCalled = false; 61pauseCalled = false; 62rli.pause(); 63assert(!rawModeCalled); 64assert(!resumeCalled); 65assert(pauseCalled); 66 67 68// resume() should *not* call setRawMode() 69rawModeCalled = false; 70resumeCalled = false; 71pauseCalled = false; 72rli.resume(); 73assert(!rawModeCalled); 74assert(resumeCalled); 75assert(!pauseCalled); 76 77 78// close() should call setRawMode(false) 79expectedRawMode = false; 80rawModeCalled = false; 81resumeCalled = false; 82pauseCalled = false; 83rli.close(); 84assert(rawModeCalled); 85assert(!resumeCalled); 86assert(pauseCalled); 87 88assert.deepStrictEqual(stream.listeners('keypress'), []); 89// One data listener for the keypress events. 90assert.strictEqual(stream.listeners('data').length, 1); 91