Beispiel #1
0
        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));
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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);
            }
        }