public static void CreateEnvironment(IRunSettings runSettings, IMessageLogger messageLogger, out ILogger logger, out SettingsWrapper settings)
        {
            RunSettingsProvider settingsProvider;

            try
            {
                settingsProvider = runSettings.GetSettings(GoogleTestConstants.SettingsName) as RunSettingsProvider;
            }
            catch (Exception e)
            {
                settingsProvider = null;
                messageLogger.SendMessage(TestMessageLevel.Error, $"ERROR: Visual Studio test framework failed to provide settings; using default settings. Error message: {e.Message}");
            }

            RunSettingsContainer ourRunSettings = settingsProvider?.SettingsContainer ?? new RunSettingsContainer();

            foreach (RunSettings projectSettings in ourRunSettings.ProjectSettings)
            {
                projectSettings.GetUnsetValuesFrom(ourRunSettings.SolutionSettings);
            }

            var settingsWrapper = new SettingsWrapper(ourRunSettings);

            var loggerAdapter = new VsTestFrameworkLogger(messageLogger, () => settingsWrapper.DebugMode, () => settingsWrapper.TimestampOutput);
            var regexParser   = new RegexTraitParser(loggerAdapter);

            settingsWrapper.RegexTraitParser = regexParser;

            settings = settingsWrapper;
            logger   = loggerAdapter;
        }
 private void CheckSkipOriginCheck(RunSettingsContainer runSettingsContainer)
 {
     runSettingsContainer.SolutionSettings.SkipOriginCheck.Should().BeFalse();
     foreach (RunSettings projectSettings in runSettingsContainer.ProjectSettings)
     {
         projectSettings.SkipOriginCheck.Should().BeFalse();
     }
     runSettingsContainer.GetSettingsForExecutable("project1")?.SkipOriginCheck.Should().BeFalse();
     runSettingsContainer.GetSettingsForExecutable("project2")?.SkipOriginCheck.Should().BeFalse();
     runSettingsContainer.GetSettingsForExecutable("project3")?.SkipOriginCheck.Should().BeFalse();
     runSettingsContainer.GetSettingsForExecutable("not_matched")?.SkipOriginCheck.Should().BeFalse();
 }
示例#3
0
        private static void AddProjectSettings(RunSettingsContainer settingsContainer, string project, string workingDir)
        {
            if (workingDir == null)
            {
                return;
            }

            settingsContainer.ProjectSettings.Add(new RunSettings
            {
                ProjectRegex = project,
                WorkingDir   = workingDir == "" ? null : workingDir
            });
        }
示例#4
0
        public static void CreateEnvironment(IRunSettings runSettings, IMessageLogger messageLogger, out ILogger logger, out SettingsWrapper settings)
        {
            var settingsProvider = runSettings.GetSettings(GoogleTestConstants.SettingsName) as RunSettingsProvider;
            RunSettingsContainer ourRunSettings = settingsProvider != null ? settingsProvider.SettingsContainer : new RunSettingsContainer();
            var settingsWrapper = new SettingsWrapper(ourRunSettings);

            var loggerAdapter = new VsTestFrameworkLogger(messageLogger, () => settingsWrapper.DebugMode, () => settingsWrapper.TimestampOutput);
            var regexParser   = new RegexTraitParser(loggerAdapter);

            settingsWrapper.RegexTraitParser = regexParser;

            settings = settingsWrapper;
            logger   = loggerAdapter;
        }
示例#5
0
        private void CheckSkipOriginCheck(RunSettingsContainer runSettingsContainer)
        {
            runSettingsContainer.SolutionSettings.SkipOriginCheck.Should().BeFalse();
            foreach (RunSettings projectSettings in runSettingsContainer.ProjectSettings)
            {
                projectSettings.SkipOriginCheck.Should().BeFalse();
            }
#pragma warning disable NullConditionalAssertion // Code Smell
            runSettingsContainer.GetSettingsForExecutable("project1")?.SkipOriginCheck.Should().BeFalse();
            runSettingsContainer.GetSettingsForExecutable("project2")?.SkipOriginCheck.Should().BeFalse();
            runSettingsContainer.GetSettingsForExecutable("project3")?.SkipOriginCheck.Should().BeFalse();
            runSettingsContainer.GetSettingsForExecutable("not_matched")?.SkipOriginCheck.Should().BeFalse();
#pragma warning restore NullConditionalAssertion // Code Smell
        }
