folly: fix tests running under buck (w/ clang and dynamic linking)
authorAndrew Gallagher <agallagher@fb.com>
Fri, 31 Jul 2015 10:10:03 +0000 (03:10 -0700)
committerfacebook-github-bot-1 <folly-bot@fb.com>
Fri, 31 Jul 2015 10:22:10 +0000 (03:22 -0700)
Summary: Various fixes to get tests passing using buck's dev mode.

Reviewed By: @yfeldblum

Differential Revision: D2299981

folly/experimental/symbolizer/test/SymbolizerTest.cpp
folly/experimental/test/NestedCommandLineAppTest.cpp
folly/experimental/test/ProgramOptionsTest.cpp
folly/test/DynamicConverterTest.cpp

index 088ae1e7a332426d83bf64f0d042643f998e0f67..84be15b776466d83513b0dd35aca3c7c5e86ff79 100644 (file)
@@ -34,13 +34,23 @@ TEST(Symbolizer, Single) {
   ASSERT_TRUE(symbolizer.symbolize(reinterpret_cast<uintptr_t>(foo), a));
   EXPECT_EQ("folly::symbolizer::test::foo()", a.demangledName());
 
-  auto path = a.location.file.toString();
-  folly::StringPiece basename(path);
-  auto pos = basename.rfind('/');
-  if (pos != folly::StringPiece::npos) {
-    basename.advance(pos + 1);
+  // The version of clang we use doesn't generate a `.debug_aranges` section,
+  // which the symbolizer needs to lookup the filename.
+  constexpr bool built_with_clang =
+    #ifdef __clang__
+      true;
+    #else
+      false;
+    #endif
+  if (!built_with_clang) {
+    auto path = a.location.file.toString();
+    folly::StringPiece basename(path);
+    auto pos = basename.rfind('/');
+    if (pos != folly::StringPiece::npos) {
+      basename.advance(pos + 1);
+    }
+    EXPECT_EQ("SymbolizerTest.cpp", basename.str());
   }
-  EXPECT_EQ("SymbolizerTest.cpp", basename.str());
 }
 
 FrameArray<100> goldenFrames;
index cdfcd31854bc1801512b94b9dcd801460287ce2c..0e7a7f67b780ba272f3aeab90cd055b5fc4db99b 100644 (file)
@@ -26,8 +26,12 @@ namespace folly { namespace test {
 namespace {
 
 std::string getHelperPath() {
+  const auto basename = "nested_command_line_app_test_helper";
   auto path = fs::executable_path();
-  path.remove_filename() /= "nested_command_line_app_test_helper";
+  path.remove_filename() /= basename;
+  if (!fs::exists(path)) {
+    path = path.parent_path().parent_path() / basename / basename;
+  }
   return path.native();
 }
 
index 3a0f4ca1c771af6b6109c564f8ae7b1ee5320e4f..ef2b13afcb0290a3380a0f08a47a0ab6f5fa2683 100644 (file)
@@ -27,8 +27,12 @@ namespace folly { namespace test {
 namespace {
 
 std::string getHelperPath() {
+  const auto basename = "program_options_test_helper";
   auto path = fs::executable_path();
-  path.remove_filename() /= "program_options_test_helper";
+  path.remove_filename() /= basename;
+  if (!fs::exists(path)) {
+    path = path.parent_path().parent_path() / basename / basename;
+  }
   return path.native();
 }
 
index 2e5003dedc6df79d412777de6a92a4fe5452a606..031f650e5bc5826dae9eb65656fd72bb938587af 100644 (file)
@@ -243,7 +243,7 @@ TEST(DynamicConverter, crazy) {
   dynamic
     dv1 = {},
     dv2 = { ds1, ds2 },
-    dv3 = { ds3 };
+    dv3({ ds3 });
 
   dynamic
     dm1 = dynamic::object(true, dv1)(false, dv2),