diff options
4 files changed, 46 insertions, 20 deletions
diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitAssemblyTestSuite.cs b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitAssemblyTestSuite.cs index df35ef8e2f..67852fee35 100644 --- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitAssemblyTestSuite.cs +++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitAssemblyTestSuite.cs @@ -212,7 +212,7 @@ namespace MonoDevelop.UnitTesting.NUnit AsyncCreateTests (ld); }); }; - ld.SupportAssemblies = new List<string> (SupportAssemblies); + ld.SupportAssemblies = GetSupportAssembliesAsync (); ld.NUnitVersion = NUnitVersion; AsyncLoadTest (ld); @@ -332,7 +332,8 @@ namespace MonoDevelop.UnitTesting.NUnit if (File.Exists (ld.Path)) { runner = new ExternalTestRunner (); runner.Connect (ld.NUnitVersion).Wait (); - ld.Info = runner.GetTestInfo (ld.Path, ld.SupportAssemblies).Result; + var supportAssemblies = new List<string> (ld.SupportAssemblies.Result); + ld.Info = runner.GetTestInfo (ld.Path, supportAssemblies).Result; } } catch (AggregateException exception){ var baseException = exception.GetBaseException (); @@ -664,11 +665,19 @@ namespace MonoDevelop.UnitTesting.NUnit protected abstract string AssemblyPath { get; } - + + [Obsolete ("Override GetSupportAssembliesAsync instead")] protected virtual IEnumerable<string> SupportAssemblies { get { yield break; } } + protected virtual Task<IEnumerable<string>> GetSupportAssembliesAsync () + { + #pragma warning disable 618 + return Task.FromResult (SupportAssemblies); + #pragma warning restore 618 + } + // File where cached test info for this test suite will be saved // Returns null by default which means that test info will not be saved. protected virtual string TestInfoCachePath { @@ -683,7 +692,7 @@ namespace MonoDevelop.UnitTesting.NUnit public NunitTestInfo Info; public TestInfoCache InfoCache; public WaitCallback Callback; - public List<string> SupportAssemblies; + public Task<IEnumerable<string>> SupportAssemblies; public NUnitVersion NUnitVersion; } diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs index 55ed1578fb..1d9f1a7510 100644 --- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs +++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/MonoDevelop.UnitTesting.NUnit/NUnitProjectTestSuite.cs @@ -205,21 +205,26 @@ namespace MonoDevelop.UnitTesting.NUnit protected override string TestInfoCachePath { get { return Path.Combine (resultsPath, storeId + ".test-cache"); } } - - protected override IEnumerable<string> SupportAssemblies { - get { + + protected override async Task<IEnumerable<string>> GetSupportAssembliesAsync () + { + DotNetProject project = base.OwnerSolutionItem as DotNetProject; + + if (project != null) { + var references = await project.GetReferences (IdeApp.Workspace.ActiveConfiguration).ConfigureAwait (false); // Referenced assemblies which are not in the gac and which are not localy copied have to be preloaded - DotNetProject project = base.OwnerSolutionItem as DotNetProject; - if (project != null) { - foreach (var pr in project.References) { - if (pr.ReferenceType != ReferenceType.Package && !pr.LocalCopy && pr.ReferenceOutputAssembly) { - foreach (string file in pr.GetReferencedFileNames (IdeApp.Workspace.ActiveConfiguration)) - yield return file; - } - } - } + var supportAssemblies = references.Where (r => !r.IsCopyLocal && (!r.IsProjectReference || r.ReferenceOutputAssembly) && !r.IsFrameworkFile && !r.IsImplicit && !IsGacReference (r)) + .Select (r => r.FilePath.FullPath.ToString ()) + .Where (File.Exists) + .Distinct () + .ToList (); + return supportAssemblies; } + + return Enumerable.Empty<string> (); } + + bool IsGacReference (AssemblyReference r) => string.Equals (r.Metadata.GetValue ("ResolvedFrom"), "{GAC}", StringComparison.OrdinalIgnoreCase); } } diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnitTestRunner.cs b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnitTestRunner.cs index 517c30437a..93002f6305 100644 --- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnitTestRunner.cs +++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnitTestRunner.cs @@ -205,8 +205,14 @@ namespace NUnit3Runner void InitSupportAssemblies (string[] supportAssemblies) { // Preload support assemblies (they may not be in the test assembly directory nor in the gac) - foreach (string asm in supportAssemblies) - Assembly.LoadFrom (asm); + foreach (string asm in supportAssemblies) { + try { + Assembly.LoadFrom (asm); + } catch (Exception e) { + Console.WriteLine ("Couldn't load assembly {0}", asm); + Console.WriteLine (e); + } + } } private TestFilter CreateTestFilter (string[] nameFilter) diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitTestRunner.cs b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitTestRunner.cs index 8059c6d934..e66b39c5b5 100644 --- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitTestRunner.cs +++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitTestRunner.cs @@ -155,8 +155,14 @@ namespace MonoDevelop.UnitTesting.NUnit.External void InitSupportAssemblies (string[] supportAssemblies) { // Preload support assemblies (they may not be in the test assembly directory nor in the gac) - foreach (string asm in supportAssemblies) - Assembly.LoadFrom (asm); + foreach (string asm in supportAssemblies) { + try { + Assembly.LoadFrom (asm); + } catch (Exception e) { + Console.WriteLine ("Couldn't load assembly {0}", asm); + Console.WriteLine (e); + } + } } public override object InitializeLifetimeService () |