Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
     }
 }
Exemplo n.º 5
0
        /// <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);
            }
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <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);
        }