//===-- TestType.cpp --------------------------------------------*- C++ -*-===//
//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "gtest/gtest.h"

#include "lldb/Symbol/Type.h"

using namespace lldb;
using namespace lldb_private;

namespace {
void TestGetTypeScopeAndBasenameHelper(const char *full_type,
                                       bool expected_is_scoped,
                                       const char *expected_scope,
                                       const char *expected_name) {
  llvm::StringRef scope, name;
  lldb::TypeClass type_class;
  bool is_scoped =
      Type::GetTypeScopeAndBasename(full_type, scope, name, type_class);
  EXPECT_EQ(is_scoped, expected_is_scoped);
  if (expected_is_scoped) {
    EXPECT_EQ(scope, expected_scope);
    EXPECT_EQ(name, expected_name);
  }
}
}

TEST(Type, GetTypeScopeAndBasename) {
  TestGetTypeScopeAndBasenameHelper("int", false, "", "");
  TestGetTypeScopeAndBasenameHelper("std::string", true, "std::", "string");
  TestGetTypeScopeAndBasenameHelper("std::set<int>", true, "std::", "set<int>");
  TestGetTypeScopeAndBasenameHelper("std::set<int, std::less<int>>", true,
                                    "std::", "set<int, std::less<int>>");
  TestGetTypeScopeAndBasenameHelper("std::string::iterator", true,
                                    "std::string::", "iterator");
  TestGetTypeScopeAndBasenameHelper("std::set<int>::iterator", true,
                                    "std::set<int>::", "iterator");
  TestGetTypeScopeAndBasenameHelper(
      "std::set<int, std::less<int>>::iterator", true,
      "std::set<int, std::less<int>>::", "iterator");
  TestGetTypeScopeAndBasenameHelper(
      "std::set<int, std::less<int>>::iterator<bool>", true,
      "std::set<int, std::less<int>>::", "iterator<bool>");
}
