2 * Copyright 2017 Facebook, Inc.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <folly/experimental/symbolizer/Dwarf.h>
19 #include <folly/portability/GTest.h>
21 using folly::symbolizer::Dwarf;
24 std::string expectedPath,
25 std::string expectedBaseDir,
26 std::string expectedSubDir,
27 std::string expectedFile,
28 std::string rawBaseDir,
29 std::string rawSubDir,
30 std::string rawFile) {
31 Dwarf::Path path(rawBaseDir, rawSubDir, rawFile);
33 CHECK_EQ(expectedBaseDir, path.baseDir())
34 << "Path(" << rawBaseDir << ", " << rawSubDir << ", " << rawFile << ")";
35 CHECK_EQ(expectedSubDir, path.subDir())
36 << "Path(" << rawBaseDir << ", " << rawSubDir << ", " << rawFile << ")";
37 CHECK_EQ(expectedFile, path.file())
38 << "Path(" << rawBaseDir << ", " << rawSubDir << ", " << rawFile << ")";
40 CHECK_EQ(expectedPath, path.toString());
42 // Check the the `toBuffer` function.
45 len = path.toBuffer(buf, 1024);
46 CHECK_EQ(expectedPath, std::string(buf, len));
50 checkPath("hello.cpp", "", "", "hello.cpp", "", "", "hello.cpp");
51 checkPath("foo/hello.cpp", "foo", "", "hello.cpp", "foo", "", "hello.cpp");
52 checkPath("foo/hello.cpp", "foo", "", "hello.cpp", "", "foo", "hello.cpp");
53 checkPath("hello.cpp", "", "", "hello.cpp", "./////", "./////", "hello.cpp");
54 checkPath("/hello.cpp", "/", "", "hello.cpp", "/////", "./////", "hello.cpp");
56 "/hello.cpp", "/", "", "hello.cpp", "/./././././././", "", "hello.cpp");