/// <summary> /// Creates an extension from its specification. /// </summary> /// <remarks> /// <para> /// An extension specification has the form "[Namespace.]Type,Assembly[;Parameters]". /// The extension class must implement <see cref="ITestRunnerExtension" />. The namespace may be omitted /// if the assembly contains exactly one class with the specified name. The parameter string is passed /// to the extension exactly as written. /// </para> /// <para> /// Examples: /// <list type="bullet"> /// <item>"MyExtensions.MyExtension,MyExtensions.dll;Parameter1,Parameter2"</item> /// <item>"CustomLogger,MyExtensions"</item> /// </list> /// </para> /// </remarks> /// <param name="extensionSpecification">The extension specification.</param> /// <returns>The extension.</returns> /// <exception cref="RunnerException">Thrown if the extension cannot be instantiated and configured.</exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="extensionSpecification"/> is null.</exception> public static ITestRunnerExtension CreateExtensionFromSpecification(string extensionSpecification) { if (extensionSpecification == null) { throw new ArgumentNullException("extensionSpecification"); } Exception exception; try { string typeName, assemblyName, parameters; if (ParseSpecification(extensionSpecification, out typeName, out assemblyName, out parameters)) { Assembly assembly = LoadAssembly(assemblyName); Type type = GetTypeByName(assembly, typeName); if (type != null) { ITestRunnerExtension extension = (ITestRunnerExtension)Activator.CreateInstance(type); extension.Parameters = parameters; return(extension); } } exception = null; } catch (Exception ex) { exception = ex; } throw new RunnerException(String.Format("Could not create a test runner extension from specification '{0}'.", extensionSpecification), exception); }
/// <inheritdoc /> public void RegisterExtension(ITestRunnerExtension extension) { if (extension == null) { throw new ArgumentNullException("extension"); } ThrowIfDisposed(); if (state != State.Created) { throw new InvalidOperationException("Extensions cannot be registered after the test runner has been initialized."); } foreach (ITestRunnerExtension currentExtension in extensions) { if (currentExtension.GetType() == extension.GetType() && currentExtension.Parameters == extension.Parameters) { throw new InvalidOperationException(string.Format("There is already an extension of type '{0}' registered with parameters '{1}'.", extension.GetType(), extension.Parameters)); } } extensions.Add(extension); }
/// <summary> /// Removes a test runner extension. /// </summary> /// <param name="extension">The test runner extension to remove.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="extension"/> is null.</exception> public void RemoveTestRunnerExtension(ITestRunnerExtension extension) { if (extension == null) { throw new ArgumentNullException("extension"); } testRunnerExtensions.Remove(extension); }
public void CreateTestRunnerExtension(string extensionSpecification, Type expectedExtensionType, string expectedParameters) { using (new CurrentDirectorySwitcher(RuntimeAccessor.RuntimePath)) { ITestRunnerExtension extension = TestRunnerExtensionUtils.CreateExtensionFromSpecification(extensionSpecification); Assert.IsNotNull(extension); Assert.IsInstanceOfType(expectedExtensionType, extension); Assert.AreEqual(expectedParameters, extension.Parameters); } }
/// <summary> /// Adds a test runner extension if not already added. /// </summary> /// <param name="extension">The test runner extension to add.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="extension"/> is null.</exception> public void AddTestRunnerExtension(ITestRunnerExtension extension) { if (extension == null) { throw new ArgumentNullException("extension"); } if (!testRunnerExtensions.Contains(extension)) { testRunnerExtensions.Add(extension); } }
/// <summary> /// Removes a test runner extension. /// </summary> /// <param name="extension">The test runner extension to remove.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="extension"/> is null.</exception> public void RemoveTestRunnerExtension(ITestRunnerExtension extension) { if (extension == null) throw new ArgumentNullException("extension"); testRunnerExtensions.Remove(extension); }
/// <summary> /// Adds a test runner extension if not already added. /// </summary> /// <param name="extension">The test runner extension to add.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="extension"/> is null.</exception> public void AddTestRunnerExtension(ITestRunnerExtension extension) { if (extension == null) throw new ArgumentNullException("extension"); if (!testRunnerExtensions.Contains(extension)) testRunnerExtensions.Add(extension); }
/// <inheritdoc /> public void RegisterExtension(ITestRunnerExtension extension) { if (extension == null) throw new ArgumentNullException("extension"); ThrowIfDisposed(); if (state != State.Created) throw new InvalidOperationException("Extensions cannot be registered after the test runner has been initialized."); foreach (ITestRunnerExtension currentExtension in extensions) { if (currentExtension.GetType() == extension.GetType() && currentExtension.Parameters == extension.Parameters) throw new InvalidOperationException(string.Format("There is already an extension of type '{0}' registered with parameters '{1}'.", extension.GetType(), extension.Parameters)); } extensions.Add(extension); }