#include "ui/accessibility/platform/ax_unique_id.h"
#include <array>
#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
namespace ui {
TEST(AXPlatformUniqueIdTest, IdsAreUnique) {
AXUniqueId id1 = AXUniqueId::Create();
AXUniqueId id2 = AXUniqueId::Create();
EXPECT_FALSE(id1 == id2);
EXPECT_GT(id2.Get(), id1.Get());
}
TEST(AXPlatformUniqueIdTest, IdsAreMovable) {
AXUniqueId id1 = AXUniqueId::Create();
auto id_value = id1.Get();
AXUniqueId id2 = std::move(id1);
EXPECT_EQ(id2.Get(), id_value);
AXUniqueId id3(std::move(id2));
EXPECT_EQ(id3.Get(), id_value);
}
namespace {
constexpr int32_t kMaxId = 100;
AXUniqueId CreateSmallBankUniqueId() {
return AXUniqueId::CreateForTest(kMaxId);
}
}
TEST(AXPlatformUniqueIdTest, UnassignedIdsAreReused) {
std::array<std::unique_ptr<AXUniqueId>, kMaxId> ids;
for (auto& id : ids) {
id = std::make_unique<AXUniqueId>(CreateSmallBankUniqueId());
}
static int kIdToReplace = 10;
int32_t expected_id = ids[kIdToReplace]->Get();
ids[kIdToReplace] = nullptr;
ids[kIdToReplace] = std::make_unique<AXUniqueId>(CreateSmallBankUniqueId());
EXPECT_EQ(ids[kIdToReplace]->Get(), expected_id);
}
TEST(AXPlatformUniqueIdTest, DoesCreateCorrectId) {
constexpr int kLargerThanMaxId = kMaxId * 2;
std::array<std::unique_ptr<AXUniqueId>, kLargerThanMaxId> ids;
for (int i = 0; i < kLargerThanMaxId; i++) {
ids[i] = std::make_unique<AXUniqueId>(AXUniqueId::Create());
}
for (int i = 0; i < kLargerThanMaxId; i++) {
ids[i].reset(nullptr);
}
std::unique_ptr<AXUniqueId> unique_id =
std::make_unique<AXUniqueId>(CreateSmallBankUniqueId());
EXPECT_LE(unique_id->Get(), kMaxId);
}
TEST(AXPlatformUniqueIdTest, DefaultPlatformNodeIdIsInvalid) {
AXPlatformNodeId default_id;
ASSERT_EQ(default_id, kInvalidAXNodeID);
}
}