teak-llvm/lldb/unittests/Utility/UUIDTest.cpp
Jim Ingham f3ecbfc164 Add UUID::SetFromOptionalStringRef, use it in DynamicLoaderDarwin
We use UUID::fromOptionalData to read UUID's from the Mach-O files, so UUID's
of all 0's are invalid UUID's.
We also get uuid's from debugserver, which need to match the file UUID's.  So
we need an API that treats "000000000" as invalid as well.  Added that and use it.

Differential Revision: https://reviews.llvm.org/D57195

llvm-svn: 352122
2019-01-24 22:43:44 +00:00

91 lines
3.0 KiB
C++

//===-- UUIDTest.cpp --------------------------------------------*- C++ -*-===//
//
// 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 "lldb/Utility/UUID.h"
using namespace lldb_private;
TEST(UUIDTest, RelationalOperators) {
UUID empty;
UUID a16 = UUID::fromData("1234567890123456", 16);
UUID b16 = UUID::fromData("1234567890123457", 16);
UUID a20 = UUID::fromData("12345678901234567890", 20);
UUID b20 = UUID::fromData("12345678900987654321", 20);
EXPECT_EQ(empty, empty);
EXPECT_EQ(a16, a16);
EXPECT_EQ(a20, a20);
EXPECT_NE(a16, b16);
EXPECT_NE(a20, b20);
EXPECT_NE(a16, a20);
EXPECT_NE(empty, a16);
EXPECT_LT(empty, a16);
EXPECT_LT(a16, a20);
EXPECT_LT(a16, b16);
EXPECT_GT(a20, b20);
}
TEST(UUIDTest, Validity) {
UUID empty;
std::vector<uint8_t> zeroes(20, 0);
UUID a16 = UUID::fromData(zeroes.data(), 16);
UUID a20 = UUID::fromData(zeroes.data(), 20);
UUID a16_0 = UUID::fromOptionalData(zeroes.data(), 16);
UUID a20_0 = UUID::fromOptionalData(zeroes.data(), 20);
UUID from_str;
from_str.SetFromStringRef("00000000-0000-0000-0000-000000000000");
UUID opt_from_str;
opt_from_str.SetFromOptionalStringRef("00000000-0000-0000-0000-000000000000");
EXPECT_FALSE(empty);
EXPECT_TRUE(a16);
EXPECT_TRUE(a20);
EXPECT_TRUE(from_str);
EXPECT_FALSE(a16_0);
EXPECT_FALSE(a20_0);
EXPECT_FALSE(opt_from_str);
}
TEST(UUIDTest, SetFromStringRef) {
UUID u;
EXPECT_EQ(32u, u.SetFromStringRef("404142434445464748494a4b4c4d4e4f"));
EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16), u);
EXPECT_EQ(36u, u.SetFromStringRef("40-41-42-43-4445464748494a4b4c4d4e4f"));
EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16), u);
EXPECT_EQ(45u, u.SetFromStringRef(
"40-41-42-43-4445464748494a4b4c4d4e4f-50515253", 20));
EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20), u);
EXPECT_EQ(0u, u.SetFromStringRef("40-41-42-43-4445464748494a4b4c4d4e4f", 20));
EXPECT_EQ(0u, u.SetFromStringRef("40xxxxx"));
EXPECT_EQ(0u, u.SetFromStringRef(""));
EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20), u)
<< "uuid was changed by failed parse calls";
EXPECT_EQ(
32u, u.SetFromStringRef("404142434445464748494a4b4c4d4e4f-50515253", 16));
EXPECT_EQ(UUID::fromData("@ABCDEFGHIJKLMNO", 16), u);
}
TEST(UUIDTest, StringConverion) {
EXPECT_EQ("40414243", UUID::fromData("@ABC", 4).GetAsString());
EXPECT_EQ("40414243-4445-4647", UUID::fromData("@ABCDEFG", 8).GetAsString());
EXPECT_EQ("40414243-4445-4647-4849-4A4B",
UUID::fromData("@ABCDEFGHIJK", 12).GetAsString());
EXPECT_EQ("40414243-4445-4647-4849-4A4B4C4D4E4F",
UUID::fromData("@ABCDEFGHIJKLMNO", 16).GetAsString());
EXPECT_EQ("40414243-4445-4647-4849-4A4B4C4D4E4F-50515253",
UUID::fromData("@ABCDEFGHIJKLMNOPQRS", 20).GetAsString());
}