public void FakesDataCollectorSettingsShouldBeInserted() { string runSettingsXml = @"<RunSettings><RunConfiguration></RunConfiguration></RunSettings>"; var doc = new XmlDocument(); using (var xmlReader = XmlReader.Create( new StringReader(runSettingsXml), new XmlReaderSettings() { CloseInput = true })) { doc.Load(xmlReader); } var dataCollectorNode2 = new DataCollectorSettings() { AssemblyQualifiedName = FakesUtilities.FakesMetadata.DataCollectorAssemblyQualifiedName, Uri = new Uri(FakesUtilities.FakesMetadata.DataCollectorUriV2), FriendlyName = FakesUtilities.FakesMetadata.FriendlyName, IsEnabled = true, Configuration = doc.FirstChild as XmlElement }; FakesUtilities.InsertOrReplaceFakesDataCollectorNode(doc, dataCollectorNode2); Assert.IsTrue(XmlRunSettingsUtilities.ContainsDataCollector(doc, FakesUtilities.FakesMetadata.DataCollectorUriV2)); }
/// <summary> /// Tries to embed the Fakes data collector settings for the given run settings. /// </summary> /// <param name="runSettings">runsettings</param> /// <param name="sources">test sources</param> /// <returns>true if runSettings was modified; false otherwise.</returns> private static bool TryAddFakesDataCollectorSettings( XmlDocument runSettings, IEnumerable <string> sources, FrameworkVersion framework) { // If user provided fakes settings don't do anything if (XmlRunSettingsUtilities.ContainsDataCollector(runSettings.CreateNavigator(), FakesMetadata.DataCollectorUri)) { return(false); } // A new Fakes Congigurator API makes the decision to add the right datacollector uri to the configuration // There now exist two data collector URIs to support two different scenarios. The new scenario involves // using the CLRIE profiler, and the old involves using the Intellitrace profiler (which isn't supported in // .NET Core scenarios). The old API still exists for fallback measures. var crossPlatformConfigurator = TryGetFakesCrossPlatformDataCollectorConfigurator(); if (crossPlatformConfigurator != null) { var sourceTFMMap = CreateDictionary(sources, framework); var fakesSettings = crossPlatformConfigurator(sourceTFMMap); // if no fakes, return settings unchanged if (fakesSettings == null) { return(false); } XmlRunSettingsUtilities.InsertDataCollectorsNode(runSettings.CreateNavigator(), fakesSettings); return(true); } return(AddFallbackFakesSettings(runSettings, sources, framework)); }
public void OtherRunsettingsShouldNotBeChanged() { string runSettingsXml = @"<RunSettings><RunConfiguration><TargetFrameworkVersion>FrameworkCore10</TargetFrameworkVersion></RunConfiguration></RunSettings>"; var doc = new XmlDocument(); using (var xmlReader = XmlReader.Create( new StringReader(runSettingsXml), new XmlReaderSettings() { CloseInput = true })) { doc.Load(xmlReader); } var dataCollectorNode2 = new DataCollectorSettings() { AssemblyQualifiedName = FakesUtilities.FakesMetadata.DataCollectorAssemblyQualifiedName, Uri = new Uri(FakesUtilities.FakesMetadata.DataCollectorUriV2), FriendlyName = FakesUtilities.FakesMetadata.FriendlyName, IsEnabled = true, Configuration = doc.CreateElement("Configuration") }; FakesUtilities.InsertOrReplaceFakesDataCollectorNode(doc, dataCollectorNode2); Assert.IsTrue(XmlRunSettingsUtilities.ContainsDataCollector(doc, FakesUtilities.FakesMetadata.DataCollectorUriV2)); XmlNodeList nodes = doc.SelectNodes("//RunSettings/RunConfiguration/TargetFrameworkVersion"); Assert.AreEqual("FrameworkCore10", nodes[0].InnerText); }
/// <summary> /// Tries to embed the Fakes data collector settings for the given run settings. /// </summary> /// <param name="runSettings">runsettings</param> /// <param name="sources">test sources</param> /// <returns>true if runSettings was modified; false otherwise.</returns> private static bool TryAddFakesDataCollectorSettings( XmlDocument runSettings, IEnumerable <string> sources) { // If user provided fakes settings don't do anything if (XmlRunSettingsUtilities.ContainsDataCollector(runSettings.CreateNavigator(), FakesMetadata.DataCollectorUri)) { return(false); } Func <IEnumerable <string>, string> configurator; // fakes supported? if (!TryGetFakesDataCollectorConfigurator(out configurator)) { return(false); } // if no fakes, return settings unchanged var fakesConfiguration = configurator(sources); if (fakesConfiguration == null) { return(false); } // integrate fakes settings in configuration // if the settings don't have any data collector settings, populate with empty settings EnsureSettingsNode(runSettings, new DataCollectionRunSettings()); // embed fakes settings var fakesSettings = CreateFakesDataCollectorSettings(); var doc = new XmlDocument(); using (var xmlReader = XmlReader.Create( new StringReader(fakesConfiguration), new XmlReaderSettings() { CloseInput = true })) { doc.Load(xmlReader); } fakesSettings.Configuration = doc.DocumentElement; XmlRunSettingsUtilities.InsertDataCollectorsNode(runSettings.CreateNavigator(), fakesSettings); return(true); }
/// <summary> /// Updates with code coverage settings if not configured. /// </summary> /// <param name="runSettingsDocument"> The run settings document. </param> public static void UpdateWithCodeCoverageSettingsIfNotConfigured(IXPathNavigable runSettingsDocument) { ValidateArg.NotNull <IXPathNavigable>(runSettingsDocument, "runSettingsDocument"); var runSettingsNavigator = runSettingsDocument.CreateNavigator(); bool codeCoverageConfigured = XmlRunSettingsUtilities.ContainsDataCollector(runSettingsNavigator, DynamicCodeCoverageDataDiagnosticAdaterUriString) || XmlRunSettingsUtilities.ContainsDataCollector(runSettingsNavigator, StaticCodeCoverageDataDiagnosticAdaterUriString); if (codeCoverageConfigured == false) { var existingPath = string.Empty; var xpaths = new string[] { string.Join(xPathSeperator, nodeNames, 0, 1), string.Join(xPathSeperator, nodeNames, 0, 2), string.Join(xPathSeperator, nodeNames, 0, 3) }; foreach (var xpath in xpaths) { if (runSettingsNavigator.SelectSingleNode(xpath) != null) { existingPath = xpath; } else { break; } } // If any nodes are missing to add code coverage deafult settings, add the missing xml nodes. XPathNavigator dataCollectorsNavigator; if (existingPath.Equals(xpaths[2]) == false) { dataCollectorsNavigator = runSettingsNavigator.SelectSingleNode(existingPath); var missingNodesText = GetMissingNodesTextIfAny(existingPath, xpaths[2]); dataCollectorsNavigator.AppendChild(missingNodesText); } dataCollectorsNavigator = runSettingsNavigator.SelectSingleNode(xpaths[2]); dataCollectorsNavigator.AppendChild(codeCoverageCollectorSettingsTemplate); } }