Best Vstest code snippet using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache.GetFilteredExtensions
TestPluginCache.cs
Source:TestPluginCache.cs  
...74        /// </summary>75        /// <param name="endsWithPattern">Pattern to filter extension paths.</param>76        public List<string> GetExtensionPaths(string endsWithPattern)77        {78            return this.GetFilteredExtensions(this.filterableExtensionPaths, endsWithPattern)79                       .Concat(this.defaultExtensionPaths)80                       .Concat(this.unfilterableExtensionPaths)81                       .ToList();82        }83        /// <summary>84        /// Performs discovery of specific type of test extensions in files ending with the specified pattern.85        /// </summary>86        /// <typeparam name="TPluginInfo">87        /// Type of Plugin info.88        /// </typeparam>89        /// <typeparam name="TExtension">90        /// Type of extension.91        /// </typeparam>92        /// <param name="endsWithPattern">93        /// Pattern used to select files using String.EndsWith94        /// </param>95        /// <returns>96        /// The <see cref="Dictionary"/>. of test plugin info.97        /// </returns>98        public Dictionary<string, TPluginInfo> DiscoverTestExtensions<TPluginInfo, TExtension>(string endsWithPattern)99            where TPluginInfo : TestPluginInformation100        {101            // Return the cached value if cache is valid.102            if (this.TestExtensions != null && this.TestExtensions.AreTestExtensionsCached<TPluginInfo>())103            {104                return this.TestExtensions.GetTestExtensionCache<TPluginInfo>();105            }106            Dictionary<string, TPluginInfo> pluginInfos = null;107            this.SetupAssemblyResolver(null);108            // Some times TestPlatform.core.dll assembly fails to load in the current appdomain (from devenv.exe).109            // Reason for failures are not known. Below handler, again calls assembly.load() in failing assembly110            // and that succeeds.111            // Because of this assembly failure, below domain.CreateInstanceAndUnwrap() call fails with error112            // "Unable to cast transparent proxy to type 'Microsoft.VisualStudio.TestPlatform.Core.TestPluginsFramework.TestPluginDiscoverer"113            var platformAssemblyResolver = new PlatformAssemblyResolver();114            platformAssemblyResolver.AssemblyResolve += this.CurrentDomainAssemblyResolve;115            try116            {117                EqtTrace.Verbose("TestPluginCache: Discovering the extensions using extension path.");118                // Combine all the possible extensions - both default and additional.119                var allExtensionPaths = this.GetExtensionPaths(endsWithPattern);120                // Discover the test extensions from candidate assemblies.121                pluginInfos = this.GetTestExtensions<TPluginInfo, TExtension>(allExtensionPaths);122                if (this.TestExtensions == null)123                {124                    this.TestExtensions = new TestExtensions();125                }126                this.TestExtensions.AddExtension<TPluginInfo>(pluginInfos);127                // Set the cache bool to true.128                this.TestExtensions.SetTestExtensionsCacheStatus<TPluginInfo>();129                if (EqtTrace.IsVerboseEnabled)130                {131                    var extensionString = this.filterableExtensionPaths != null132                                              ? string.Join(",", this.filterableExtensionPaths.ToArray())133                                              : null;134                    EqtTrace.Verbose(135                        "TestPluginCache: Discovered the extensions using extension path '{0}'.",136                        extensionString);137                }138                this.LogExtensions();139            }140#if NET451141            catch (ThreadAbortException)142            {143                // Nothing to do here, we just do not want to do an EqtTrace.Fail for this thread144                // being aborted as it is a legitimate exception to receive.145                if (EqtTrace.IsVerboseEnabled)146                {147                    EqtTrace.Verbose("TestPluginCache.DiscoverTestExtensions: Data extension discovery is being aborted due to a thread abort.");148                }149            }150#endif151            catch (Exception e)152            {153                EqtTrace.Error("TestPluginCache: Discovery failed! {0}", e);154                throw;155            }156            finally157            {158                if (platformAssemblyResolver != null)159                {160                    platformAssemblyResolver.AssemblyResolve -= this.CurrentDomainAssemblyResolve;161                    platformAssemblyResolver.Dispose();162                }163                // clear the assemblies164                lock (this.resolvedAssemblies)165                {166                    this.resolvedAssemblies?.Clear();167                }168            }169            return pluginInfos;170        }171        /// <summary>172        /// Use the parameter path to extensions173        /// </summary>174        /// <param name="additionalExtensionsPath">List of extension paths</param>175        /// <param name="skipExtensionFilters">Skip extension name filtering (if true)</param>176        public void UpdateExtensions(IEnumerable<string> additionalExtensionsPath, bool skipExtensionFilters)177        {178            lock (this.lockForExtensionsUpdate)179            {180                if (EqtTrace.IsVerboseEnabled)181                {182                    EqtTrace.Verbose("TestPluginCache: Update extensions started. Skip filter = " + skipExtensionFilters);183                }184                var extensions = additionalExtensionsPath?.ToList();185                if (extensions == null || extensions.Count == 0)186                {187                    return;188                }189                if (skipExtensionFilters)190                {191                    // Add the extensions to unfilter list. These extensions will never be filtered192                    // based on file name (e.g. *.testadapter.dll etc.).193                    if (TryMergeExtensionPaths(this.unfilterableExtensionPaths, extensions,194                        out this.unfilterableExtensionPaths))195                    {196                        // Set the extensions discovered to false so that the next time anyone tries197                        // to get the additional extensions, we rediscover.198                        this.TestExtensions?.InvalidateCache();199                    }200                }201                else202                {203                    if (TryMergeExtensionPaths(this.filterableExtensionPaths, extensions,204                        out this.filterableExtensionPaths))205                    {206                        this.TestExtensions?.InvalidateCache();207                    }208                }209                if (EqtTrace.IsVerboseEnabled)210                {211                    var directories = this.filterableExtensionPaths.Concat(this.unfilterableExtensionPaths).Select(e => Path.GetDirectoryName(Path.GetFullPath(e))).Distinct();212                    var directoryString = string.Join(",", directories);213                    EqtTrace.Verbose(214                        "TestPluginCache: Using directories for assembly resolution '{0}'.",215                        directoryString);216                    var extensionString = string.Join(",", this.filterableExtensionPaths.Concat(this.unfilterableExtensionPaths));217                    EqtTrace.Verbose("TestPluginCache: Updated the available extensions to '{0}'.", extensionString);218                }219            }220        }221        /// <summary>222        /// Clear the previously cached extensions223        /// </summary>224        public void ClearExtensions()225        {226            this.filterableExtensionPaths?.Clear();227            this.unfilterableExtensionPaths?.Clear();228            this.TestExtensions?.InvalidateCache();229        }230        #endregion231        #region Utility methods232        internal IEnumerable<string> DefaultExtensionPaths233        {234            get235            {236                return this.defaultExtensionPaths;237            }238            set239            {240                if (value != null)241                {242                    this.defaultExtensionPaths.AddRange(value);243                }244            }245        }246        /// <summary>247        /// The get test extensions.248        /// </summary>249        /// <param name="extensionAssembly">250        /// The extension assembly.251        /// </param>252        /// <typeparam name="TPluginInfo">253        /// Type of Test plugin info.254        /// </typeparam>255        /// <typeparam name="TExtension">256        /// Type of extension.257        /// </typeparam>258        /// <returns>259        /// The <see cref="Dictionary"/>.260        /// </returns>261        internal Dictionary<string, TPluginInfo> GetTestExtensions<TPluginInfo, TExtension>(string extensionAssembly) where TPluginInfo : TestPluginInformation262        {263            // Check if extensions from this assembly have already been discovered.264            var extensions = this.TestExtensions?.GetExtensionsDiscoveredFromAssembly<TPluginInfo>(this.TestExtensions.GetTestExtensionCache<TPluginInfo>(), extensionAssembly);265            if (extensions != null)266            {267                return extensions;268            }269            var pluginInfos = this.GetTestExtensions<TPluginInfo, TExtension>(new List<string>() { extensionAssembly });270            // Add extensions discovered to the cache.271            if (this.TestExtensions == null)272            {273                this.TestExtensions = new TestExtensions();274            }275            this.TestExtensions.AddExtension<TPluginInfo>(pluginInfos);276            return pluginInfos;277        }278        /// <summary>279        /// Gets the resolution paths for the extension assembly to facilitate assembly resolution.280        /// </summary>281        /// <param name="extensionAssembly">The extension assembly.</param>282        /// <returns>Resolution paths for the assembly.</returns>283        internal IList<string> GetResolutionPaths(string extensionAssembly)284        {285            var resolutionPaths = new List<string>();286            var extensionDirectory = Path.GetDirectoryName(Path.GetFullPath(extensionAssembly));287            resolutionPaths.Add(extensionDirectory);288            var currentDirectory = Path.GetDirectoryName(typeof(TestPluginCache).GetTypeInfo().Assembly.GetAssemblyLocation());289            if (!resolutionPaths.Contains(currentDirectory))290            {291                resolutionPaths.Add(currentDirectory);292            }293            return resolutionPaths;294        }295        /// <summary>296        /// Gets the default set of resolution paths for the assembly resolution297        /// </summary>298        /// <returns>List of paths.</returns>299        internal IList<string> GetDefaultResolutionPaths()300        {301            var resolutionPaths = new List<string>();302            // Add the extension directories for assembly resolution303            var extensionDirectories = this.GetExtensionPaths(string.Empty).Select(e => Path.GetDirectoryName(Path.GetFullPath(e))).Distinct().ToList();304            if (extensionDirectories.Any())305            {306                resolutionPaths.AddRange(extensionDirectories);307            }308            // Keep current directory for resolution309            var currentDirectory = Path.GetDirectoryName(typeof(TestPluginCache).GetTypeInfo().Assembly.GetAssemblyLocation());310            if (!resolutionPaths.Contains(currentDirectory))311            {312                resolutionPaths.Add(currentDirectory);313            }314            // If running in Visual Studio context, add well known directories for resolution315            var installContext = new InstallationContext(new FileHelper());316            if (installContext.TryGetVisualStudioDirectory(out string vsInstallPath))317            {318                resolutionPaths.AddRange(installContext.GetVisualStudioCommonLocations(vsInstallPath));319            }320            return resolutionPaths;321        }322        /// <summary>323        /// Get the files which match the regex pattern324        /// </summary>325        /// <param name="extensions">326        /// The extensions.327        /// </param>328        /// <param name="endsWithPattern">329        /// Pattern used to select files using String.EndsWith330        /// </param>331        /// <returns>332        /// The list of files which match the regex pattern333        /// </returns>334        protected virtual List<string> GetFilteredExtensions(List<string> extensions, string endsWithPattern)335        {336            if (string.IsNullOrEmpty(endsWithPattern))337            {338                return extensions;339            }340            return extensions.Where(ext => ext.EndsWith(endsWithPattern, StringComparison.OrdinalIgnoreCase)).ToList();341        }342        private static bool TryMergeExtensionPaths(List<string> extensionsList, List<string> additionalExtensions, out List<string> mergedExtensionsList)343        {344            if (additionalExtensions.Count == extensionsList.Count && additionalExtensions.All(extensionsList.Contains))345            {346                if (EqtTrace.IsVerboseEnabled)347                {348                    var extensionString = string.Join(",", extensionsList);...TestableTestPluginCache.cs
Source:TestableTestPluginCache.cs  
...18        }19        public TestableTestPluginCache() : this(new List<string>())20        {21        }22        protected override IEnumerable<string> GetFilteredExtensions(List<string> extensions, string searchPattern)23        {24            this.Action?.Invoke();25            return extensions;26        }27        new public void SetupAssemblyResolver(string extensionAssembly)28        {29            base.SetupAssemblyResolver(extensionAssembly);30        }31    }32}...GetFilteredExtensions
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;7{8    {9        static void Main(string[] args)10        {11            TestPluginCache testPluginCache = new TestPluginCache();12            IEnumerable<string> extensions = testPluginCache.GetFilteredExtensions(".runsettings");13        }14    }15}16using System;17using System.Collections.Generic;18using System.Linq;19using System.Text;20using System.Threading.Tasks;21using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;22{23    {24        static void Main(string[] args)25        {26            TestPluginCache testPluginCache = new TestPluginCache();27            IEnumerable<string> extensions = testPluginCache.GetFilteredExtensions(".runsettings");28            foreach (string extension in extensions)29            {30                Console.WriteLine(extension);31            }32        }33    }34}35using System;36using System.Collections.Generic;37using System.Linq;38using System.Text;39using System.Threading.Tasks;40using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;41{42    {43        static void Main(string[] args)44        {45            TestPluginCache testPluginCache = new TestPluginCache();46            IEnumerable<string> extensions = testPluginCache.GetFilteredExtensions(".runsettings");47            foreach (string extension in extensions)48            {49                Console.WriteLine(extension);50            }51            Console.ReadLine();52        }53    }54}55using System;56using System.Collections.Generic;57using System.Linq;58using System.Text;59using System.Threading.Tasks;60using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;61{62    {63        static void Main(string[] args)64        {65            TestPluginCache testPluginCache = new TestPluginCache();66            IEnumerable<string> extensions = testPluginCache.GetFilteredExtensions(".runsettings");67            foreach (string extension in extensions)68            {69                Console.WriteLine(extension);70            }71            Console.ReadLine();72        }73    }74}GetFilteredExtensions
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;7{8    {9        static void Main(string[] args)10        {11            var extensions = TestPluginCache.Instance.GetFilteredExtensions();12            foreach (var extension in extensions)13            {14                Console.WriteLine(extension.Key);15                foreach (var extensionValue in extension.Value)16                {17                    Console.WriteLine("\t" + extensionValue);18                }19            }20            Console.ReadKey();21        }22    }23}GetFilteredExtensions
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;7using Microsoft.VisualStudio.TestPlatform.ObjectModel;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;9using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;10using System.IO;11using System.Reflection;12{13    [FriendlyName("TestProject1")]14    {15        public void Cancel()16        {17            throw new NotImplementedException();18        }19        public void RunTests(IEnumerable<string> sources, IRunContext runContext, IFrameworkHandle frameworkHandle)20        {21            TestPluginCache testPluginCache = new TestPluginCache();22            var extensions = testPluginCache.GetFilteredExtensions(new List<string>() { ".cs" }, new List<string>() { "executor" });23            foreach (var extension in extensions)24            {25                frameworkHandle.SendMessage(TestMessageLevel.Informational, extension.Key);26            }27        }28        public void RunTests(IEnumerable<TestCase> tests, IRunContext runContext, IFrameworkHandle frameworkHandle)29        {30            throw new NotImplementedException();31        }32    }33}34using System;35using System.Collections.Generic;36using System.Linq;37using System.Text;38using System.Threading.Tasks;39using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;40using Microsoft.VisualStudio.TestPlatform.ObjectModel;41using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;42using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;43using System.IO;44using System.Reflection;45{46    [FriendlyName("TestProject2")]47    {48        public void Cancel()49        {50            throw new NotImplementedException();51        }52        public void RunTests(IEnumerable<string> sources, IRunContext runContext, IFrameworkHandle frameworkHandle)53        {54            TestPluginCache testPluginCache = new TestPluginCache();55            var extensions = testPluginCache.GetFilteredExtensions(new List<string>() { ".cs" }, new List<string>() { "executor" });56            foreach (var extension in extensions)57            {58                frameworkHandle.SendMessage(TestMessageLevel.Informational, extension.Key);59            }60        }61        public void RunTests(IEnumerable<TestCase> tests, IRunContext runContext, IFrameworkHandle frameworkHandle)62        {GetFilteredExtensions
Using AI Code Generation
1using System;2using System.Collections.Generic;3using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;4{5    {6        static void Main(string[] args)7        {8            var testPluginCache = new TestPluginCache();9            var extensions = testPluginCache.GetFilteredExtensions(new List<string>());10            Console.WriteLine("Total number of extensions: {0}", extensions.Count);11        }12    }13}GetFilteredExtensions
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;2using Microsoft.VisualStudio.TestPlatform.ObjectModel;3using Microsoft.VisualStudio.TestPlatform.ObjectModel.Adapter;4using System;5{6    {7        static void Main(string[] args)8        {9            var testPluginCache = new TestPluginCache();10            var extensions = testPluginCache.GetFilteredExtensions<ITestDiscoverer>(new TestPlatformOptions());11            foreach (var extension in extensions)12            {13                Console.WriteLine(extension.Key);14            }15        }16    }17}18  "frameworks": {19    "netcoreapp1.0": {20      "dependencies": {21        "Microsoft.NETCore.App": {22        },23      },24      "imports": "dnxcore50"25    }26  }27  "frameworks": {28    "netcoreapp1.0": {29      "dependencies": {30        "Microsoft.NETCore.App": {31        },32      },33      "imports": "dnxcore50"34    }35  }GetFilteredExtensions
Using AI Code Generation
1using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;2using Microsoft.VisualStudio.TestPlatform.ObjectModel;3using System;4using System.Collections.Generic;5using System.Linq;6{7    {8        static void Main(string[] args)9        {10            var extensions = TestPluginCache.Instance.GetFilteredExtensions(new FrameworkVersion(4, 0));11            foreach (var extension in extensions)12            {13                Console.WriteLine(extension.ExtensionUri);14            }15            Console.ReadKey();16        }17    }18}GetFilteredExtensions
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;7{8    {9        static void Main(string[] args)10        {11            var testPluginCache = new TestPluginCache();12            var extensions = testPluginCache.GetFilteredExtensions(new List<string> { "testadapter", "testlogger" });13            foreach (var extension in extensions)14            {15                Console.WriteLine(extension.Value.Metadata.Name);16            }17            Console.ReadLine();18        }19    }20}21using System;22using System.Collections.Generic;23using System.Linq;24using System.Text;25using System.Threading.Tasks;26using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;27{28    {29        static void Main(string[] args)30        {31            var testPluginCache = new TestPluginCache();32            var extensions = testPluginCache.GetFilteredExtensions(new List<string> { "testadapter", "testlogger" });33            foreach (var extension in extensions)34            {35                Console.WriteLine(extension.Value.Metadata.Name);36            }37            Console.ReadLine();38        }39    }40}41using System;42using System.Collections.Generic;43using System.Linq;44using System.Text;45using System.Threading.Tasks;46using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;47{48    {49        static void Main(string[] args)50        {51            var testPluginCache = new TestPluginCache();52            var extensions = testPluginCache.GetFilteredExtensions(new List<string> { "testadapter", "testlogger" });53            foreach (var extension in extensions)54            {55                Console.WriteLine(extension.Value.Metadata.Name);56            }57            Console.ReadLine();58        }59    }60}61using System;62using System.Collections.Generic;63using System.Linq;64using System.Text;65using System.Threading.Tasks;66using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;67{GetFilteredExtensions
Using AI Code Generation
1var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();2var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.TestAdapterEndsWithPattern);3var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();4var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.TestLoggerEndsWithPattern);5var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();6var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.TestSettingsEndsWithPattern);7var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();8var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.RunSettingsEndsWithPattern);9var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();10var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.TestRunStatsEndsWithPattern);11var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();12var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.TestResultEndsWithPattern);13var testPluginCache = new Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.TestPluginCache();14var extensions = testPluginCache.GetFilteredExtensions(Microsoft.VisualStudio.TestPlatform.ObjectModel.Client.TestPlatformConstants.TestRunStatsEndsWithPattern);GetFilteredExtensions
Using AI Code Generation
1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6using Microsoft.VisualStudio.TestPlatform.ObjectModel;7using Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework;8using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;9using Microsoft.VisualStudio.TestPlatform.Common;10using Microsoft.VisualStudio.TestPlatform.ObjectModel.Logging;11{12    {13        static void Main(string[] args)14        {15            TestPluginCache cache = new TestPluginCache();16            IEnumerable<string> extensions = cache.GetFilteredExtensions(new List<string>() { ".dll" }, new List<string>() { "TestAdapter", "Logger" }, new List<string>() { "package1", "package2" }, new List<string>() { "version1", "version2" });17            foreach (string extension in extensions)18            {19                Console.WriteLine(extension);20            }21        }22    }23}Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
