private IExecutionStrategy CreateExecutionStrategy(ExecutionStrategyType type) { IExecutionStrategy executionStrategy; switch (type) { case ExecutionStrategyType.CompileExecuteAndCheck: executionStrategy = new CompileExecuteAndCheckExecutionStrategy(GetCompilerPath); break; case ExecutionStrategyType.CSharpTestRunner: executionStrategy = new CSharpTestRunnerExecutionStrategy(GetCompilerPath); break; case ExecutionStrategyType.CSharpUnitTestsExecutionStrategy: executionStrategy = new CSharpUnitTestsRunnerExecutionStrategy(Settings.NUnitConsoleRunnerPath); break; case ExecutionStrategyType.CSharpProjectTestsExecutionStrategy: executionStrategy = new CSharpProjectTestsExecutionStrategy(Settings.NUnitConsoleRunnerPath); break; case ExecutionStrategyType.JavaPreprocessCompileExecuteAndCheck: executionStrategy = new JavaPreprocessCompileExecuteAndCheckExecutionStrategy( Settings.JavaExecutablePath, GetCompilerPath); break; case ExecutionStrategyType.JavaZipFileCompileExecuteAndCheck: executionStrategy = new JavaZipFileCompileExecuteAndCheckExecutionStrategy( Settings.JavaExecutablePath, GetCompilerPath); break; case ExecutionStrategyType.JavaProjectTestsExecutionStrategy: executionStrategy = new JavaProjectTestsExecutionStrategy( Settings.JavaExecutablePath, GetCompilerPath, Settings.JavaLibsPath); break; case ExecutionStrategyType.NodeJsPreprocessExecuteAndCheck: executionStrategy = new NodeJsPreprocessExecuteAndCheckExecutionStrategy( Settings.NodeJsExecutablePath, Settings.UnderscoreModulePath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.NodeJsPreprocessExecuteAndRunUnitTestsWithMocha: executionStrategy = new NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy( Settings.NodeJsExecutablePath, Settings.MochaModulePath, Settings.ChaiModulePath, Settings.UnderscoreModulePath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.NodeJsZipPreprocessExecuteAndRunUnitTestsWithDomAndMocha: executionStrategy = new NodeJsZipPreprocessExecuteAndRunUnitTestsWithDomAndMochaExecutionStrategy( Settings.NodeJsExecutablePath, Settings.MochaModulePath, Settings.ChaiModulePath, Settings.JsDomModulePath, Settings.JQueryModulePath, Settings.HandlebarsModulePath, Settings.SinonModulePath, Settings.SinonChaiModulePath, Settings.UnderscoreModulePath, Settings.BrowserifyModulePath, Settings.BabelifyModulePath, Settings.Es2015ImportPluginPath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.NodeJsPreprocessExecuteAndRunJsDomUnitTests: executionStrategy = new NodeJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy( Settings.NodeJsExecutablePath, Settings.MochaModulePath, Settings.ChaiModulePath, Settings.JsDomModulePath, Settings.JQueryModulePath, Settings.HandlebarsModulePath, Settings.SinonModulePath, Settings.SinonChaiModulePath, Settings.UnderscoreModulePath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.NodeJsPreprocessExecuteAndRunCodeAgainstUnitTestsWithMochaExecutionStrategy: executionStrategy = new NodeJsPreprocessExecuteAndRunCodeAgainstUnitTestsWithMochaExecutionStrategy( Settings.NodeJsExecutablePath, Settings.MochaModulePath, Settings.ChaiModulePath, Settings.JsDomModulePath, Settings.JQueryModulePath, Settings.HandlebarsModulePath, Settings.SinonModulePath, Settings.SinonChaiModulePath, Settings.UnderscoreModulePath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.NodeJsExecuteAndRunAsyncJsDomTestsWithReactExecutionStrategy: executionStrategy = new NodeJsExecuteAndRunAsyncJsDomTestsWithReactExecutionStrategy( Settings.NodeJsExecutablePath, Settings.MochaModulePath, Settings.ChaiModulePath, Settings.JsDomModulePath, Settings.JQueryModulePath, Settings.HandlebarsModulePath, Settings.SinonJsDomModulePath, Settings.SinonModulePath, Settings.SinonChaiModulePath, Settings.UnderscoreModulePath, Settings.BabelCoreModulePath, Settings.ReactJsxPluginPath, Settings.ReactModulePath, Settings.ReactDomModulePath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.NodeJsZipExecuteHtmlAndCssStrategy: executionStrategy = new NodeJsZipExecuteHtmlAndCssStrategy( Settings.NodeJsExecutablePath, Settings.MochaModulePath, Settings.ChaiModulePath, Settings.JsDomModulePath, Settings.JQueryModulePath, Settings.UnderscoreModulePath, Settings.BootstrapModulePath, Settings.BootstrapCssPath, Settings.NodeJsBaseTimeUsedInMilliseconds, Settings.NodeJsBaseMemoryUsedInBytes); break; case ExecutionStrategyType.PythonExecuteAndCheck: executionStrategy = new PythonExecuteAndCheckExecutionStrategy(Settings.PythonExecutablePath); break; case ExecutionStrategyType.PhpCgiExecuteAndCheck: executionStrategy = new PhpCgiExecuteAndCheckExecutionStrategy(Settings.PhpCgiExecutablePath); break; case ExecutionStrategyType.PhpCliExecuteAndCheck: executionStrategy = new PhpCliExecuteAndCheckExecutionStrategy(Settings.PhpCliExecutablePath); break; case ExecutionStrategyType.SqlServerLocalDbPrepareDatabaseAndRunQueries: executionStrategy = new SqlServerLocalDbPrepareDatabaseAndRunQueriesExecutionStrategy( Settings.SqlServerLocalDbMasterDbConnectionString, Settings.SqlServerLocalDbRestrictedUserId, Settings.SqlServerLocalDbRestrictedUserPassword); break; case ExecutionStrategyType.SqlServerLocalDbRunQueriesAndCheckDatabase: executionStrategy = new SqlServerLocalDbRunQueriesAndCheckDatabaseExecutionStrategy( Settings.SqlServerLocalDbMasterDbConnectionString, Settings.SqlServerLocalDbRestrictedUserId, Settings.SqlServerLocalDbRestrictedUserPassword); break; case ExecutionStrategyType.SqlServerLocalDbRunSkeletonRunQueriesAndCheckDatabase: executionStrategy = new SqlServerLocalDbRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy( Settings.SqlServerLocalDbMasterDbConnectionString, Settings.SqlServerLocalDbRestrictedUserId, Settings.SqlServerLocalDbRestrictedUserPassword); break; case ExecutionStrategyType.MySqlPrepareDatabaseAndRunQueries: executionStrategy = new MySqlPrepareDatabaseAndRunQueriesExecutionStrategy( Settings.MySqlSysDbConnectionString, Settings.MySqlRestrictedUserId, Settings.MySqlRestrictedUserPassword); break; case ExecutionStrategyType.MySqlRunQueriesAndCheckDatabase: executionStrategy = new MySqlRunQueriesAndCheckDatabaseExecutionStrategy( Settings.MySqlSysDbConnectionString, Settings.MySqlRestrictedUserId, Settings.MySqlRestrictedUserPassword); break; case ExecutionStrategyType.MySqlRunSkeletonRunQueriesAndCheckDatabase: executionStrategy = new MySqlRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy( Settings.MySqlSysDbConnectionString, Settings.MySqlRestrictedUserId, Settings.MySqlRestrictedUserPassword); break; case ExecutionStrategyType.DoNothing: executionStrategy = new DoNothingExecutionStrategy(); break; case ExecutionStrategyType.RemoteExecution: executionStrategy = new RemoteExecutionStrategy(); break; case ExecutionStrategyType.CheckOnly: executionStrategy = new CheckOnlyExecutionStrategy(); break; default: throw new ArgumentOutOfRangeException(); } return(executionStrategy); }