From 63e517161fd1ca3855c277edd92f0fafe51ca33b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emek=20Vysok=C3=BD?= Date: Thu, 30 Sep 2021 17:29:07 +0200 Subject: [PATCH] Add --adb switch for android state command (#724) --- .../AdbRunner.cs | 5 +++ .../AndroidGetStateCommandArguments.cs | 32 +++++++++++-------- .../Android/Arguments/ShowAdbPathArgument.cs | 13 ++++++++ .../Android/AndroidGetStateCommand.cs | 11 +++++-- src/Microsoft.DotNet.XHarness.CLI/Program.cs | 15 +++++++-- 5 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/Arguments/ShowAdbPathArgument.cs diff --git a/src/Microsoft.DotNet.XHarness.Android/AdbRunner.cs b/src/Microsoft.DotNet.XHarness.Android/AdbRunner.cs index 38be0ea15..4be49f248 100644 --- a/src/Microsoft.DotNet.XHarness.Android/AdbRunner.cs +++ b/src/Microsoft.DotNet.XHarness.Android/AdbRunner.cs @@ -35,6 +35,8 @@ public class AdbRunner public int APIVersion => _api ?? GetAPIVersion(); + public string AdbExePath => _absoluteAdbExePath; + public AdbRunner(ILogger log, string adbExePath = "") : this(log, new AdbProcessManager(log), adbExePath) { } public AdbRunner(ILogger log, IAdbProcessManager processManager, string adbExePath = "") @@ -51,17 +53,20 @@ public AdbRunner(ILogger log, IAdbProcessManager processManager, string adbExePa _log.LogDebug($"Using {AdbEnvironmentVariableName} environment variable ({environmentPath}) for ADB path."); adbExePath = environmentPath; } + if (string.IsNullOrEmpty(adbExePath)) { adbExePath = GetCliAdbExePath(); } _absoluteAdbExePath = Path.GetFullPath(Environment.ExpandEnvironmentVariables(adbExePath)); + if (!File.Exists(_absoluteAdbExePath)) { _log.LogError($"Unable to find adb.exe"); throw new FileNotFoundException($"Could not find adb.exe. Either set it in the environment via {AdbEnvironmentVariableName} or call with valid path (provided: '{adbExePath}')", adbExePath); } + if (!_absoluteAdbExePath.Equals(adbExePath)) { _log.LogDebug($"ADBRunner using ADB.exe supplied from {adbExePath}"); diff --git a/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/AndroidGetStateCommandArguments.cs b/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/AndroidGetStateCommandArguments.cs index 48bbc3d9f..ab812c7c6 100644 --- a/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/AndroidGetStateCommandArguments.cs +++ b/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/AndroidGetStateCommandArguments.cs @@ -1,14 +1,18 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Collections.Generic; -using System.Linq; - -namespace Microsoft.DotNet.XHarness.CLI.CommandArguments.Android -{ - internal class AndroidGetStateCommandArguments : XHarnessCommandArguments - { - protected override IEnumerable GetArguments() => Enumerable.Empty(); - } -} +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; + +namespace Microsoft.DotNet.XHarness.CLI.CommandArguments.Android +{ + internal class AndroidGetStateCommandArguments : XHarnessCommandArguments + { + public ShowAdbPathArgument ShowAdbPath { get; set; } = new(); + + protected override IEnumerable GetArguments() => new Argument[] + { + ShowAdbPath + }; + } +} diff --git a/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/Arguments/ShowAdbPathArgument.cs b/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/Arguments/ShowAdbPathArgument.cs new file mode 100644 index 000000000..9df7acbb7 --- /dev/null +++ b/src/Microsoft.DotNet.XHarness.CLI/CommandArguments/Android/Arguments/ShowAdbPathArgument.cs @@ -0,0 +1,13 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace Microsoft.DotNet.XHarness.CLI.CommandArguments.Android +{ + internal class ShowAdbPathArgument : SwitchArgument + { + public ShowAdbPathArgument() : base("adb|show-adb-path", "Prints ONLY path to the adb executable XHarness is using", false) + { + } + } +} diff --git a/src/Microsoft.DotNet.XHarness.CLI/Commands/Android/AndroidGetStateCommand.cs b/src/Microsoft.DotNet.XHarness.CLI/Commands/Android/AndroidGetStateCommand.cs index 88bc26979..a8c986278 100644 --- a/src/Microsoft.DotNet.XHarness.CLI/Commands/Android/AndroidGetStateCommand.cs +++ b/src/Microsoft.DotNet.XHarness.CLI/Commands/Android/AndroidGetStateCommand.cs @@ -24,11 +24,18 @@ internal class AndroidGetStateCommand : GetStateCommand InvokeInternal(ILogger logger) - { + { + var runner = new AdbRunner(logger); + + if (Arguments.ShowAdbPath) + { + Console.WriteLine(runner.AdbExePath); + return Task.FromResult(ExitCode.SUCCESS); + } + logger.LogInformation("Getting state of ADB and attached Android device(s)"); try { - var runner = new AdbRunner(logger); string state = runner.GetAdbState(); if (string.IsNullOrEmpty(state)) { diff --git a/src/Microsoft.DotNet.XHarness.CLI/Program.cs b/src/Microsoft.DotNet.XHarness.CLI/Program.cs index c0dc5270c..cb7dd0c66 100644 --- a/src/Microsoft.DotNet.XHarness.CLI/Program.cs +++ b/src/Microsoft.DotNet.XHarness.CLI/Program.cs @@ -98,10 +98,21 @@ private static bool IsOutputSensitive(string[] args) switch (args[0]) { - case "ios": case "apple": - case "android": return args[1] == "device"; + + case "android": + if (args[1] == "device") + { + return true; + } + + if (args[1] == "state" && args.Contains("--adb")) + { + return true; + } + + return false; } return false;