11import * as vscode from 'vscode' ;
22import { IServerSpec } from "@intersystems-community/intersystems-servermanager" ;
3- import { historyBrowserController , osAPI , smAPI } from './extension' ;
3+ import { historyBrowserController , osAPI , OurTestItem , smAPI } from './extension' ;
44import logger from './logger' ;
55import { makeRESTRequest } from './makeRESTRequest' ;
66
@@ -81,7 +81,7 @@ export async function serverSpec(item: vscode.TestItem): Promise<IServerSpec | u
8181 }
8282}
8383
84- async function addTestInstances ( item : vscode . TestItem , controller : vscode . TestController ) {
84+ async function addTestInstances ( item : OurTestItem , controller : vscode . TestController ) {
8585 item . busy = true ;
8686 const spec = await serverSpec ( item ) ;
8787 const namespace = item . id . split ( ':' ) [ 1 ] ;
@@ -99,22 +99,23 @@ async function addTestInstances(item: vscode.TestItem, controller: vscode.TestCo
9999 path : `${ spec . webServer . pathPrefix || "" } /csp/sys/%UnitTest.Portal.Indices.cls` ,
100100 } ) ;
101101 response ?. data ?. result ?. content ?. forEach ( element => {
102- const child = controller . createTestItem (
102+ const child : OurTestItem = controller . createTestItem (
103103 `${ item . id } :${ element . InstanceIndex } ` ,
104104 `${ element . DateTime } ` ,
105105 portalUri . with ( { query : `Index=${ element . InstanceIndex } &$NAMESPACE=${ namespace } ` } )
106106 ) ;
107107 child . sortText = ( 1e12 - element . InstanceIndex ) . toString ( ) . padStart ( 12 , "0" ) ;
108108 child . description = `run ${ element . InstanceIndex } ` ;
109109 child . canResolveChildren = true ;
110+ child . supportsCoverage = item . supportsCoverage ;
110111 item . children . add ( child ) ;
111112 } ) ;
112113 }
113114 }
114115 item . busy = false ;
115116}
116117
117- async function addTestSuites ( item : vscode . TestItem , controller : vscode . TestController ) {
118+ async function addTestSuites ( item : OurTestItem , controller : vscode . TestController ) {
118119 const spec = await serverSpec ( item ) ;
119120 const parts = item . id . split ( ':' ) ;
120121 const namespace = parts [ 1 ] ;
@@ -132,8 +133,9 @@ async function addTestSuites(item: vscode.TestItem, controller: vscode.TestContr
132133 if ( response ) {
133134 const run = controller . createTestRun ( new vscode . TestRunRequest ( ) , `Item '${ item . label } ' history` , false ) ;
134135 response ?. data ?. result ?. content ?. forEach ( element => {
135- const child = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ element . Name } ` ) ;
136+ const child : OurTestItem = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ element . Name } ` ) ;
136137 child . canResolveChildren = true ;
138+ child . supportsCoverage = item . supportsCoverage ;
137139 item . children . add ( child ) ;
138140 if ( element . Status ) {
139141 run . passed ( child , element . Duration * 1000 ) ;
@@ -147,7 +149,7 @@ async function addTestSuites(item: vscode.TestItem, controller: vscode.TestContr
147149 }
148150}
149151
150- async function addTestCases ( item : vscode . TestItem , controller : vscode . TestController ) {
152+ async function addTestCases ( item : OurTestItem , controller : vscode . TestController ) {
151153 const spec = await serverSpec ( item ) ;
152154 const parts = item . id . split ( ':' ) ;
153155 const namespace = parts [ 1 ] ;
@@ -165,8 +167,9 @@ async function addTestCases(item: vscode.TestItem, controller: vscode.TestContro
165167 if ( response ) {
166168 const run = controller . createTestRun ( new vscode . TestRunRequest ( ) , `Item '${ item . label } ' history` , false ) ;
167169 response ?. data ?. result ?. content ?. forEach ( element => {
168- const child = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ element . Name . split ( '.' ) . pop ( ) } ` ) ;
170+ const child : OurTestItem = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ element . Name . split ( '.' ) . pop ( ) } ` ) ;
169171 child . canResolveChildren = true ;
172+ child . supportsCoverage = item . supportsCoverage ;
170173 item . children . add ( child ) ;
171174 if ( element . Status ) {
172175 run . passed ( child , element . Duration * 1000 ) ;
@@ -180,7 +183,7 @@ async function addTestCases(item: vscode.TestItem, controller: vscode.TestContro
180183 }
181184}
182185
183- async function addTestMethods ( item : vscode . TestItem , controller : vscode . TestController ) {
186+ async function addTestMethods ( item : OurTestItem , controller : vscode . TestController ) {
184187 const spec = await serverSpec ( item ) ;
185188 const parts = item . id . split ( ':' ) ;
186189 const namespace = parts [ 1 ] ;
@@ -200,8 +203,9 @@ async function addTestMethods(item: vscode.TestItem, controller: vscode.TestCont
200203 response ?. data ?. result ?. content ?. forEach ( element => {
201204 const methodName : string = element . Name ;
202205 // We drop the first 4 characters of the method name because they should always be "Test"
203- const child = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ methodName . slice ( 4 ) } ` ) ;
206+ const child : OurTestItem = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ methodName . slice ( 4 ) } ` ) ;
204207 child . canResolveChildren = true ;
208+ child . supportsCoverage = item . supportsCoverage ;
205209 item . children . add ( child ) ;
206210
207211 // Remember result fields so they can be reinstated when the descendant Asserts are 'run'
@@ -218,7 +222,7 @@ async function addTestMethods(item: vscode.TestItem, controller: vscode.TestCont
218222 }
219223}
220224
221- async function addTestAsserts ( item : vscode . TestItem , controller : vscode . TestController ) {
225+ async function addTestAsserts ( item : OurTestItem , controller : vscode . TestController ) {
222226 const spec = await serverSpec ( item ) ;
223227 const parts = item . id . split ( ':' ) ;
224228 const namespace = parts [ 1 ] ;
@@ -248,10 +252,11 @@ async function addTestAsserts(item: vscode.TestItem, controller: vscode.TestCont
248252 }
249253
250254 response ?. data ?. result ?. content ?. forEach ( element => {
251- const child = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ element . Action } ` ) ;
255+ const child : OurTestItem = controller . createTestItem ( `${ item . id } :${ element . ID } ` , `${ element . Action } ` ) ;
252256 child . sortText = `${ element . Counter . toString ( ) . padStart ( element . MaxCounter . toString ( ) . length , "0" ) } ` ;
253257 child . description = element . Description ;
254258 child . canResolveChildren = false ;
259+ child . supportsCoverage = item . supportsCoverage ;
255260 item . children . add ( child ) ;
256261 if ( element . Status ) {
257262 run . passed ( child ) ;
@@ -278,8 +283,9 @@ export function replaceRootItems(controller: vscode.TestController, schemes?: st
278283 if ( server . namespace ) {
279284 const key = server . serverName + ":" + server . namespace . toUpperCase ( ) ;
280285 if ( ! rootMap . has ( key ) ) {
281- const item = controller . createTestItem ( key , key , folder . uri ) ;
286+ const item : OurTestItem = controller . createTestItem ( key , key , folder . uri ) ;
282287 item . canResolveChildren = true ;
288+ item . supportsCoverage = true ; // TODO - check target namespace supports coverage
283289 rootMap . set ( key , item ) ;
284290 }
285291 }
0 commit comments