| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "src/developer/debug/zxdb/client/source_file_provider_impl.h" |
| |
| #include <stdlib.h> |
| |
| #include <gtest/gtest.h> |
| |
| #include "src/developer/debug/zxdb/common/file_util.h" |
| #include "src/developer/debug/zxdb/common/scoped_temp_file.h" |
| |
| namespace zxdb { |
| |
| TEST(SourceUtil, SourceFileProviderImpl) { |
| // Make a temp file with known contents. |
| ScopedTempFile temp_file; |
| ASSERT_NE(-1, temp_file.fd()); |
| const std::string expected = "contents"; |
| write(temp_file.fd(), expected.data(), expected.size()); |
| |
| std::string file_part(ExtractLastFileComponent(temp_file.name())); |
| |
| // Test with full input path. |
| SourceFileProviderImpl provider_no_build_dirs({}); |
| ErrOr<SourceFileProviderImpl::FileData> result = |
| provider_no_build_dirs.GetFileData(temp_file.name(), ""); |
| ASSERT_FALSE(result.has_error()) << result.err().msg(); |
| EXPECT_EQ(expected, result.value().contents); |
| |
| // With just file part, should not be found. |
| result = provider_no_build_dirs.GetFileData(file_part, ""); |
| EXPECT_TRUE(result.has_error()); |
| |
| // With DWARF compilation dir of "/tmp" it should be found again. |
| result = provider_no_build_dirs.GetFileData(file_part, "/tmp"); |
| ASSERT_FALSE(result.has_error()) << result.err().msg(); |
| EXPECT_EQ(expected, result.value().contents); |
| |
| // With symbol search path it should be found. |
| SourceFileProviderImpl provider_tmp_build_dir({"/tmp"}); |
| result = provider_tmp_build_dir.GetFileData(file_part, ""); |
| ASSERT_FALSE(result.has_error()) << result.err().msg(); |
| EXPECT_EQ(expected, result.value().contents); |
| |
| // Combination of preference and relative search path. |
| SourceFileProviderImpl provider_slash_build_dir({"/"}); |
| result = provider_slash_build_dir.GetFileData(file_part, "tmp"); |
| ASSERT_FALSE(result.has_error()) << result.err().msg(); |
| EXPECT_EQ(expected, result.value().contents); |
| } |
| |
| } // namespace zxdb |