@@ -7,6 +7,7 @@ import { IHttpConnectionOptions } from "../src/IHttpConnectionOptions";
7
7
import { HttpTransportType , ITransport , TransferFormat } from "../src/ITransport" ;
8
8
9
9
import { HttpError } from "../src/Errors" ;
10
+ import { ILogger , LogLevel } from "../src/ILogger" ;
10
11
import { NullLogger } from "../src/Loggers" ;
11
12
import { EventSourceConstructor , WebSocketConstructor } from "../src/Polyfills" ;
12
13
@@ -1124,6 +1125,53 @@ describe("HttpConnection", () => {
1124
1125
"Failed to start the transport 'WebSockets': Error: There was an error with the transport." ) ;
1125
1126
} ) ;
1126
1127
1128
+ it ( "logMessageContent displays correctly with binary data" , async ( ) => {
1129
+ await VerifyLogger . run ( async ( logger ) => {
1130
+ const availableTransport = { transport : "LongPolling" , transferFormats : [ "Text" , "Binary" ] } ;
1131
+
1132
+ let sentMessage = "" ;
1133
+ const captureLogger : ILogger = {
1134
+ log : ( logLevel : LogLevel , message : string ) => {
1135
+ if ( logLevel === LogLevel . Trace && message . search ( "data of length" ) > 0 ) {
1136
+ sentMessage = message ;
1137
+ }
1138
+
1139
+ logger . log ( logLevel , message ) ;
1140
+ } ,
1141
+ } ;
1142
+
1143
+ let httpClientGetCount = 0 ;
1144
+ const options : IHttpConnectionOptions = {
1145
+ ...commonOptions ,
1146
+ httpClient : new TestHttpClient ( )
1147
+ . on ( "POST" , ( ) => ( { connectionId : "42" , availableTransports : [ availableTransport ] } ) )
1148
+ . on ( "GET" , ( ) => {
1149
+ httpClientGetCount ++ ;
1150
+ if ( httpClientGetCount === 1 ) {
1151
+ // First long polling request must succeed so start completes
1152
+ return "" ;
1153
+ }
1154
+ return Promise . resolve ( ) ;
1155
+ } )
1156
+ . on ( "DELETE" , ( ) => new HttpResponse ( 202 ) ) ,
1157
+ logMessageContent : true ,
1158
+ logger : captureLogger ,
1159
+ transport : HttpTransportType . LongPolling ,
1160
+ } as IHttpConnectionOptions ;
1161
+
1162
+ const connection = new HttpConnection ( "http://tempuri.org" , options ) ;
1163
+ connection . onreceive = ( ) => null ;
1164
+ try {
1165
+ await connection . start ( TransferFormat . Binary ) ;
1166
+ await connection . send ( new Uint8Array ( [ 104 , 105 , 32 , 58 , 41 ] ) ) ;
1167
+ } finally {
1168
+ await connection . stop ( ) ;
1169
+ }
1170
+
1171
+ expect ( sentMessage ) . toBe ( "(LongPolling transport) sending data. Binary data of length 5. Content: '0x68 0x69 0x20 0x3a 0x29'." ) ;
1172
+ } ) ;
1173
+ } ) ;
1174
+
1127
1175
describe ( ".constructor" , ( ) => {
1128
1176
it ( "throws if no Url is provided" , async ( ) => {
1129
1177
// Force TypeScript to let us call the constructor incorrectly :)
0 commit comments