Guest User

Test Container Discoverer

a guest
Jul 9th, 2013
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.04 KB | None | 0 0
  1. using Microsoft.VisualStudio.Shell;
  2. using Microsoft.VisualStudio.Shell.Interop;
  3. using Microsoft.VisualStudio.TestWindow.Extensibility;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.ComponentModel.Composition;
  7. using System.Linq;
  8. using System.Threading.Tasks;
  9. using TSTestAdapter.Helpers;
  10.  
  11. namespace TSTestAdapter
  12. {
  13.     public class TSTestContainerDiscoverer : ITestContainerDiscoverer
  14.     {
  15.         #region ITestContainerDiscoverer members
  16.  
  17.         public Uri ExecutorUri
  18.         {
  19.             get { return TSTestExecutor.ExecutorUri; }
  20.         }
  21.  
  22.         public IEnumerable<ITestContainer> TestContainers
  23.         {
  24.             get { return GetContainers(); }
  25.         }
  26.  
  27.         public event EventHandler TestContainersUpdated;
  28.  
  29.         #endregion
  30.  
  31.  
  32.         private IServiceProvider serviceProvider;
  33.  
  34.         [ImportingConstructor]
  35.         public TSTestContainerDiscoverer([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider)
  36.         {
  37.             this.serviceProvider = serviceProvider;
  38.         }
  39.  
  40.         private IEnumerable<ITestContainer> GetContainers()
  41.         {
  42.             var containers = new List<ITestContainer>();
  43.  
  44.             Parallel.ForEach(GetTestFiles(), filePath =>
  45.             {
  46.                 containers.Add(new TSTestContainer(this, filePath));
  47.             });
  48.  
  49.             return containers;
  50.         }
  51.  
  52.         private IEnumerable<string> GetTestFiles()
  53.         {
  54.             var solution = (IVsSolution)serviceProvider.GetService(typeof(SVsSolution));
  55.             var loadedProjects = solution.EnumerateLoadedProjects(__VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION).OfType<IVsProject>();
  56.  
  57.             return loadedProjects.SelectMany(GetTestFiles).ToList();
  58.         }
  59.  
  60.         private IEnumerable<string> GetTestFiles(IVsProject project)
  61.         {
  62.             return VsSolutionHelper.GetProjectItems(project).Where(o => IsTestFile(o));
  63.         }
  64.  
  65.         private bool IsTestFile(string filePath)
  66.         {
  67.             return filePath.EndsWith(".test.ts");
  68.         }
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment