Skip to content
This repository was archived by the owner on Dec 10, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions src/fakes/testCentric.extensibility.tests.addins

This file was deleted.

25 changes: 8 additions & 17 deletions src/testcentric.extensibility.fakes/FakeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,27 +49,18 @@ public Process CreateProcess(Guid agentId, string agencyUrl, TestPackage package
throw new NotImplementedException();
}
}
}

namespace NUnit.Engine.Extensibility
{
#if NET20
using NUnit.Engine.Extensibility;
#else
using NUnit.Extensibility;
#endif

[Extension(Enabled = false, Path = "/NUnit/Engine/TypeExtensions/ITestEventListener")]
public class FakeTestEventListener : ITestEventListener
[Extension(Enabled = false, Path = "/TestCentric/Engine/TestEventListeners")]
public class FakeTestEventListener : NUnit.Engine.ITestEventListener
{
public void OnTestEvent(string text)
{
throw new System.NotImplementedException();
}
}

[Extension(Path = "/NUnit/Engine/TypeExtensions/IProjectLoader")]
public class FakeProjectLoader : IProjectLoader
[Extension(Path = "/TestCentric/Engine/ProjectLoaders")]
public class FakeProjectLoader : NUnit.Engine.Extensibility.IProjectLoader
{
public bool CanLoadFrom(string path)
{
Expand Down Expand Up @@ -100,8 +91,8 @@ public NUnit.Engine.Extensibility.IProject LoadFrom(string path)
// }
// }

[Extension]
public class FakeResultWriter : IResultWriter
[Extension(Path="/TestCentric/Engine/ResultWriters")]
public class FakeResultWriter : NUnit.Engine.Extensibility.IResultWriter
{
public void CheckWritability(string outputPath)
{
Expand All @@ -119,8 +110,8 @@ public void WriteResultFile(XmlNode resultNode, TextWriter writer)
}
}

[Extension(Enabled = false, Path = "/NUnit/Engine/TypeExtensions/ITestEventListener")]
public class FakeNUnitExtension_ThrowsInConstructor : ITestEventListener
[Extension(Enabled = false, Path = "/TestCentric/Engine/TestEventListeners")]
public class FakeNUnitExtension_ThrowsInConstructor : NUnit.Engine.ITestEventListener
{
public FakeNUnitExtension_ThrowsInConstructor()
{
Expand Down
14 changes: 14 additions & 0 deletions src/testcentric.extensibility.tests/EngineExtensionPoints.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// ***********************************************************************
// Copyright (c) Charlie Poole and TestCentric contributors.
// Licensed under the MIT License. See LICENSE file in root directory.
// ***********************************************************************

using TestCentric.Engine.Extensibility;
using TestCentric.Extensibility;

// ExtensionPoints supported by the engine
[assembly: ExtensionPoint("/TestCentric/Engine/AgentLaunchers", typeof(IAgentLauncher))]
[assembly: ExtensionPoint("/TestCentric/Engine/ProjectLoaders", typeof(NUnit.Engine.Extensibility.IProjectLoader))]
[assembly: ExtensionPoint("/TestCentric/Engine/ResultWriters", typeof(NUnit.Engine.Extensibility.IResultWriter))]
[assembly: ExtensionPoint("/TestCentric/Engine/TestEventListeners", typeof(NUnit.Engine.ITestEventListener))]
[assembly: ExtensionPoint("/TestCentric/Engine/DriverFactories", typeof(NUnit.Engine.Extensibility.IDriverFactory))]
68 changes: 20 additions & 48 deletions src/testcentric.extensibility.tests/ExtensionManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,50 +11,32 @@

namespace TestCentric.Extensibility
{
[TestFixture(null)]
[TestFixture("/TestCentric/Engine/TypeExtensions/")]
public class ExtensionManagerTests
{
protected static readonly Assembly THIS_ASSEMBLY = typeof(ExtensionManagerTests).Assembly;
protected static readonly string THIS_ASSEMBLY_DIRECTORY = Path.GetDirectoryName(THIS_ASSEMBLY.Location);

protected static readonly Assembly TESTCENTRIC_ENGINE_API = typeof(TestCentric.Engine.Extensibility.IDriverFactory).Assembly;
protected static readonly Assembly NUNIT_ENGINE_API = typeof(NUnit.Engine.Extensibility.IDriverFactory).Assembly;

protected string DefaultTypeExtensionsPath;
protected ExtensionManager ExtensionManager;

public ExtensionManagerTests(string defaultTypeExtensionsPath)
public ExtensionManagerTests()
{
DefaultTypeExtensionsPath = defaultTypeExtensionsPath;

var prefix = defaultTypeExtensionsPath ?? "/TestCentric/TypeExtensions/";

ExpectedExtensionPointPaths = new[]
{
prefix + "IAgentLauncher",
"/NUnit/Engine/TypeExtensions/ITestEventListener",
"/NUnit/Engine/TypeExtensions/IService",
"/NUnit/Engine/TypeExtensions/IDriverFactory",
"/NUnit/Engine/TypeExtensions/IResultWriter",
"/NUnit/Engine/TypeExtensions/IProjectLoader",
#if !NET35
"/NUnit/Engine/TypeExtensions/IAgentLauncher"
#endif
"/TestCentric/Engine/AgentLaunchers",
"/TestCentric/Engine/TestEventListeners",
"/TestCentric/Engine/DriverFactories",
"/TestCentric/Engine/ResultWriters",
"/TestCentric/Engine/ProjectLoaders"
};

// This could be initialized inline, but it's here for clarity
ExpectedExtensionPointTypes = new[]
{
typeof(TestCentric.Engine.Extensibility.IAgentLauncher),
typeof(NUnit.Engine.ITestEventListener),
typeof(NUnit.Engine.IService),
typeof(NUnit.Engine.Extensibility.IDriverFactory),
typeof(NUnit.Engine.Extensibility.IResultWriter),
typeof(NUnit.Engine.Extensibility.IProjectLoader),
#if !NET35
typeof(NUnit.Engine.Extensibility.IAgentLauncher)
#endif
};
}

Expand All @@ -66,22 +48,16 @@ public ExtensionManagerTests(string defaultTypeExtensionsPath)
public void CreateManager()
{
ExtensionManager = new ExtensionManager();
if (DefaultTypeExtensionsPath != null)
ExtensionManager.TypeExtensionPath = DefaultTypeExtensionsPath;

// Initialize ExtensionManager using extension points in TestCentric API assembly
// with fake extensions defined in this assembly.
// Initialize ExtensionManager using extension points defined in this
// assembly and extensions defined in the fake extensions assembly.

ExtensionManager.FindExtensionPoints(TESTCENTRIC_ENGINE_API, NUNIT_ENGINE_API);
ExtensionManager.FindExtensionPoints(THIS_ASSEMBLY);
Assert.That(ExtensionManager.ExtensionPoints.Count, Is.GreaterThan(0), "No ExtensionPoints were found");
foreach (var extensionPoint in ExtensionManager.ExtensionPoints)
Console.WriteLine($"Found ExtensionPoint: {extensionPoint.TypeName} Path={extensionPoint.Path}");

ExtensionManager.FindExtensionAssemblies(FAKE_EXTENSIONS_PARENT_DIRECTORY);
ExtensionManager.CompleteExtensionDiscovery();
Assert.That(ExtensionManager.Extensions.Count, Is.GreaterThan(0), "No Extensions were found");
foreach (var extension in ExtensionManager.Extensions)
Console.WriteLine($"Found Extension: {extension.TypeName} Path={extension.Path}");
}

#region Extension Point Tests
Expand Down Expand Up @@ -143,12 +119,10 @@ internal class ThisIsNotAnExtensionPoint
[
"TestCentric.Engine.Extensibility.FakeAgentLauncher",
"TestCentric.Engine.Extensibility.FakeAgentLauncher_ThrowsInConstructor",
#if !NET35
"NUnit.Engine.Extensibility.FakeTestEventListener",
"NUnit.Engine.Extensibility.FakeProjectLoader",
"NUnit.Engine.Extensibility.FakeResultWriter",
"NUnit.Engine.Extensibility.FakeNUnitExtension_ThrowsInConstructor"
#endif
"TestCentric.Engine.Extensibility.FakeTestEventListener",
"TestCentric.Engine.Extensibility.FakeProjectLoader",
"TestCentric.Engine.Extensibility.FakeResultWriter",
"TestCentric.Engine.Extensibility.FakeNUnitExtension_ThrowsInConstructor"
];

[Test]
Expand All @@ -157,30 +131,29 @@ public void AllExtensionsAreKnown()
Assert.That(ExtensionManager.Extensions.Select(ep => ep.TypeName), Is.EquivalentTo(KnownExtensionTypeNames));
}

#if !NET35
// Run this first as subsequent test will enable the extension
[Test, Order(1)]
public void ExtensionMayBeDisabledByDefault()
{
Assert.That(ExtensionManager.Extensions,
Has.One.Property(nameof(ExtensionNode.TypeName)).EqualTo("NUnit.Engine.Extensibility.FakeTestEventListener")
Has.One.Property(nameof(ExtensionNode.TypeName)).EqualTo("TestCentric.Engine.Extensibility.FakeTestEventListener")
.And.Property(nameof(ExtensionNode.Enabled)).False);
}

[Test]
public void DisabledExtensionMayBeEnabled()
{
ExtensionManager.EnableExtension("NUnit.Engine.Extensibility.FakeTestEventListener", true);
ExtensionManager.EnableExtension("TestCentric.Engine.Extensibility.FakeTestEventListener", true);

Assert.That(ExtensionManager.Extensions,
Has.One.Property(nameof(ExtensionNode.TypeName)).EqualTo("NUnit.Engine.Extensibility.FakeTestEventListener")
Has.One.Property(nameof(ExtensionNode.TypeName)).EqualTo("TestCentric.Engine.Extensibility.FakeTestEventListener")
.And.Property(nameof(ExtensionNode.Enabled)).True);
}

[Test]
public void NUnitExtensionThrowsInConstructor()
{
string typeName = "NUnit.Engine.Extensibility.FakeNUnitExtension_ThrowsInConstructor";
string typeName = "TestCentric.Engine.Extensibility.FakeNUnitExtension_ThrowsInConstructor";
var exNode = ExtensionManager.Extensions.Where(n => n.TypeName == typeName).Single();

// Although the constructor throws, we don't get an exception.
Expand All @@ -190,7 +163,6 @@ public void NUnitExtensionThrowsInConstructor()
Assert.That(exNode.Exception, Is.InstanceOf<ExtensibilityException>());
Assert.That(exNode.Exception.InnerException, Is.InstanceOf<NotImplementedException>());
}
#endif

[Test]
public void TestCentricExtensionThrowsInConstructor()
Expand All @@ -209,15 +181,15 @@ public void TestCentricExtensionThrowsInConstructor()
#if NETCOREAPP
[TestCase("netstandard2.0", ExpectedResult = true)]
[TestCase("net462", ExpectedResult = false)]
//[TestCase("net20", ExpectedResult = false)]
[TestCase("net20", ExpectedResult = false)]
#elif NET40_OR_GREATER
[TestCase("netstandard2.0", ExpectedResult = false)]
[TestCase("net462", ExpectedResult = true)]
//[TestCase("net20", ExpectedResult = true)]
[TestCase("net20", ExpectedResult = true)]
#else
[TestCase("netstandard2.0", ExpectedResult = false)]
[TestCase("net462", ExpectedResult = false)]
//[TestCase("net20", ExpectedResult = true)]
[TestCase("net20", ExpectedResult = true)]
#endif
public bool LoadTargetFramework(string tfm)
{
Expand Down
Loading