1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4 5const http = require('http'); 6const OutgoingMessage = http.OutgoingMessage; 7const ClientRequest = http.ClientRequest; 8const ServerResponse = http.ServerResponse; 9 10assert.strictEqual( 11 typeof ClientRequest.prototype._implicitHeader, 'function'); 12assert.strictEqual( 13 typeof ServerResponse.prototype._implicitHeader, 'function'); 14 15// validateHeader 16assert.throws(() => { 17 const outgoingMessage = new OutgoingMessage(); 18 outgoingMessage.setHeader(); 19}, { 20 code: 'ERR_INVALID_HTTP_TOKEN', 21 name: 'TypeError', 22 message: 'Header name must be a valid HTTP token ["undefined"]' 23}); 24 25assert.throws(() => { 26 const outgoingMessage = new OutgoingMessage(); 27 outgoingMessage.setHeader('test'); 28}, { 29 code: 'ERR_HTTP_INVALID_HEADER_VALUE', 30 name: 'TypeError', 31 message: 'Invalid value "undefined" for header "test"' 32}); 33 34assert.throws(() => { 35 const outgoingMessage = new OutgoingMessage(); 36 outgoingMessage.setHeader(404); 37}, { 38 code: 'ERR_INVALID_HTTP_TOKEN', 39 name: 'TypeError', 40 message: 'Header name must be a valid HTTP token ["404"]' 41}); 42 43assert.throws(() => { 44 const outgoingMessage = new OutgoingMessage(); 45 outgoingMessage.setHeader.call({ _header: 'test' }, 'test', 'value'); 46}, { 47 code: 'ERR_HTTP_HEADERS_SENT', 48 name: 'Error', 49 message: 'Cannot set headers after they are sent to the client' 50}); 51 52assert.throws(() => { 53 const outgoingMessage = new OutgoingMessage(); 54 outgoingMessage.setHeader('200', 'あ'); 55}, { 56 code: 'ERR_INVALID_CHAR', 57 name: 'TypeError', 58 message: 'Invalid character in header content ["200"]' 59}); 60 61// write 62{ 63 const outgoingMessage = new OutgoingMessage(); 64 65 outgoingMessage.on('error', common.expectsError({ 66 code: 'ERR_METHOD_NOT_IMPLEMENTED', 67 name: 'Error', 68 message: 'The _implicitHeader() method is not implemented' 69 })); 70 71 outgoingMessage.write(''); 72} 73 74assert(OutgoingMessage.prototype.write.call({ _header: 'test' })); 75 76assert.throws(() => { 77 const outgoingMessage = new OutgoingMessage(); 78 outgoingMessage.write.call({ _header: 'test', _hasBody: 'test' }); 79}, { 80 code: 'ERR_INVALID_ARG_TYPE', 81 name: 'TypeError', 82 message: 'The first argument must be of type string or an instance of ' + 83 'Buffer or Uint8Array. Received undefined' 84}); 85 86assert.throws(() => { 87 const outgoingMessage = new OutgoingMessage(); 88 outgoingMessage.write.call({ _header: 'test', _hasBody: 'test' }, 1); 89}, { 90 code: 'ERR_INVALID_ARG_TYPE', 91 name: 'TypeError', 92 message: 'The first argument must be of type string or an instance of ' + 93 'Buffer or Uint8Array. Received type number (1)' 94}); 95 96// addTrailers() 97// The `Error` comes from the JavaScript engine so confirm that it is a 98// `TypeError` but do not check the message. It will be different in different 99// JavaScript engines. 100assert.throws(() => { 101 const outgoingMessage = new OutgoingMessage(); 102 outgoingMessage.addTrailers(); 103}, TypeError); 104 105assert.throws(() => { 106 const outgoingMessage = new OutgoingMessage(); 107 outgoingMessage.addTrailers({ 'あ': 'value' }); 108}, { 109 code: 'ERR_INVALID_HTTP_TOKEN', 110 name: 'TypeError', 111 message: 'Trailer name must be a valid HTTP token ["あ"]' 112}); 113 114assert.throws(() => { 115 const outgoingMessage = new OutgoingMessage(); 116 outgoingMessage.addTrailers({ 404: 'あ' }); 117}, { 118 code: 'ERR_INVALID_CHAR', 119 name: 'TypeError', 120 message: 'Invalid character in trailer content ["404"]' 121}); 122