xref: /llvm-project/llvm/unittests/TableGen/ParserEntryPointTest.cpp (revision 667815ccf49bc415544484f1b717bb7551cd9c93)
1e865fa75SRiver Riddle //===- unittest/TableGen/ParserEntryPointTest.cpp - Parser tests ----------===//
2e865fa75SRiver Riddle //
3e865fa75SRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e865fa75SRiver Riddle // See https://llvm.org/LICENSE.txt for license information.
5e865fa75SRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e865fa75SRiver Riddle //
7e865fa75SRiver Riddle //===----------------------------------------------------------------------===//
8e865fa75SRiver Riddle 
9e865fa75SRiver Riddle #include "llvm/ADT/ArrayRef.h"
10e865fa75SRiver Riddle #include "llvm/ADT/STLExtras.h"
11e865fa75SRiver Riddle #include "llvm/Support/MemoryBuffer.h"
125a9a438aSRiver Riddle #include "llvm/Support/SourceMgr.h"
13e865fa75SRiver Riddle #include "llvm/TableGen/Parser.h"
14e865fa75SRiver Riddle #include "llvm/TableGen/Record.h"
15e865fa75SRiver Riddle #include "gmock/gmock.h"
16e865fa75SRiver Riddle #include "gtest/gtest.h"
17e865fa75SRiver Riddle 
18e865fa75SRiver Riddle using namespace llvm;
19e865fa75SRiver Riddle 
20e865fa75SRiver Riddle TEST(Parser, SanityTest) {
21e865fa75SRiver Riddle   // Simple TableGen source file with a single record.
22e865fa75SRiver Riddle   const char *SimpleTdSource = R"td(
23e865fa75SRiver Riddle     def Foo {
24e865fa75SRiver Riddle       string strField = "value";
25e865fa75SRiver Riddle     }
26e865fa75SRiver Riddle   )td";
27e865fa75SRiver Riddle 
285a9a438aSRiver Riddle   SourceMgr SrcMgr;
295a9a438aSRiver Riddle   SrcMgr.AddNewSourceBuffer(
305a9a438aSRiver Riddle       MemoryBuffer::getMemBuffer(SimpleTdSource, "test_buffer"), SMLoc());
315a9a438aSRiver Riddle 
325a9a438aSRiver Riddle   RecordKeeper Records;
335a9a438aSRiver Riddle   bool ProcessResult = TableGenParseFile(SrcMgr, Records);
345a9a438aSRiver Riddle   EXPECT_FALSE(ProcessResult);
355a9a438aSRiver Riddle 
36*667815ccSRahul Joshi   const Record *Foo = Records.getDef("Foo");
373cfe412eSFangrui Song   std::optional<StringRef> Field = Foo->getValueAsOptionalString("strField");
383361a364SKazu Hirata   EXPECT_TRUE(Field.has_value());
3967ba5c50SFangrui Song   EXPECT_EQ(*Field, "value");
40e865fa75SRiver Riddle }
41