Files
clang-p2996/llvm/unittests/TableGen/ParserEntryPointTest.cpp
River Riddle 5a9a438a54 [TableGen] Refactor TableGenParseFile to no longer use a callback
Now that TableGen no longer relies on global Record state, we can allow
for the client to own the RecordKeeper and SourceMgr. Given that TableGen
internally still relies on the global llvm::SrcMgr, this method unfortunately
still isn't thread-safe.

Differential Revision: https://reviews.llvm.org/D125277
2022-05-11 11:55:33 -07:00

41 lines
1.2 KiB
C++

//===- unittest/TableGen/ParserEntryPointTest.cpp - Parser tests ----------===//
//
// 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 "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/TableGen/Parser.h"
#include "llvm/TableGen/Record.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
using namespace llvm;
TEST(Parser, SanityTest) {
// Simple TableGen source file with a single record.
const char *SimpleTdSource = R"td(
def Foo {
string strField = "value";
}
)td";
SourceMgr SrcMgr;
SrcMgr.AddNewSourceBuffer(
MemoryBuffer::getMemBuffer(SimpleTdSource, "test_buffer"), SMLoc());
RecordKeeper Records;
bool ProcessResult = TableGenParseFile(SrcMgr, Records);
EXPECT_FALSE(ProcessResult);
Record *Foo = Records.getDef("Foo");
Optional<StringRef> Field = Foo->getValueAsOptionalString("strField");
EXPECT_TRUE(Field.hasValue());
EXPECT_EQ(Field.getValue(), "value");
}