//===--- DemangleTest.cpp -------------------------------------------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// #include "swift/Demangling/Demangle.h" #include "gtest/gtest.h" using namespace swift::Demangle; TEST(Demangle, DemangleWrappers) { EXPECT_EQ("", demangleSymbolAsString(llvm::StringRef(""))); std::string MangledName = "_TtV1a1b\\\t\n\r\"\'\x1f\x20\x7e\x7f"; MangledName += '\0'; EXPECT_EQ("a.b with unmangled suffix \"\\\\\\t\\n\\r\\\"'\\x1F ~\\x7F\\0\"", demangleSymbolAsString(MangledName)); } TEST(Demangle, IsObjCSymbol) { EXPECT_EQ("type metadata accessor for __C.NSNumber", demangleSymbolAsString(llvm::StringRef("_$sSo8NSNumberCMa"))); EXPECT_EQ(true, isObjCSymbol(llvm::StringRef("_$sSo8NSNumberCMa"))); EXPECT_EQ(false, isObjCSymbol(llvm::StringRef("_$s3pat7inlinedSo8NSNumberCvp"))); EXPECT_EQ(true, isObjCSymbol(llvm::StringRef("_$sSC3fooyS2d_SdtFTO"))); } TEST(Demangle, CustomGenericParameterNames) { std::string SymbolName = "_$s1a1gyq_q__xt_tr0_lF"; std::string DemangledName = "a.g((U, Q)) -> U"; DemangleOptions Options; Options.GenericParameterName = [](uint64_t depth, uint64_t index) { return index ? "U" : "Q"; }; std::string Result = demangleSymbolAsString(SymbolName, Options); EXPECT_STREQ(DemangledName.c_str(), Result.c_str()); }