Index: base/win/pe_image_unittest.cc |
diff --git a/base/win/pe_image_unittest.cc b/base/win/pe_image_unittest.cc |
index 4134741a2f05b59ba59e25aabf13d37d8cc75e8d..28b65a4e0ba6102ff10161af4edcf8d7f7d6eb27 100644 |
--- a/base/win/pe_image_unittest.cc |
+++ b/base/win/pe_image_unittest.cc |
@@ -6,129 +6,10 @@ |
#include <algorithm> |
#include <vector> |
-#include "testing/gtest/include/gtest/gtest.h" |
+#include "base/files/file_path.h" |
+#include "base/path_service.h" |
#include "base/win/pe_image.h" |
-#include "base/win/windows_version.h" |
- |
-namespace { |
- |
-class Expectations { |
- public: |
- enum Value { |
- SECTIONS = 0, |
- IMPORTS_DLLS, |
- DELAY_DLLS, |
- EXPORTS, |
- IMPORTS, |
- DELAY_IMPORTS, |
- RELOCS |
- }; |
- |
- enum Arch { |
- ARCH_X86 = 0, |
- ARCH_X64, |
- ARCH_ALL |
- }; |
- |
- Expectations(); |
- |
- void SetDefault(Value value, int count); |
- void SetOverride(Value value, base::win::Version version, |
- Arch arch, int count); |
- void SetOverride(Value value, base::win::Version version, int count); |
- void SetOverride(Value value, Arch arch, int count); |
- |
- // returns -1 on failure. |
- int GetExpectation(Value value); |
- |
- private: |
- class Override { |
- public: |
- enum MatchType { MATCH_VERSION, MATCH_ARCH, MATCH_BOTH, MATCH_NONE }; |
- |
- Override(Value value, base::win::Version version, Arch arch, int count) |
- : value_(value), version_(version), arch_(arch), count_(count) { |
- }; |
- |
- bool Matches(Value value, base::win::Version version, |
- Arch arch, MatchType type) { |
- if (value_ != value) |
- return false; |
- |
- switch (type) { |
- case MATCH_BOTH: |
- return (arch == arch_ && version == version_); |
- case MATCH_ARCH: |
- return (arch == arch_ && version_ == base::win::VERSION_WIN_LAST); |
- case MATCH_VERSION: |
- return (arch_ == ARCH_ALL && version == version_); |
- case MATCH_NONE: |
- return (arch_ == ARCH_ALL && version_ == base::win::VERSION_WIN_LAST); |
- } |
- return false; |
- } |
- |
- int GetCount() { return count_; } |
- |
- private: |
- Value value_; |
- base::win::Version version_; |
- Arch arch_; |
- int count_; |
- }; |
- |
- bool MatchesMyArch(Arch arch); |
- |
- std::vector<Override> overrides_; |
- Arch my_arch_; |
- base::win::Version my_version_; |
-}; |
- |
-Expectations::Expectations() { |
- my_version_ = base::win::GetVersion(); |
-#if defined(ARCH_CPU_64_BITS) |
- my_arch_ = ARCH_X64; |
-#else |
- my_arch_ = ARCH_X86; |
-#endif |
-} |
- |
-int Expectations::GetExpectation(Value value) { |
- // Prefer OS version specificity over Arch specificity. |
- for (auto type : { Override::MATCH_BOTH, |
- Override::MATCH_VERSION, |
- Override::MATCH_ARCH, |
- Override::MATCH_NONE }) { |
- for (auto override : overrides_) { |
- if (override.Matches(value, my_version_, my_arch_, type)) |
- return override.GetCount(); |
- } |
- } |
- return -1; |
-} |
- |
-void Expectations::SetDefault(Value value, int count) { |
- SetOverride(value, base::win::VERSION_WIN_LAST, ARCH_ALL, count); |
-} |
- |
-void Expectations::SetOverride(Value value, |
- base::win::Version version, |
- Arch arch, |
- int count) { |
- overrides_.push_back(Override(value, version, arch, count)); |
-} |
- |
-void Expectations::SetOverride(Value value, |
- base::win::Version version, |
- int count) { |
- SetOverride(value, version, ARCH_ALL, count); |
-} |
- |
-void Expectations::SetOverride(Value value, Arch arch, int count) { |
- SetOverride(value, base::win::VERSION_WIN_LAST, arch, count); |
-} |
- |
-} // namespace |
+#include "testing/gtest/include/gtest/gtest.h" |
namespace base { |
namespace win { |
@@ -210,41 +91,35 @@ bool ExportsCallback(const PEImage& image, |
} // namespace |
// Tests that we are able to enumerate stuff from a PE file, and that |
-// the actual number of items found is within the expected range. |
+// the actual number of items found matches an expected value. |
TEST(PEImageTest, EnumeratesPE) { |
- Expectations expectations; |
- |
-#ifndef NDEBUG |
- // Default Debug expectations. |
- expectations.SetDefault(Expectations::SECTIONS, 7); |
- expectations.SetDefault(Expectations::IMPORTS_DLLS, 3); |
- expectations.SetDefault(Expectations::DELAY_DLLS, 2); |
- expectations.SetDefault(Expectations::EXPORTS, 2); |
- expectations.SetDefault(Expectations::IMPORTS, 49); |
- expectations.SetDefault(Expectations::DELAY_IMPORTS, 2); |
- expectations.SetDefault(Expectations::RELOCS, 438); |
- |
- // 64-bit Debug expectations. |
- expectations.SetOverride(Expectations::SECTIONS, Expectations::ARCH_X64, 8); |
- expectations.SetOverride(Expectations::IMPORTS, Expectations::ARCH_X64, 69); |
- expectations.SetOverride(Expectations::RELOCS, Expectations::ARCH_X64, 632); |
+ base::FilePath pe_image_test_path; |
+ ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &pe_image_test_path)); |
+ pe_image_test_path = pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image")); |
+ |
+#if defined(ARCH_CPU_64_BITS) |
+ pe_image_test_path = |
+ pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_64.dll")); |
+ const int sections = 6; |
+ const int imports_dlls = 2; |
+ const int delay_dlls = 2; |
+ const int exports = 2; |
+ const int imports = 69; |
+ const int delay_imports = 2; |
+ const int relocs = 632; |
#else |
- // Default Release expectations. |
- expectations.SetDefault(Expectations::SECTIONS, 5); |
- expectations.SetDefault(Expectations::IMPORTS_DLLS, 2); |
- expectations.SetDefault(Expectations::DELAY_DLLS, 2); |
- expectations.SetDefault(Expectations::EXPORTS, 2); |
- expectations.SetDefault(Expectations::IMPORTS, 66); |
- expectations.SetDefault(Expectations::DELAY_IMPORTS, 2); |
- expectations.SetDefault(Expectations::RELOCS, 1586); |
- |
- // 64-bit Release expectations. |
- expectations.SetOverride(Expectations::SECTIONS, Expectations::ARCH_X64, 6); |
- expectations.SetOverride(Expectations::IMPORTS, Expectations::ARCH_X64, 69); |
- expectations.SetOverride(Expectations::RELOCS, Expectations::ARCH_X64, 632); |
+ pe_image_test_path = |
+ pe_image_test_path.Append(FILE_PATH_LITERAL("pe_image_test_32.dll")); |
+ const int sections = 5; |
+ const int imports_dlls = 2; |
+ const int delay_dlls = 2; |
+ const int exports = 2; |
+ const int imports = 66; |
+ const int delay_imports = 2; |
+ const int relocs = 1586; |
#endif |
- HMODULE module = LoadLibrary(L"pe_image_test.dll"); |
+ HMODULE module = LoadLibrary(pe_image_test_path.value().c_str()); |
ASSERT_TRUE(NULL != module); |
PEImage pe(module); |
@@ -252,31 +127,31 @@ TEST(PEImageTest, EnumeratesPE) { |
EXPECT_TRUE(pe.VerifyMagic()); |
pe.EnumSections(SectionsCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::SECTIONS), count); |
+ EXPECT_EQ(sections, count); |
count = 0; |
pe.EnumImportChunks(ImportChunksCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::IMPORTS_DLLS), count); |
+ EXPECT_EQ(imports_dlls, count); |
count = 0; |
pe.EnumDelayImportChunks(DelayImportChunksCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::DELAY_DLLS), count); |
+ EXPECT_EQ(delay_dlls, count); |
count = 0; |
pe.EnumExports(ExportsCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::EXPORTS), count); |
+ EXPECT_EQ(exports, count); |
count = 0; |
pe.EnumAllImports(ImportsCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::IMPORTS), count); |
+ EXPECT_EQ(imports, count); |
count = 0; |
pe.EnumAllDelayImports(ImportsCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::DELAY_IMPORTS), count); |
+ EXPECT_EQ(delay_imports, count); |
count = 0; |
pe.EnumRelocs(RelocsCallback, &count); |
- EXPECT_EQ(expectations.GetExpectation(Expectations::RELOCS), count); |
+ EXPECT_EQ(relocs, count); |
FreeLibrary(module); |
} |