Skip to content

Commit 3c06abb

Browse files
committed
Fix error in use of --extensionDirectory
1 parent 060d480 commit 3c06abb

File tree

4 files changed

+56
-44
lines changed

4 files changed

+56
-44
lines changed

package-tests.cake

+2-2
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ AddToBothLists(new PackageTest(
198198
new ExpectedResult("Passed") { Assemblies = new[] { new ExpectedAssemblyResult("WpfTest.dll", "netcore-8.0") } }));
199199

200200
//////////////////////////////////////////////////////////////////////
201-
// RUN TESTS USING EACH OF OUR EXTENSIONS
201+
// TESTS USING EACH OF OUR EXTENSIONS
202202
//////////////////////////////////////////////////////////////////////
203203

204204
// NUnit Project Loader Tests
@@ -287,7 +287,7 @@ StandardRunnerTests.Add(new PackageTest(
287287
StandardRunnerTests.Add(new PackageTest(
288288
1, "V2FrameworkDriverTest",
289289
"Run mock-assembly-v2 using the V2 Driver out of process",
290-
"v2-tests/net462/mock-assembly-v2.dll --list-extensions",
290+
"v2-tests/net462/mock-assembly-v2.dll",
291291
new ExpectedResult("Failed")
292292
{
293293
Total = 28,

src/NUnitConsole/nunit3-console/ConsoleRunner.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public class ConsoleRunner
5252

5353
public ConsoleRunner(ITestEngine engine, ConsoleOptions options, ExtendedTextWriter writer)
5454
{
55-
Guard.ArgumentNotNull(_engine = engine, nameof(engine));
55+
Guard.ArgumentNotNull(_engine = engine, nameof(engine));
5656
Guard.ArgumentNotNull(_options = options, nameof(options));
5757
Guard.ArgumentNotNull(_outWriter = writer, nameof(writer));
5858

@@ -71,7 +71,7 @@ public ConsoleRunner(ITestEngine engine, ConsoleOptions options, ExtendedTextWri
7171
foreach (string extensionDirectory in extensionPath.Split(new[] { Path.PathSeparator }, StringSplitOptions.RemoveEmptyEntries))
7272
_extensionService.FindExtensionAssemblies(extensionDirectory);
7373

74-
foreach (string extensionDirectory in _options.ExtensionDirectories)
74+
foreach (string extensionDirectory in _options.ExtensionDirectories)
7575
_extensionService.FindExtensionAssemblies(extensionDirectory);
7676

7777
_workDirectory = options.WorkDirectory;

src/NUnitEngine/nunit.engine.core/Services/DriverService.cs

+25-15
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public class DriverService : Service, IDriverService
2020
{
2121
static ILogger log = InternalTrace.GetLogger("DriverService");
2222

23-
readonly IList<IDriverFactory> _factories = new List<IDriverFactory>();
23+
private ExtensionService _extensionService;
24+
private IList<IDriverFactory> _factories;
2425

2526
/// <summary>
2627
/// Get a driver suitable for use with a particular test assembly.
@@ -55,6 +56,9 @@ public IFrameworkDriver GetDriver(AppDomain domain, string assemblyPath, string
5556
" test assemblies are not supported by this version of the engine");
5657
}
5758

59+
if (_factories == null)
60+
InitializeDriverFactories();
61+
5862
try
5963
{
6064
using (var assemblyDef = AssemblyDefinition.ReadAssembly(assemblyPath))
@@ -104,20 +108,7 @@ public override void StartService()
104108

105109
try
106110
{
107-
var extensionService = ServiceContext.GetService<ExtensionService>();
108-
if (extensionService != null)
109-
{
110-
foreach (IDriverFactory factory in extensionService.GetExtensions<IDriverFactory>())
111-
_factories.Add(factory);
112-
113-
#if NETFRAMEWORK
114-
var node = extensionService.GetExtensionNode("/NUnit/Engine/NUnitV2Driver");
115-
if (node != null)
116-
_factories.Add(new NUnit2DriverFactory(node));
117-
#endif
118-
}
119-
120-
_factories.Add(new NUnit3DriverFactory());
111+
_extensionService = ServiceContext.GetService<ExtensionService>();
121112

122113
Status = ServiceStatus.Started;
123114
}
@@ -127,5 +118,24 @@ public override void StartService()
127118
throw;
128119
}
129120
}
121+
122+
private void InitializeDriverFactories()
123+
{
124+
_factories = new List<IDriverFactory>();
125+
126+
if (_extensionService != null)
127+
{
128+
foreach (IDriverFactory factory in _extensionService.GetExtensions<IDriverFactory>())
129+
_factories.Add(factory);
130+
131+
#if NETFRAMEWORK
132+
var node = _extensionService.GetExtensionNode("/NUnit/Engine/NUnitV2Driver");
133+
if (node != null)
134+
_factories.Add(new NUnit2DriverFactory(node));
135+
#endif
136+
}
137+
138+
_factories.Add(new NUnit3DriverFactory());
139+
}
130140
}
131141
}

src/NUnitEngine/nunit.engine/Services/ProjectService.cs

+27-25
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,14 @@ namespace NUnit.Engine.Services
1212
/// </summary>
1313
public class ProjectService : Service, IProjectService
1414
{
15-
Dictionary<string, ExtensionNode> _extensionIndex = new Dictionary<string, ExtensionNode>();
15+
Dictionary<string, ExtensionNode> _extensionIndex;
16+
ExtensionService _extensionService;
1617

1718
public bool CanLoadFrom(string path)
1819
{
20+
if (_extensionIndex == null)
21+
InitializeExtensionIndex();
22+
1923
ExtensionNode node = GetNodeForPath(path);
2024
if (node != null)
2125
{
@@ -84,40 +88,38 @@ public override void StartService()
8488
{
8589
try
8690
{
87-
var extensionService = ServiceContext.GetService<ExtensionService>();
91+
_extensionService = ServiceContext.GetService<ExtensionService>();
8892

89-
if (extensionService == null)
90-
Status = ServiceStatus.Started;
91-
else if (extensionService.Status != ServiceStatus.Started)
92-
Status = ServiceStatus.Error;
93-
else
94-
{
95-
Status = ServiceStatus.Started;
96-
97-
foreach (var node in extensionService.GetExtensionNodes<IProjectLoader>())
98-
{
99-
foreach (string ext in node.GetValues("FileExtension"))
100-
{
101-
if (ext != null)
102-
{
103-
if (_extensionIndex.ContainsKey(ext))
104-
throw new NUnitEngineException(string.Format("ProjectLoader extension {0} is already handled by another extension.", ext));
105-
106-
_extensionIndex.Add(ext, node);
107-
}
108-
}
109-
}
110-
}
93+
Status = _extensionService == null || _extensionService.Status == ServiceStatus.Started
94+
? ServiceStatus.Started : ServiceStatus.Error;
11195
}
11296
catch
11397
{
114-
// TODO: Should we just ignore any addin that doesn't load?
11598
Status = ServiceStatus.Error;
11699
throw;
117100
}
118101
}
119102
}
120103

104+
private void InitializeExtensionIndex()
105+
{
106+
_extensionIndex = new Dictionary<string, ExtensionNode>();
107+
108+
foreach (var node in _extensionService.GetExtensionNodes<IProjectLoader>())
109+
{
110+
foreach (string ext in node.GetValues("FileExtension"))
111+
{
112+
if (ext != null)
113+
{
114+
if (_extensionIndex.ContainsKey(ext))
115+
throw new NUnitEngineException(string.Format("ProjectLoader extension {0} is already handled by another extension.", ext));
116+
117+
_extensionIndex.Add(ext, node);
118+
}
119+
}
120+
}
121+
}
122+
121123
private IProject LoadFrom(string path)
122124
{
123125
if (File.Exists(path))

0 commit comments

Comments
 (0)