/// <summary>
        /// Based on the provided file name, returns a suitable IBoostTestRunner
        /// instance or null if none are available.
        /// </summary>
        /// <param name="identifier">The identifier which is to be executed via the IBoostTestRunner.</param>
        /// <param name="options">test runner settings</param>
        /// <returns>A suitable IBoostTestRunner instance or null if none are available.</returns>
        public IBoostTestRunner GetRunner(string identifier, BoostTestRunnerFactoryOptions options)
        {
            IBoostTestRunner runner = null;

            if ((options != null) && (options.ExternalTestRunnerSettings != null))
            {
                // Provision an external test runner
                runner = GetExternalTestRunner(identifier, options.ExternalTestRunnerSettings);
            }

            // Provision a default internal runner
            if (runner == null)
            {
                runner = GetInternalTestRunner(identifier);
            }

            if (runner != null)
            {
                // Apply specific Boost 1.62 workaround
                if (GetBoost162Workaround(options))
                {
                    runner = new BoostTest162Runner(runner);
                }

                // Force the use of a specific Boost.Test runner implementation
                Version version = GetBoostTestVersion(identifier, options);

                if (version != null)
                {
                    // Assume runner capabilities based on provided version
                    var capabilities = new BoostTestRunnerCapabilities
                    {
                        ListContent = (version >= Boost159),
                        Version     = (version >= Boost163)
                    };

                    runner = new BoostTestRunnerCapabilityOverride(runner, capabilities);
                }
            }

            return(runner);
        }
        /// <summary>
        /// Based on the provided file name, returns a suitable IBoostTestRunner
        /// instance or null if none are available.
        /// </summary>
        /// <param name="identifier">The identifier which is to be executed via the IBoostTestRunner.</param>
        /// <param name="options">test runner settings</param>
        /// <returns>A suitable IBoostTestRunner instance or null if none are available.</returns>
        public IBoostTestRunner GetRunner(string identifier, BoostTestRunnerFactoryOptions options)
        {
            IBoostTestRunner runner = null;

            if ((options != null) && (options.ExternalTestRunnerSettings != null))
            {
                // Provision an external test runner
                runner = GetExternalTestRunner(identifier, options.ExternalTestRunnerSettings);
            }

            // Provision a default internal runner
            if (runner == null)
            {
                runner = GetInternalTestRunner(identifier);
            }

            // Apply Boost 1.62 workaround
            if ((runner != null) && (options != null) && (options.UseBoost162Workaround))
            {
                runner = new BoostTest162Runner(runner);
            }

            return runner;
        }
        /// <summary>
        /// Based on the provided file name, returns a suitable IBoostTestRunner
        /// instance or null if none are available.
        /// </summary>
        /// <param name="identifier">The identifier which is to be executed via the IBoostTestRunner.</param>
        /// <param name="options">test runner settings</param>
        /// <returns>A suitable IBoostTestRunner instance or null if none are available.</returns>
        public IBoostTestRunner GetRunner(string identifier, BoostTestRunnerFactoryOptions options)
        {
            IBoostTestRunner runner = null;

            if ((options != null) && (options.ExternalTestRunnerSettings != null))
            {
                // Provision an external test runner
                runner = GetExternalTestRunner(identifier, options.ExternalTestRunnerSettings);
            }

            // Provision a default internal runner
            if (runner == null)
            {
                runner = GetInternalTestRunner(identifier);
            }

            // Apply Boost 1.62 workaround
            if ((runner != null) && (options != null) && (options.UseBoost162Workaround))
            {
                runner = new BoostTest162Runner(runner);
            }

            return(runner);
        }