@@ -2663,6 +2663,147 @@ public void AddOrUpdateBatchSizeSetsRunConfigurationAndBatchSize()
26632663 Assert . AreEqual ( "<RunSettings><RunConfiguration><BatchSize>1000</BatchSize></RunConfiguration></RunSettings>" , xmlDocument . OuterXml ) ;
26642664 }
26652665
2666+ [ TestMethod ]
2667+ public void UpdateCodeCoverageSettings_SetEnableDynamicNativeInstrumentationToFalse_WhenNotPresent ( )
2668+ {
2669+ // Arrange
2670+ var xmlDocument = new XmlDocument ( ) ;
2671+ xmlDocument . LoadXml ( """
2672+ <?xml version="1.0" encoding="utf-8"?>
2673+ <RunSettings>
2674+ <DataCollectionRunSettings>
2675+ <DataCollectors>
2676+ <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
2677+ <Configuration>
2678+ <CoverageLogLevel>All</CoverageLogLevel>
2679+ <InstrumentationLogLevel>All</InstrumentationLogLevel>
2680+ <ManagedVanguardLogLevel>Verbose</ManagedVanguardLogLevel>
2681+ <CoverageFileLogPath>%LOGS_DIR%</CoverageFileLogPath>
2682+ <CodeCoverage>
2683+ <FileLogPath>%LOGS_DIR%</FileLogPath>
2684+ <LogLevel>All</LogLevel>
2685+ <UseVerifiableInstrumentation>False</UseVerifiableInstrumentation>
2686+ <EnableStaticNativeInstrumentation>False</EnableStaticNativeInstrumentation>
2687+ </CodeCoverage>
2688+ </Configuration>
2689+ </DataCollector>
2690+ </DataCollectors>
2691+ </DataCollectionRunSettings>
2692+ </RunSettings>
2693+ """ ) ;
2694+ var configuration = new RunConfiguration ( ) ;
2695+
2696+ // Act
2697+ var result = TestRequestManager . UpdateCollectCoverageSettings ( xmlDocument , configuration ) ;
2698+
2699+ // Assert
2700+ Assert . IsTrue ( result ) ;
2701+ StringAssert . Contains ( xmlDocument . OuterXml , "<EnableStaticNativeInstrumentation>False</EnableStaticNativeInstrumentation><EnableDynamicNativeInstrumentation>False</EnableDynamicNativeInstrumentation></CodeCoverage>" ) ;
2702+ }
2703+
2704+ [ TestMethod ]
2705+ public void UpdateCodeCoverageSettings_SetEnableDynamicNativeInstrumentationToFalse_WhenNotPresentAndParentDetailsOfConfigurationAreAlsoNotPresent ( )
2706+ {
2707+ // Arrange
2708+ var xmlDocument = new XmlDocument ( ) ;
2709+ xmlDocument . LoadXml ( """
2710+ <?xml version="1.0" encoding="utf-8"?>
2711+ <RunSettings>
2712+ <DataCollectionRunSettings>
2713+ <DataCollectors>
2714+ <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
2715+ </DataCollector>
2716+ </DataCollectors>
2717+ </DataCollectionRunSettings>
2718+ </RunSettings>
2719+ """ ) ;
2720+ var configuration = new RunConfiguration ( ) ;
2721+
2722+ // Act
2723+ var result = TestRequestManager . UpdateCollectCoverageSettings ( xmlDocument , configuration ) ;
2724+
2725+ // Assert
2726+ Assert . IsTrue ( result ) ;
2727+ StringAssert . Contains ( xmlDocument . OuterXml , $ "<Configuration><CodeCoverage><EnableDynamicNativeInstrumentation>False</EnableDynamicNativeInstrumentation></CodeCoverage></Configuration></DataCollector>") ;
2728+ }
2729+
2730+ [ TestMethod ]
2731+ [ DataRow ( "True" ) ]
2732+ [ DataRow ( "False" ) ]
2733+ public void UpdateCodeCoverageSettings_DontSetEnableDynamicNativeInstrumentationToFalse_WhenAlreadyPresent ( string setting )
2734+ {
2735+ // Arrange
2736+ var xmlDocument = new XmlDocument ( ) ;
2737+ xmlDocument . LoadXml ( $ """
2738+ <?xml version="1.0" encoding="utf-8"?>
2739+ <RunSettings>
2740+ <DataCollectionRunSettings>
2741+ <DataCollectors>
2742+ <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
2743+ <Configuration>
2744+ <CoverageLogLevel>All</CoverageLogLevel>
2745+ <InstrumentationLogLevel>All</InstrumentationLogLevel>
2746+ <ManagedVanguardLogLevel>Verbose</ManagedVanguardLogLevel>
2747+ <CoverageFileLogPath>%LOGS_DIR%</CoverageFileLogPath>
2748+ <CodeCoverage>
2749+ <EnableDynamicNativeInstrumentation>{ setting } </EnableDynamicNativeInstrumentation>
2750+ </CodeCoverage>
2751+ </Configuration>
2752+ </DataCollector>
2753+ </DataCollectors>
2754+ </DataCollectionRunSettings>
2755+ </RunSettings>
2756+ """ ) ;
2757+ var configuration = new RunConfiguration ( ) ;
2758+
2759+ // Act
2760+ var result = TestRequestManager . UpdateCollectCoverageSettings ( xmlDocument , configuration ) ;
2761+
2762+ // Assert
2763+ // No matter what user has set, we don't override it.
2764+ Assert . IsFalse ( result ) ;
2765+ StringAssert . Contains ( xmlDocument . OuterXml , $ "<CodeCoverage><EnableDynamicNativeInstrumentation>{ setting } </EnableDynamicNativeInstrumentation></CodeCoverage>") ;
2766+ }
2767+
2768+ [ TestMethod ]
2769+ [ DataRow ( "friendlyName=\" Code Coverage\" " ) ]
2770+ [ DataRow ( "friendlyName=\" code coverage\" " ) ]
2771+ [ DataRow ( "uri=\" datacollector://Microsoft/CodeCoverage/2.0\" " ) ]
2772+ [ DataRow ( "uri=\" datacollector://microsoft/codecoverage/2.0\" " ) ]
2773+ [ DataRow ( "assemblyQualifiedName=\" Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" " ) ]
2774+ public void UpdateCodeCoverageSettings_SetEnableDynamicNativeInstrumentationToFalse_WhenUserUsesImperfectNamesForCollector ( string collector )
2775+ {
2776+ // Arrange
2777+ var xmlDocument = new XmlDocument ( ) ;
2778+ xmlDocument . LoadXml ( $ """
2779+ <?xml version="1.0" encoding="utf-8"?>
2780+ <RunSettings>
2781+ <DataCollectionRunSettings>
2782+ <DataCollectors>
2783+ <DataCollector { collector } >
2784+ <Configuration>
2785+ <CoverageLogLevel>All</CoverageLogLevel>
2786+ <InstrumentationLogLevel>All</InstrumentationLogLevel>
2787+ <ManagedVanguardLogLevel>Verbose</ManagedVanguardLogLevel>
2788+ <CoverageFileLogPath>%LOGS_DIR%</CoverageFileLogPath>
2789+ <CodeCoverage>
2790+ </CodeCoverage>
2791+ </Configuration>
2792+ </DataCollector>
2793+ </DataCollectors>
2794+ </DataCollectionRunSettings>
2795+ </RunSettings>
2796+ """ ) ;
2797+ var configuration = new RunConfiguration ( ) ;
2798+
2799+ // Act
2800+ var result = TestRequestManager . UpdateCollectCoverageSettings ( xmlDocument , configuration ) ;
2801+
2802+ // Assert
2803+ Assert . IsTrue ( result ) ;
2804+ StringAssert . Contains ( xmlDocument . OuterXml , $ "<CodeCoverage><EnableDynamicNativeInstrumentation>False</EnableDynamicNativeInstrumentation></CodeCoverage>") ;
2805+ }
2806+
26662807 private static DiscoveryRequestPayload CreateDiscoveryPayload ( string runsettings )
26672808 {
26682809 var discoveryPayload = new DiscoveryRequestPayload
0 commit comments