brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · ceb567c Raw
130 lines · cpp
1//===-- ExpressionTest.cpp ------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "gmock/gmock.h"10#include "gtest/gtest.h"11 12#include "TestingSupport/TestUtilities.h"13#include "lldb/Expression/Expression.h"14#include "llvm/Testing/Support/Error.h"15 16using namespace lldb_private;17 18struct LabelTestCase {19  llvm::StringRef encoded;20  FunctionCallLabel label;21  llvm::SmallVector<llvm::StringRef> error_pattern;22};23 24static LabelTestCase g_label_test_cases[] = {25    // Failure modes26    {"bar:blah:0x0:0x0:_Z3foov",27     {},28     {"expected function call label prefix '$__lldb_func' but found 'bar' "29      "instead."}},30    {"$__lldb_func :blah:0x0:0x0:_Z3foov",31     {},32     {"expected function call label prefix '$__lldb_func' but found "33      "'$__lldb_func ' instead."}},34    {"$__lldb_funcc:blah:0x0:0x0:_Z3foov",35     {},36     {"expected function call label prefix '$__lldb_func' but found "37      "'$__lldb_funcc' instead."}},38    {"", {}, {"malformed function call label."}},39    {"foo", {}, {"malformed function call label."}},40    {"$__lldb_func", {}, {"malformed function call label."}},41    {"$__lldb_func:", {}, {"malformed function call label."}},42    {"$__lldb_func:blah", {}, {"malformed function call label."}},43    {"$__lldb_func:blah:0x0", {}, {"malformed function call label."}},44    {"$__lldb_func:111:0x0:0x0", {}, {"malformed function call label."}},45    {"$__lldb_func:111:abc:0x0:_Z3foov",46     {},47     {"failed to parse module ID from 'abc'."}},48    {"$__lldb_func:111:-1:0x0:_Z3foov",49     {},50     {"failed to parse module ID from '-1'."}},51    {"$__lldb_func:111:0x0invalid:0x0:_Z3foov",52     {},53     {"failed to parse module ID from '0x0invalid'."}},54    {"$__lldb_func:111:0x0 :0x0:_Z3foov",55     {},56     {"failed to parse module ID from '0x0 '."}},57    {"$__lldb_func:blah:0x0:abc:_Z3foov",58     {},59     {"failed to parse symbol ID from 'abc'."}},60    {"$__lldb_func:blah:0x5:-1:_Z3foov",61     {},62     {"failed to parse symbol ID from '-1'."}},63    {"$__lldb_func:blah:0x5:0x0invalid:_Z3foov",64     {},65     {"failed to parse symbol ID from '0x0invalid'."}},66    {"$__lldb_func:blah:0x5:0x0 :_Z3foov",67     {},68     {"failed to parse symbol ID from '0x0 '."}},69    {"$__lldb_func:blah:0x0:0x0:_Z3foov",70     {71         /*.discriminator=*/"blah",72         /*.module_id=*/0x0,73         /*.symbol_id=*/0x0,74         /*.lookup_name=*/"_Z3foov",75     },76     {}},77    {"$__lldb_func::0x0:0x0:abc:def:::a",78     {79         /*.discriminator=*/"",80         /*.module_id=*/0x0,81         /*.symbol_id=*/0x0,82         /*.lookup_name=*/"abc:def:::a",83     },84     {}},85    {"$__lldb_func:0x45:0xd2:0xf0:$__lldb_func",86     {87         /*.discriminator=*/"0x45",88         /*.module_id=*/0xd2,89         /*.symbol_id=*/0xf0,90         /*.lookup_name=*/"$__lldb_func",91     },92     {}},93};94 95struct ExpressionTestFixture : public testing::TestWithParam<LabelTestCase> {};96 97TEST_P(ExpressionTestFixture, FunctionCallLabel) {98  const auto &[encoded, label, errors] = GetParam();99 100  auto decoded_or_err = FunctionCallLabel::fromString(encoded);101  if (!errors.empty()) {102    EXPECT_THAT_EXPECTED(103        decoded_or_err,104        llvm::FailedWithMessageArray(testing::ElementsAreArray(errors)));105    return;106  }107 108  EXPECT_THAT_EXPECTED(decoded_or_err, llvm::Succeeded());109 110  auto label_str = label.toString();111  EXPECT_EQ(decoded_or_err->toString(), encoded);112  EXPECT_EQ(label_str, encoded);113 114  EXPECT_EQ(decoded_or_err->discriminator, label.discriminator);115  EXPECT_EQ(decoded_or_err->module_id, label.module_id);116  EXPECT_EQ(decoded_or_err->symbol_id, label.symbol_id);117  EXPECT_EQ(decoded_or_err->lookup_name, label.lookup_name);118 119  auto roundtrip_or_err = FunctionCallLabel::fromString(label_str);120  EXPECT_THAT_EXPECTED(roundtrip_or_err, llvm::Succeeded());121 122  EXPECT_EQ(roundtrip_or_err->discriminator, label.discriminator);123  EXPECT_EQ(roundtrip_or_err->module_id, label.module_id);124  EXPECT_EQ(roundtrip_or_err->symbol_id, label.symbol_id);125  EXPECT_EQ(roundtrip_or_err->lookup_name, label.lookup_name);126}127 128INSTANTIATE_TEST_SUITE_P(FunctionCallLabelTest, ExpressionTestFixture,129                         testing::ValuesIn(g_label_test_cases));130