private bool RunTestAssembly(TestOptions options, string testTarget, IAssemblyLoaderContainer container, IServiceProvider services) { bool success = true; testTarget = Path.GetFullPath(testTarget); var applicationDir = Directory.Exists(testTarget) ? testTarget : Path.GetDirectoryName(testTarget); var applicationName = Directory.Exists(testTarget) ? Path.GetFileName(testTarget) : Path.GetFileNameWithoutExtension(testTarget); var hostOptions = new DefaultHostOptions { WatchFiles = false, PackageDirectory = options.PackageDirectory, TargetFramework = _environment.RuntimeFramework, Configuration = options.Configuration, ApplicationBaseDirectory = applicationDir, CompilationServerPort = options.CompilationServerPort }; using (var host = new DefaultHost(hostOptions, services)) using (host.AddLoaders(container)) { host.Initialize(); var libraryManager = (ILibraryManager)host.ServiceProvider.GetService(typeof(ILibraryManager)); var assemblies = libraryManager.GetLibraryInformation(applicationName).LoadableAssemblies.Select(Assembly.Load); foreach (var assembly in assemblies) { using (var framework = new Xunit2(new NullSourceInformationProvider(), assembly.GetName().Name)) { switch (options.RunKind) { case RunKind.List: DiscoverTests(options, framework, services); break; default: success = RunTests(options, framework, services) && success; break; } } } } return(success); }
private bool ParseArgs(string[] args, out DefaultHostOptions defaultHostOptions, out string[] outArgs, out int exitCode) { var app = new CommandLineApplication(throwOnUnexpectedArg: false); app.Name = "Microsoft.Framework.ApplicationHost"; app.FullName = app.Name; var optionWatch = app.Option("--watch", "Watch file changes", CommandOptionType.NoValue); var optionPackages = app.Option("--packages <PACKAGE_DIR>", "Directory containing packages", CommandOptionType.SingleValue); var optionConfiguration = app.Option("--configuration <CONFIGURATION>", "The configuration to run under", CommandOptionType.SingleValue); var optionCompilationServer = app.Option("--port <PORT>", "The port to the compilation server", CommandOptionType.SingleValue); var runCmdExecuted = false; app.HelpOption("-?|-h|--help"); var env = (IRuntimeEnvironment)_serviceProvider.GetService(typeof(IRuntimeEnvironment)); app.VersionOption("--version", () => env.GetShortVersion(), () => env.GetFullVersion()); var runCmd = app.Command("run", c => { // We don't actually execute "run" command here // We are adding this command for the purpose of displaying correct help information c.Description = "Run application"; c.OnExecute(() => { runCmdExecuted = true; return(0); }); }, throwOnUnexpectedArg: false); app.Execute(args); defaultHostOptions = null; outArgs = null; exitCode = 0; if (app.IsShowingInformation) { // If help option or version option was specified, exit immediately with 0 exit code return(true); } else if (!(app.RemainingArguments.Any() || runCmdExecuted)) { // If no subcommand was specified, show error message // and exit immediately with non-zero exit code Console.WriteLine("Please specify the command to run"); exitCode = 2; return(true); } defaultHostOptions = new DefaultHostOptions(); defaultHostOptions.WatchFiles = optionWatch.HasValue(); defaultHostOptions.PackageDirectory = optionPackages.Value(); defaultHostOptions.TargetFramework = _environment.RuntimeFramework; defaultHostOptions.Configuration = optionConfiguration.Value() ?? _environment.Configuration ?? "Debug"; defaultHostOptions.ApplicationBaseDirectory = _environment.ApplicationBasePath; var portValue = optionCompilationServer.Value() ?? Environment.GetEnvironmentVariable(EnvironmentNames.CompilationServerPort); int port; if (!string.IsNullOrEmpty(portValue) && int.TryParse(portValue, out port)) { defaultHostOptions.CompilationServerPort = port; } var remainingArgs = new List <string>(); if (runCmdExecuted) { // Later logic will execute "run" command // So we put this argment back after it was consumed by parser remainingArgs.Add("run"); remainingArgs.AddRange(runCmd.RemainingArguments); } else { remainingArgs.AddRange(app.RemainingArguments); } if (remainingArgs.Any()) { defaultHostOptions.ApplicationName = remainingArgs[0]; outArgs = remainingArgs.Skip(1).ToArray(); } else { outArgs = remainingArgs.ToArray(); } return(false); }
private bool ParseArgs(string[] args, out DefaultHostOptions defaultHostOptions, out string[] outArgs) { var app = new CommandLineApplication(throwOnUnexpectedArg: false); app.Name = "k"; var optionWatch = app.Option("--watch", "Watch file changes", CommandOptionType.NoValue); var optionPackages = app.Option("--packages <PACKAGE_DIR>", "Directory containing packages", CommandOptionType.SingleValue); var optionConfiguration = app.Option("--configuration <CONFIGURATION>", "The configuration to run under", CommandOptionType.SingleValue); var runCmdExecuted = false; app.HelpOption("-?|-h|--help"); app.VersionOption("--version", GetVersion()); var runCmd = app.Command("run", c => { // We don't actually execute "run" command here // We are adding this command for the purpose of displaying correct help information c.Description = "Run application"; c.OnExecute(() => { runCmdExecuted = true; return(0); }); }, addHelpCommand: false, throwOnUnexpectedArg: false); app.Execute(args); if (!(app.IsShowingInformation || app.RemainingArguments.Any() || runCmdExecuted)) { app.ShowHelp(commandName: null); } defaultHostOptions = new DefaultHostOptions(); defaultHostOptions.WatchFiles = optionWatch.HasValue(); defaultHostOptions.PackageDirectory = optionPackages.Value(); defaultHostOptions.TargetFramework = _environment.TargetFramework; defaultHostOptions.Configuration = optionConfiguration.Value() ?? _environment.Configuration ?? "Debug"; defaultHostOptions.ApplicationBaseDirectory = _environment.ApplicationBasePath; var remainingArgs = new List <string>(); if (runCmdExecuted) { // Later logic will execute "run" command // So we put this argment back after it was consumed by parser remainingArgs.Add("run"); remainingArgs.AddRange(runCmd.RemainingArguments); } else { remainingArgs.AddRange(app.RemainingArguments); } if (remainingArgs.Any()) { defaultHostOptions.ApplicationName = remainingArgs[0]; outArgs = remainingArgs.Skip(1).ToArray(); } else { outArgs = remainingArgs.ToArray(); } return(app.IsShowingInformation); }