diff --git a/lldb/source/Plugins/Platform/Android/AdbClient.cpp b/lldb/source/Plugins/Platform/Android/AdbClient.cpp --- a/lldb/source/Plugins/Platform/Android/AdbClient.cpp +++ b/lldb/source/Plugins/Platform/Android/AdbClient.cpp @@ -94,11 +94,7 @@ Status AdbClient::CreateByDeviceID(const std::string &device_id, AdbClient &adb) { - DeviceIDList connect_devices; - auto error = adb.GetDevices(connect_devices); - if (error.Fail()) - return error; - + Status error; std::string android_serial; if (!device_id.empty()) android_serial = device_id; @@ -106,18 +102,18 @@ android_serial = env_serial; if (android_serial.empty()) { - if (connect_devices.size() != 1) + DeviceIDList connected_devices; + error = adb.GetDevices(connected_devices); + if (error.Fail()) + return error; + + if (connected_devices.size() != 1) return Status("Expected a single connected device, got instead %zu - try " "setting 'ANDROID_SERIAL'", - connect_devices.size()); - adb.SetDeviceID(connect_devices.front()); + connected_devices.size()); + adb.SetDeviceID(connected_devices.front()); } else { - auto find_it = std::find(connect_devices.begin(), connect_devices.end(), - android_serial); - if (find_it == connect_devices.end()) - return Status("Device \"%s\" not found", android_serial.c_str()); - - adb.SetDeviceID(*find_it); + adb.SetDeviceID(android_serial); } return error; } diff --git a/lldb/unittests/Platform/Android/AdbClientTest.cpp b/lldb/unittests/Platform/Android/AdbClientTest.cpp new file mode 100644 --- /dev/null +++ b/lldb/unittests/Platform/Android/AdbClientTest.cpp @@ -0,0 +1,51 @@ +//===-- AdbClientTest.cpp -------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "gtest/gtest.h" +#include "Plugins/Platform/Android/AdbClient.h" +#include + +static void set_env(const char *var, const char *value) { +#ifdef _WIN32 + _putenv_s(var, value); +#else + setenv(var, value, true); +#endif +} + +using namespace lldb; +using namespace lldb_private; + +namespace lldb_private { +namespace platform_android { + +class AdbClientTest : public ::testing::Test { +public: + void SetUp() override { set_env("ANDROID_SERIAL", ""); } + + void TearDown() override { set_env("ANDROID_SERIAL", ""); } +}; + +TEST(AdbClientTest, CreateByDeviceId) { + AdbClient adb; + Status error = AdbClient::CreateByDeviceID("device1", adb); + EXPECT_TRUE(error.Success()); + EXPECT_EQ("device1", adb.GetDeviceID()); +} + +TEST(AdbClientTest, CreateByDeviceId_ByEnvVar) { + set_env("ANDROID_SERIAL", "device2"); + + AdbClient adb; + Status error = AdbClient::CreateByDeviceID("", adb); + EXPECT_TRUE(error.Success()); + EXPECT_EQ("device2", adb.GetDeviceID()); +} + +} // end namespace platform_android +} // end namespace lldb_private diff --git a/lldb/unittests/Platform/Android/CMakeLists.txt b/lldb/unittests/Platform/Android/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/lldb/unittests/Platform/Android/CMakeLists.txt @@ -0,0 +1,8 @@ +include_directories(${LLDB_SOURCE_DIR}/source/Plugins/Platform/Android) + +add_lldb_unittest(AdbClientTest + AdbClientTest.cpp + + LINK_LIBS + lldbPluginPlatformAndroid + ) diff --git a/lldb/unittests/Platform/CMakeLists.txt b/lldb/unittests/Platform/CMakeLists.txt --- a/lldb/unittests/Platform/CMakeLists.txt +++ b/lldb/unittests/Platform/CMakeLists.txt @@ -6,3 +6,5 @@ LINK_COMPONENTS Support ) + +add_subdirectory(Android)