forked from OSchip/llvm-project
127 lines
4.2 KiB
C++
127 lines
4.2 KiB
C++
//===-- ReproducerTest.cpp --------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "gmock/gmock.h"
|
|
#include "gtest/gtest.h"
|
|
|
|
#include "llvm/Support/Error.h"
|
|
#include "llvm/Testing/Support/Error.h"
|
|
|
|
#include "lldb/Utility/FileSpec.h"
|
|
#include "lldb/Utility/Reproducer.h"
|
|
|
|
using namespace llvm;
|
|
using namespace lldb_private;
|
|
using namespace lldb_private::repro;
|
|
|
|
class DummyProvider : public repro::Provider<DummyProvider> {
|
|
public:
|
|
static constexpr const char *NAME = "dummy";
|
|
|
|
DummyProvider(const FileSpec &directory) : Provider(directory) {
|
|
m_info.name = "dummy";
|
|
m_info.files.push_back("dummy.yaml");
|
|
}
|
|
|
|
static char ID;
|
|
};
|
|
|
|
char DummyProvider::ID = 0;
|
|
|
|
TEST(ReproducerTest, SetCapture) {
|
|
Reproducer reproducer;
|
|
|
|
// Initially both generator and loader are unset.
|
|
EXPECT_EQ(nullptr, reproducer.GetGenerator());
|
|
EXPECT_EQ(nullptr, reproducer.GetLoader());
|
|
|
|
// Enable capture and check that means we have a generator.
|
|
EXPECT_THAT_ERROR(reproducer.SetCapture(FileSpec("/bogus/path")),
|
|
Succeeded());
|
|
EXPECT_NE(nullptr, reproducer.GetGenerator());
|
|
EXPECT_EQ(FileSpec("/bogus/path"), reproducer.GetGenerator()->GetRoot());
|
|
EXPECT_EQ(FileSpec("/bogus/path"), reproducer.GetReproducerPath());
|
|
|
|
// Ensure that we cannot enable replay.
|
|
EXPECT_THAT_ERROR(reproducer.SetReplay(FileSpec("/bogus/path")), Failed());
|
|
EXPECT_EQ(nullptr, reproducer.GetLoader());
|
|
|
|
// Ensure we can disable the generator again.
|
|
EXPECT_THAT_ERROR(reproducer.SetCapture(llvm::None), Succeeded());
|
|
EXPECT_EQ(nullptr, reproducer.GetGenerator());
|
|
EXPECT_EQ(nullptr, reproducer.GetLoader());
|
|
}
|
|
|
|
TEST(ReproducerTest, SetReplay) {
|
|
Reproducer reproducer;
|
|
|
|
// Initially both generator and loader are unset.
|
|
EXPECT_EQ(nullptr, reproducer.GetGenerator());
|
|
EXPECT_EQ(nullptr, reproducer.GetLoader());
|
|
|
|
// Expected to fail because we can't load the index.
|
|
EXPECT_THAT_ERROR(reproducer.SetReplay(FileSpec("/bogus/path")), Failed());
|
|
// However the loader should still be set, which we check here.
|
|
EXPECT_NE(nullptr, reproducer.GetLoader());
|
|
|
|
// Make sure the bogus path is correctly set.
|
|
EXPECT_EQ(FileSpec("/bogus/path"), reproducer.GetLoader()->GetRoot());
|
|
EXPECT_EQ(FileSpec("/bogus/path"), reproducer.GetReproducerPath());
|
|
|
|
// Ensure that we cannot enable replay.
|
|
EXPECT_THAT_ERROR(reproducer.SetCapture(FileSpec("/bogus/path")), Failed());
|
|
EXPECT_EQ(nullptr, reproducer.GetGenerator());
|
|
}
|
|
|
|
TEST(GeneratorTest, Create) {
|
|
Reproducer reproducer;
|
|
|
|
EXPECT_THAT_ERROR(reproducer.SetCapture(FileSpec("/bogus/path")),
|
|
Succeeded());
|
|
auto &generator = *reproducer.GetGenerator();
|
|
|
|
auto *provider = generator.Create<DummyProvider>();
|
|
EXPECT_NE(nullptr, provider);
|
|
EXPECT_EQ(FileSpec("/bogus/path"), provider->GetRoot());
|
|
EXPECT_EQ(std::string("dummy"), provider->GetInfo().name);
|
|
EXPECT_EQ((size_t)1, provider->GetInfo().files.size());
|
|
EXPECT_EQ(std::string("dummy.yaml"), provider->GetInfo().files.front());
|
|
}
|
|
|
|
TEST(GeneratorTest, Get) {
|
|
Reproducer reproducer;
|
|
|
|
EXPECT_THAT_ERROR(reproducer.SetCapture(FileSpec("/bogus/path")),
|
|
Succeeded());
|
|
auto &generator = *reproducer.GetGenerator();
|
|
|
|
auto *provider = generator.Create<DummyProvider>();
|
|
EXPECT_NE(nullptr, provider);
|
|
|
|
auto *provider_alt = generator.Get<DummyProvider>();
|
|
EXPECT_EQ(provider, provider_alt);
|
|
}
|
|
|
|
TEST(GeneratorTest, GetOrCreate) {
|
|
Reproducer reproducer;
|
|
|
|
EXPECT_THAT_ERROR(reproducer.SetCapture(FileSpec("/bogus/path")),
|
|
Succeeded());
|
|
auto &generator = *reproducer.GetGenerator();
|
|
|
|
auto &provider = generator.GetOrCreate<DummyProvider>();
|
|
EXPECT_EQ(FileSpec("/bogus/path"), provider.GetRoot());
|
|
EXPECT_EQ(std::string("dummy"), provider.GetInfo().name);
|
|
EXPECT_EQ((size_t)1, provider.GetInfo().files.size());
|
|
EXPECT_EQ(std::string("dummy.yaml"), provider.GetInfo().files.front());
|
|
|
|
auto &provider_alt = generator.GetOrCreate<DummyProvider>();
|
|
EXPECT_EQ(&provider, &provider_alt);
|
|
}
|