public void DiscoverTests(IEnumerable<string> sources, IDiscoveryContext discoveryContext, IMessageLogger logger, ITestCaseDiscoverySink discoverySink)
{
// indicate start of discovery
logger.SendMessage(TestMessageLevel.Informational, Strings.DISCOVERER_STARTING);
int discoveredSpecCount = 0;
int sourcesWithSpecs = 0;
Settings settings = GetSettings(discoveryContext);
foreach (string assemblyPath in sources.Distinct())
{
try
{
if (!File.Exists(Path.Combine(Path.GetDirectoryName(Path.GetFullPath(assemblyPath)), "Machine.Specifications.dll")))
continue;
sourcesWithSpecs++;
logger.SendMessage(TestMessageLevel.Informational, string.Format(Strings.DISCOVERER_LOOKINGIN, assemblyPath));
List<TestCase> specs = discoverer.DiscoverSpecs(assemblyPath)
.Select(spec => SpecTestHelper.GetVSTestCaseFromMSpecTestCase(assemblyPath, spec, settings.DisableFullTestNameInIDE, MSpecTestAdapter.uri, CreateTrait))
.ToList();
foreach (TestCase discoveredTest in specs)
{
discoveredSpecCount++;
if (discoverySink != null)
{
discoverySink.SendTestCase(discoveredTest);
}
}
}
catch (Exception discoverException)
{
logger.SendMessage(TestMessageLevel.Error, string.Format(Strings.DISCOVERER_ERROR, assemblyPath, discoverException.Message));
}
}
// indicate that we are finished discovering
logger.SendMessage(TestMessageLevel.Informational, string.Format(Strings.DISCOVERER_COMPLETE, discoveredSpecCount, sources.Count(), sourcesWithSpecs));
}