示例#6
0
        private RunSettingsContainer SetupSettingsContainer(string solutionWorkingDir,
                                                            string project1WorkingDir, string project2WorkingDir, string project3WorkingDir)
        {
            var settingsContainer = new RunSettingsContainer(new RunSettings
            {
                ProjectRegex    = null,
                WorkingDir      = solutionWorkingDir,
                SkipOriginCheck = true
            });

            AddProjectSettings(settingsContainer, "project1", project1WorkingDir);
            AddProjectSettings(settingsContainer, "project2", project2WorkingDir);
            AddProjectSettings(settingsContainer, "project3", project3WorkingDir);

            return(settingsContainer);
        }
示例#7
0
        private static RunSettingsContainer GetRunSettingsFromEnvVariable(IMessageLogger messageLogger)
        {
            string settingsFile;

            try
            {
                settingsFile = Environment.GetEnvironmentVariable(GtaSettingsEnvVariable);
                if (settingsFile == null)
                {
                    messageLogger.SendMessage(TestMessageLevel.Informational, $"No settings file provided through env variable {GtaSettingsEnvVariable}");
                    return(null);
                }
            }
            catch (Exception e)
            {
                messageLogger.SendMessage(TestMessageLevel.Error, $"ERROR: Exception while trying to acces env variable {GtaSettingsEnvVariable}, message: {e.Message}");
                return(null);
            }

            try
            {
                if (!File.Exists(settingsFile))
                {
                    messageLogger.SendMessage(TestMessageLevel.Warning,
                                              $"Warning: Settings file is provided through env variable {GtaSettingsEnvVariable}, but file '{settingsFile}' does not exist");
                    return(null);
                }

                var settingsContainer = new RunSettingsContainer();
                if (!settingsContainer.GetUnsetValuesFrom(settingsFile))
                {
                    messageLogger.SendMessage(TestMessageLevel.Warning,
                                              $"Warning: Settings file is provided through env variable {GtaSettingsEnvVariable}, but file '{settingsFile}' could not be loaded");
                    return(null);
                }

                messageLogger.SendMessage(TestMessageLevel.Informational,
                                          $"Using fallback settings from file '{settingsFile}' (provided through env variable {GtaSettingsEnvVariable})");
                return(settingsContainer);
            }
            catch (Exception e)
            {
                messageLogger.SendMessage(TestMessageLevel.Error, $"ERROR: Settings file is provided through env variable {GtaSettingsEnvVariable}, but an exception occured while trying to read file '{settingsFile}'. Exception message: {e.Message}");
                return(null);
            }
        }
示例#8
0
        private RunSettingsContainer SetupSettingsContainer(string solutionWorkingDir,
                                                            string project1WorkingDir, string project2WorkingDir, string project3WorkingDir)
        {
            var settingsContainer = new RunSettingsContainer
            {
                SolutionSettings = new RunSettings
                {
                    ProjectRegex = null,
                    WorkingDir   = solutionWorkingDir
                },
                ProjectSettings = new List <RunSettings>()
            };

            AddProjectSettings(settingsContainer, "project1", project1WorkingDir);
            AddProjectSettings(settingsContainer, "project2", project2WorkingDir);
            AddProjectSettings(settingsContainer, "project3", project3WorkingDir);

            return(settingsContainer);
        }
示例#9
0
        private static XPathNavigator EmbedSettingsIntoRunSettings(RunSettingsContainer settingsContainer)
        {
            var            settingsDocument = new XmlDocument();
            XmlDeclaration xmlDeclaration   = settingsDocument.CreateXmlDeclaration("1.0", "UTF-8", null);
            XmlElement     root             = settingsDocument.DocumentElement;

            settingsDocument.InsertBefore(xmlDeclaration, root);

            XmlElement runSettingsNode = settingsDocument.CreateElement("", Constants.RunSettingsName, "");

            settingsDocument.AppendChild(runSettingsNode);

            var settingsNavigator = settingsDocument.CreateNavigator();

            settingsNavigator.MoveToChild(Constants.RunSettingsName, "");
            settingsNavigator.AppendChild(settingsContainer.ToXml().CreateNavigator());
            settingsNavigator.MoveToRoot();

            return(settingsNavigator);
        }
示例#10
0
        private static RunSettingsContainer GetRunSettingsContainer(RunSettingsProvider settingsProvider,
                                                                    IMessageLogger messageLogger)
        {
            RunSettingsContainer ourRunSettings;

            if (settingsProvider != null)
            {
                ourRunSettings = settingsProvider.SettingsContainer;
            }
            else
            {
                ourRunSettings = GetRunSettingsFromEnvVariable(messageLogger);
                if (ourRunSettings == null)
                {
                    messageLogger.SendMessage(TestMessageLevel.Warning, "Warning: Using default settings.");
                    ourRunSettings = new RunSettingsContainer();
                }
            }

            return(ourRunSettings);
        }
示例#11
0
        public static void CreateEnvironment(IRunSettings runSettings, IMessageLogger messageLogger, out ILogger logger, out SettingsWrapper settings)
        {
            var settingsProvider = runSettings.GetSettings(GoogleTestConstants.SettingsName) as RunSettingsProvider;
            RunSettingsContainer ourRunSettings = settingsProvider != null ? settingsProvider.SettingsContainer : new RunSettingsContainer();

            foreach (RunSettings projectSettings in ourRunSettings.ProjectSettings)
            {
                projectSettings.GetUnsetValuesFrom(ourRunSettings.SolutionSettings);
            }

            var testSettings = runSettings.GetSettings(GoogleTestConstants.TestPropertySettingsName) as TestPropertySettingsProvider;

            var settingsWrapper = new SettingsWrapper(ourRunSettings, testSettings?.TestPropertySettings);

            var loggerAdapter = new VsTestFrameworkLogger(messageLogger, () => settingsWrapper.DebugMode, () => settingsWrapper.TimestampOutput);
            var regexParser   = new RegexTraitParser(loggerAdapter);

            settingsWrapper.RegexTraitParser = regexParser;

            settings = settingsWrapper;
            logger   = loggerAdapter;
        }
示例#12
0
        private RunSettingsContainer SetupFinalRunSettingsContainer(
            string solutionSolutionWorkingDir, string solutionProject1WorkingDir, string solutionProject2WorkingDir,
            string userSolutionWorkingDir, string userProject1WorkingDir, string userProject3WorkingDir)
        {
            var globalSettings = new RunSettings {
                ProjectRegex = null, WorkingDir = GlobalWorkingDir, SkipOriginCheck = false
            };
            var mockGlobalRunSettings = new Mock <IGlobalRunSettings>();

            mockGlobalRunSettings.Setup(grs => grs.RunSettings).Returns(globalSettings);

            var solutionSettingsContainer = SetupSettingsContainer(solutionSolutionWorkingDir, solutionProject1WorkingDir, solutionProject2WorkingDir, null);
            var solutionSettingsNavigator = EmbedSettingsIntoRunSettings(solutionSettingsContainer);
            var solutionSettingsFile      = SerializeSolutionSettings(solutionSettingsNavigator);

            var userSettingsContainer = SetupSettingsContainer(userSolutionWorkingDir, userProject1WorkingDir, null, userProject3WorkingDir);
            var userSettingsNavigator = EmbedSettingsIntoRunSettings(userSettingsContainer);

            IXPathNavigable navigable;

            try
            {
                var serviceUnderTest = new RunSettingsServiceUnderTest(mockGlobalRunSettings.Object, solutionSettingsFile);
                navigable = serviceUnderTest.AddRunSettings(userSettingsNavigator,
                                                            new Mock <IRunSettingsConfigurationInfo>().Object, new Mock <ILogger>().Object);
            }
            finally
            {
                File.Delete(solutionSettingsFile);
            }

            var navigator = navigable.CreateNavigator();

            navigator.MoveToChild(Constants.RunSettingsName, "");
            navigator.MoveToChild(GoogleTestConstants.SettingsName, "");

            return(RunSettingsContainer.LoadFromXml(navigator));
        }
