@@ -66,6 +66,10 @@ Property Run As TestCoverage.Data.Run;
66
66
/// Value at subscript is set to 1 if there are executable lines of code in the target, 0 if not.
67
67
Property KnownCoverageTargets [ MultiDimensional , Private ];
68
68
69
+ /// Known python coverage targets (already snapshotted). <br />
70
+ /// Value at subscript is set to 1 if there are executable lines of code in the target, 0 if not.
71
+ Property KnownPyCoverageTargets [ MultiDimensional , Private ];
72
+
69
73
/// Cache of (name, type) -> hash
70
74
Property Hashes [ MultiDimensional ];
71
75
@@ -229,34 +233,35 @@ Method StartCoverageTracking() As %Status [ Private ]
229
233
Set tSC = $$$OK
230
234
New $Namespace
231
235
Try {
232
- If (..CoverageTargets '= " " ) {
236
+ If (( ..CoverageTargets '= " " ) || (.. PyCoverageTargets '= " " ) ) {
233
237
Set $Namespace = ..SourceNamespace
234
238
Set tRelevantTargets = " "
235
- Set tPyRelevantTargets = " "
236
239
Set tNewTargets = " "
237
240
Set tPointer = 0
238
241
While $ListNext (..CoverageTargets ,tPointer ,tCoverageTarget ) {
239
242
If '$Data (..KnownCoverageTargets (tCoverageTarget ),tIsRelevant )#2 {
240
243
Set tNewTargets = tNewTargets _$ListBuild (tCoverageTarget )
241
244
} ElseIf tIsRelevant {
242
245
Set tRelevantTargets = tRelevantTargets _$ListBuild (tCoverageTarget )
243
- // check if the relevant old targets have python components
244
- Set tOther = ##class (%Library.RoutineMgr ).GetOther (tCoverageTarget ," INT" ,-1 )
245
- If (tOther '= " " ) && ($Piece (tOther ," ." ,*) = " CLS" ) {
246
- set tName = $piece (tOther , " ." , 1 , *-1 )
247
- If (..HasPython (tName )) {
248
- set tPyRelevantTargets = tPyRelevantTargets _ $ListBuild (tName )
249
- }
250
- }
246
+ }
247
+ }
248
+
249
+ Set tPyRelevantTargets = " "
250
+ Set tNewPyTargets = " "
251
+ Set tPointer = 0
252
+ While $ListNext (..PyCoverageTargets ,tPointer ,tPyCoverageTarget ) {
253
+ If '$Data (..KnownPyCoverageTargets (tPyCoverageTarget ),tIsRelevant )#2 {
254
+ Set tNewPyTargets = tNewPyTargets _$ListBuild (tPyCoverageTarget )
255
+ } ElseIf tIsRelevant {
256
+ Set tPyRelevantTargets = tPyRelevantTargets _$ListBuild (tPyCoverageTarget )
251
257
}
252
258
}
253
259
254
- If (tNewTargets '= " " ) {
260
+ If (( tNewTargets '= " " ) || ( tNewPyTargets '= " " ) ) {
255
261
$$$StartTimer(" Taking snapshot of code and CLS/MAC/INT mappings" )
256
- Set tSC = ##class (TestCoverage.Utils ).Snapshot (tNewTargets , .tNewRelevantTargets , .tNewPyRelevantTargets )
262
+ Set tSC = ##class (TestCoverage.Utils ).Snapshot (tNewTargets , tNewPyTargets , .tNewRelevantTargets , .tNewPyRelevantTargets )
257
263
$$$StopTimer
258
264
$$$ThrowOnError(tSC )
259
-
260
265
Set tPointer = 0
261
266
While $ListNext (tNewTargets ,tPointer ,tNewTarget ) {
262
267
Set ..KnownCoverageTargets (tNewTarget ) = 0
@@ -268,13 +273,19 @@ Method StartCoverageTracking() As %Status [ Private ]
268
273
Set tRelevantTargets = tRelevantTargets _$ListBuild (tRelevantTarget )
269
274
}
270
275
276
+ Set tPointer = 0
277
+ While $ListNext (tNewPyTargets ,tPointer ,tNewPyTarget ) {
278
+ Set ..KnownPyCoverageTargets (tNewPyTarget ) = 0
279
+ }
280
+
271
281
Set tPointer = 0
272
282
While $ListNext (tNewPyRelevantTargets ,tPointer ,tPyRelevantTarget ) {
283
+ Set ..KnownPyCoverageTargets (tPyRelevantTarget ) = 1
273
284
Set tPyRelevantTargets = tPyRelevantTargets _$ListBuild (tPyRelevantTarget )
274
285
}
275
286
}
276
287
277
- If (tRelevantTargets = " " ) {
288
+ If (( tRelevantTargets = " " ) && ( tPyRelevantTargets = " " ) ) {
278
289
Write !," WARNING: Nothing found to monitor for routine(s): " _$ListToString (tNewTargets )
279
290
}
280
291
@@ -374,7 +385,6 @@ Method UpdateCoverageTargetsForTestDirectory(pDirectory As %String) As %Status [
374
385
}
375
386
}
376
387
}
377
-
378
388
Set tObjectCodeList = ..GetObjectCodeForSourceNames (tCoverageTargetList )
379
389
Set ..CoverageTargets = tObjectCodeList // Also restarts the monitor if it is running and updates data on covered routines/classes
380
390
Set ..PyCoverageTargets = tPyCoverageTargetList // no need to get the compiled names, it's already correct
@@ -512,7 +522,7 @@ Method EndCoverageTracking(pTestSuite As %String = "", pTestClass As %String = "
512
522
{
513
523
Set tSC = $$$OK
514
524
Try {
515
- If (..CoverageTargets '= " " ) {
525
+ If (( ..CoverageTargets '= " " ) || (.. PyCoverageTargets '= " " ) ) {
516
526
// Pause the monitor.
517
527
Set tSC = ..Monitor .Pause ()
518
528
Do ##class (TestCoverage.Utils.LineByLineMonitor ).PyStop ()
0 commit comments