@@ -206,37 +206,82 @@ suite('Debugging - Adapter Factory', () => {
206
206
assert . deepEqual ( descriptor , nodeExecutable ) ;
207
207
} ) ;
208
208
209
- test ( 'Return Debug Adapter server if in DA experiment, configuration is attach and port is specified' , async ( ) => {
209
+ test ( 'Return Debug Adapter server if in DA experiment, request is " attach", and port is specified directly ' , async ( ) => {
210
210
const session = createSession ( { request : 'attach' , port : 5678 , host : 'localhost' } ) ;
211
211
const debugServer = new DebugAdapterServer ( session . configuration . port , session . configuration . host ) ;
212
212
213
213
when ( spiedInstance . inExperiment ( DebugAdapterNewPtvsd . experiment ) ) . thenReturn ( true ) ;
214
214
const descriptor = await factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
215
215
216
- // Interpreter not needed for attach
216
+ // Interpreter not needed for host/port
217
217
verify ( interpreterService . getInterpreters ( anything ( ) ) ) . never ( ) ;
218
218
assert . deepEqual ( descriptor , debugServer ) ;
219
219
} ) ;
220
220
221
- test ( 'Throw error if in DA experiment, configuration is attach, port is 0 and process ID is not specified' , async ( ) => {
222
- const session = createSession ( { request : 'attach' , port : 0 , host : 'localhost' } ) ;
221
+ test ( 'Return Debug Adapter server if in DA experiment, request is "attach", and connect is specified' , async ( ) => {
222
+ const session = createSession ( { request : 'attach' , connect : { port : 5678 , host : 'localhost' } } ) ;
223
+ const debugServer = new DebugAdapterServer (
224
+ session . configuration . connect . port ,
225
+ session . configuration . connect . host
226
+ ) ;
223
227
224
228
when ( spiedInstance . inExperiment ( DebugAdapterNewPtvsd . experiment ) ) . thenReturn ( true ) ;
225
- const promise = factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
229
+ const descriptor = await factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
226
230
227
- await expect ( promise ) . to . eventually . be . rejectedWith (
228
- 'Port or processId must be specified for request type attach'
229
- ) ;
231
+ // Interpreter not needed for connect
232
+ verify ( interpreterService . getInterpreters ( anything ( ) ) ) . never ( ) ;
233
+ assert . deepEqual ( descriptor , debugServer ) ;
234
+ } ) ;
235
+
236
+ test ( 'Return Debug Adapter executable if in DA experiment, request is "attach", and listen is specified' , async ( ) => {
237
+ const session = createSession ( { request : 'attach' , listen : { port : 5678 , host : 'localhost' } } ) ;
238
+ const debugExecutable = new DebugAdapterExecutable ( pythonPath , [ ptvsdAdapterPathWithWheels ] ) ;
239
+
240
+ when ( spiedInstance . inExperiment ( DebugAdapterNewPtvsd . experiment ) ) . thenReturn ( true ) ;
241
+ when ( interpreterService . getActiveInterpreter ( anything ( ) ) ) . thenResolve ( interpreter ) ;
242
+
243
+ const descriptor = await factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
244
+ assert . deepEqual ( descriptor , debugExecutable ) ;
245
+ } ) ;
246
+
247
+ test ( 'Return Debug Adapter server if in DA experiment, request is "attach", and debugServer is specified' , async ( ) => {
248
+ const session = createSession ( { request : 'attach' , debugServer : 5678 } ) ;
249
+ const debugServer = new DebugAdapterServer ( session . configuration . debugServer ) ;
250
+
251
+ when ( spiedInstance . inExperiment ( DebugAdapterNewPtvsd . experiment ) ) . thenReturn ( true ) ;
252
+ const descriptor = await factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
253
+
254
+ // Interpreter not needed for debugServer
255
+ verify ( interpreterService . getInterpreters ( anything ( ) ) ) . never ( ) ;
256
+ assert . deepEqual ( descriptor , debugServer ) ;
257
+ } ) ;
258
+
259
+ test ( 'Return Debug Adapter server if in DA experiment, request is "launch", and debugServer is specified' , async ( ) => {
260
+ const session = createSession ( { request : 'launch' , debugServer : 5678 } ) ;
261
+ const debugServer = new DebugAdapterServer ( session . configuration . debugServer ) ;
262
+
263
+ when ( spiedInstance . inExperiment ( DebugAdapterNewPtvsd . experiment ) ) . thenReturn ( true ) ;
264
+ const descriptor = await factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
265
+
266
+ // Interpreter not needed for debugServer
267
+ verify ( interpreterService . getInterpreters ( anything ( ) ) ) . never ( ) ;
268
+ assert . deepEqual ( descriptor , debugServer ) ;
230
269
} ) ;
231
270
232
- test ( 'Throw error if in DA experiment, configuration is attach and port and process ID are not specified' , async ( ) => {
233
- const session = createSession ( { request : 'attach' , port : undefined , processId : undefined } ) ;
271
+ test ( 'Throw error if in DA experiment, request is "attach", and neither port, processId, listen, nor connect is specified' , async ( ) => {
272
+ const session = createSession ( {
273
+ request : 'attach' ,
274
+ port : undefined ,
275
+ processId : undefined ,
276
+ listen : undefined ,
277
+ connect : undefined
278
+ } ) ;
234
279
235
280
when ( spiedInstance . inExperiment ( DebugAdapterNewPtvsd . experiment ) ) . thenReturn ( true ) ;
236
281
const promise = factory . createDebugAdapterDescriptor ( session , nodeExecutable ) ;
237
282
238
283
await expect ( promise ) . to . eventually . be . rejectedWith (
239
- 'Port or processId must be specified for request type attach '
284
+ '"request":"attach" requires either "connect", "listen", or "processId" '
240
285
) ;
241
286
} ) ;
242
287
0 commit comments