示例#13
0
        private static void LogWarningsForDeprecatedSettings(RunSettingsContainer runSettingsContainer, ILogger logger)
        {
            var debugModeProperty = typeof(RunSettings).GetProperty(nameof(RunSettings.DebugMode));

            if (HasSetting(runSettingsContainer, debugModeProperty))
            {
                logger.LogWarning($"GTA option '{nameof(IGoogleTestAdapterSettings.DebugMode)}' does not have any effect any more - check your settings files and replace any occurence with new option '{nameof(IGoogleTestAdapterSettings.OutputMode)}' as follows:");
                logger.LogWarning($"<DebugMode>False</DebugMode> => <OutputMode>{OutputMode.Info}</OutputMode>");
                logger.LogWarning($"<DebugMode>True</DebugMode> => <OutputMode>{OutputMode.Verbose}</OutputMode> (consider using {OutputMode.Debug})");
            }

            var useNewTestExecutionEnvironmentProperty = typeof(RunSettings).GetProperty(nameof(RunSettings.UseNewTestExecutionFramework));

            if (HasSetting(runSettingsContainer, useNewTestExecutionEnvironmentProperty))
            {
                logger.LogWarning($"GTA option '{nameof(IGoogleTestAdapterSettings.UseNewTestExecutionFramework)}' does not have any effect any more - check your settings files and replace any occurence with new option '{nameof(IGoogleTestAdapterSettings.DebuggerKind)}' as follows:");
                logger.LogWarning($"<UseNewTestExecutionFramework>False</UseNewTestExecutionFramework> => <DebuggerKind>{DebuggerKind.VsTestFramework}</DebuggerKind>");
                logger.LogWarning($"<UseNewTestExecutionFramework>True</UseNewTestExecutionFramework> => <DebuggerKind>{DebuggerKind.Native}</DebuggerKind>");
            }

            var timestepOutputProperty = typeof(RunSettings).GetProperty(nameof(RunSettings.TimestampOutput));

            if (HasSetting(runSettingsContainer, timestepOutputProperty))
            {
                logger.LogWarning($"GTA option '{nameof(IGoogleTestAdapterSettings.TimestampOutput)}' does not have any effect any more - check your settings files and replace any occurence with new option '{nameof(IGoogleTestAdapterSettings.TimestampMode)}' as follows:");
                logger.LogWarning($"<TimestampOutput>False</TimestampOutput> => <TimestampMode>{TimestampMode.DoNotPrintTimestamp}</TimestampMode>");
                logger.LogWarning($"<TimestampOutput>True</TimestampOutput> => <TimestampMode>{TimestampMode.PrintTimestamp}</TimestampMode>");
            }

            var showReleaseNotesProperty = typeof(RunSettings).GetProperty(nameof(RunSettings.ShowReleaseNotes));

            if (HasSetting(runSettingsContainer, showReleaseNotesProperty))
            {
                logger.LogWarning($"GTA option '{nameof(IGoogleTestAdapterSettings.ShowReleaseNotes)}' is deprecated - check your settings files and remove any occurence.");
            }
        }
示例#14
0
 private static bool HasSetting(RunSettingsContainer runSettingsContainer, PropertyInfo propertyInfo)
 {
     return(propertyInfo.GetValue(runSettingsContainer.SolutionSettings) != null ||
            runSettingsContainer.ProjectSettings.Any(s => propertyInfo.GetValue(s) != null));
 }