1*28613242SJonas Devlieghere //===-- LuaTests.cpp ------------------------------------------------------===//
2*28613242SJonas Devlieghere //
3*28613242SJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*28613242SJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information.
5*28613242SJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*28613242SJonas Devlieghere //
7*28613242SJonas Devlieghere //===----------------------------------------------------------------------===//
8*28613242SJonas Devlieghere 
9*28613242SJonas Devlieghere #include "Plugins/Platform/Linux/PlatformLinux.h"
10*28613242SJonas Devlieghere #include "Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.h"
11*28613242SJonas Devlieghere #include "lldb/Core/Debugger.h"
12*28613242SJonas Devlieghere #include "lldb/Host/FileSystem.h"
13*28613242SJonas Devlieghere #include "lldb/Host/HostInfo.h"
14*28613242SJonas Devlieghere #include "lldb/Interpreter/CommandReturnObject.h"
15*28613242SJonas Devlieghere #include "lldb/Target/Platform.h"
16*28613242SJonas Devlieghere #include "lldb/Utility/Reproducer.h"
17*28613242SJonas Devlieghere #include "gtest/gtest.h"
18*28613242SJonas Devlieghere 
19*28613242SJonas Devlieghere using namespace lldb_private;
20*28613242SJonas Devlieghere using namespace lldb_private::repro;
21*28613242SJonas Devlieghere using namespace lldb;
22*28613242SJonas Devlieghere 
23*28613242SJonas Devlieghere namespace {
24*28613242SJonas Devlieghere class ScriptInterpreterTest : public ::testing::Test {
25*28613242SJonas Devlieghere public:
26*28613242SJonas Devlieghere   void SetUp() override {
27*28613242SJonas Devlieghere     llvm::cantFail(Reproducer::Initialize(ReproducerMode::Off, llvm::None));
28*28613242SJonas Devlieghere     FileSystem::Initialize();
29*28613242SJonas Devlieghere     HostInfo::Initialize();
30*28613242SJonas Devlieghere 
31*28613242SJonas Devlieghere     // Pretend Linux is the host platform.
32*28613242SJonas Devlieghere     platform_linux::PlatformLinux::Initialize();
33*28613242SJonas Devlieghere     ArchSpec arch("powerpc64-pc-linux");
34*28613242SJonas Devlieghere     Platform::SetHostPlatform(
35*28613242SJonas Devlieghere         platform_linux::PlatformLinux::CreateInstance(true, &arch));
36*28613242SJonas Devlieghere   }
37*28613242SJonas Devlieghere   void TearDown() override {
38*28613242SJonas Devlieghere     platform_linux::PlatformLinux::Terminate();
39*28613242SJonas Devlieghere     HostInfo::Terminate();
40*28613242SJonas Devlieghere     FileSystem::Terminate();
41*28613242SJonas Devlieghere     Reproducer::Terminate();
42*28613242SJonas Devlieghere   }
43*28613242SJonas Devlieghere };
44*28613242SJonas Devlieghere } // namespace
45*28613242SJonas Devlieghere 
46*28613242SJonas Devlieghere TEST_F(ScriptInterpreterTest, Plugin) {
47*28613242SJonas Devlieghere   EXPECT_EQ(ScriptInterpreterLua::GetPluginNameStatic(), "script-lua");
48*28613242SJonas Devlieghere   EXPECT_EQ(ScriptInterpreterLua::GetPluginDescriptionStatic(),
49*28613242SJonas Devlieghere             "Lua script interpreter");
50*28613242SJonas Devlieghere }
51*28613242SJonas Devlieghere 
52*28613242SJonas Devlieghere TEST_F(ScriptInterpreterTest, ExecuteOneLine) {
53*28613242SJonas Devlieghere   DebuggerSP debugger_sp = Debugger::CreateInstance();
54*28613242SJonas Devlieghere   ASSERT_TRUE(debugger_sp);
55*28613242SJonas Devlieghere 
56*28613242SJonas Devlieghere   ScriptInterpreterLua script_interpreter(*debugger_sp);
57*28613242SJonas Devlieghere   CommandReturnObject result;
58*28613242SJonas Devlieghere   EXPECT_TRUE(script_interpreter.ExecuteOneLine("foo = 1", &result));
59*28613242SJonas Devlieghere   EXPECT_FALSE(script_interpreter.ExecuteOneLine("nil = foo", &result));
60*28613242SJonas Devlieghere   EXPECT_TRUE(result.GetErrorData().startswith(
61*28613242SJonas Devlieghere       "error: lua failed attempting to evaluate 'nil = foo'"));
62*28613242SJonas Devlieghere }
63