Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "base/file_util.h"
      6 #include "base/memory/scoped_ptr.h"
      7 #include "base/path_service.h"
      8 #include "base/file_version_info.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 #if defined(OS_WIN)
     12 #include "base/file_version_info_win.h"
     13 #endif
     14 
     15 namespace {
     16 
     17 class FileVersionInfoTest : public testing::Test {
     18 };
     19 
     20 #if defined(OS_WIN)
     21 FilePath GetTestDataPath() {
     22   FilePath path;
     23   PathService::Get(base::DIR_SOURCE_ROOT, &path);
     24   path = path.AppendASCII("base");
     25   path = path.AppendASCII("data");
     26   path = path.AppendASCII("file_version_info_unittest");
     27   return path;
     28 }
     29 #endif
     30 
     31 }
     32 
     33 #if defined(OS_WIN)
     34 TEST(FileVersionInfoTest, HardCodedProperties) {
     35   const wchar_t* kDLLNames[] = {
     36     L"FileVersionInfoTest1.dll"
     37   };
     38 
     39   const wchar_t* kExpectedValues[1][15] = {
     40       // FileVersionInfoTest.dll
     41       L"Goooooogle",                      // company_name
     42       L"Google",                          // company_short_name
     43       L"This is the product name",        // product_name
     44       L"This is the product short name",  // product_short_name
     45       L"The Internal Name",               // internal_name
     46       L"4.3.2.1",                         // product_version
     47       L"Private build property",          // private_build
     48       L"Special build property",          // special_build
     49       L"This is a particularly interesting comment",  // comments
     50       L"This is the original filename",   // original_filename
     51       L"This is my file description",     // file_description
     52       L"1.2.3.4",                         // file_version
     53       L"This is the legal copyright",     // legal_copyright
     54       L"This is the legal trademarks",    // legal_trademarks
     55       L"This is the last change",         // last_change
     56   };
     57 
     58   for (int i = 0; i < arraysize(kDLLNames); ++i) {
     59     FilePath dll_path = GetTestDataPath();
     60     dll_path = dll_path.Append(kDLLNames[i]);
     61 
     62     scoped_ptr<FileVersionInfo> version_info(
     63         FileVersionInfo::CreateFileVersionInfo(dll_path));
     64 
     65     int j = 0;
     66     EXPECT_EQ(kExpectedValues[i][j++], version_info->company_name());
     67     EXPECT_EQ(kExpectedValues[i][j++], version_info->company_short_name());
     68     EXPECT_EQ(kExpectedValues[i][j++], version_info->product_name());
     69     EXPECT_EQ(kExpectedValues[i][j++], version_info->product_short_name());
     70     EXPECT_EQ(kExpectedValues[i][j++], version_info->internal_name());
     71     EXPECT_EQ(kExpectedValues[i][j++], version_info->product_version());
     72     EXPECT_EQ(kExpectedValues[i][j++], version_info->private_build());
     73     EXPECT_EQ(kExpectedValues[i][j++], version_info->special_build());
     74     EXPECT_EQ(kExpectedValues[i][j++], version_info->comments());
     75     EXPECT_EQ(kExpectedValues[i][j++], version_info->original_filename());
     76     EXPECT_EQ(kExpectedValues[i][j++], version_info->file_description());
     77     EXPECT_EQ(kExpectedValues[i][j++], version_info->file_version());
     78     EXPECT_EQ(kExpectedValues[i][j++], version_info->legal_copyright());
     79     EXPECT_EQ(kExpectedValues[i][j++], version_info->legal_trademarks());
     80     EXPECT_EQ(kExpectedValues[i][j++], version_info->last_change());
     81   }
     82 }
     83 #endif
     84 
     85 #if defined(OS_WIN)
     86 TEST(FileVersionInfoTest, IsOfficialBuild) {
     87   const wchar_t* kDLLNames[] = {
     88     L"FileVersionInfoTest1.dll",
     89     L"FileVersionInfoTest2.dll"
     90   };
     91 
     92   const bool kExpected[] = {
     93     true,
     94     false,
     95   };
     96 
     97   // Test consistency check.
     98   ASSERT_EQ(arraysize(kDLLNames), arraysize(kExpected));
     99 
    100   for (int i = 0; i < arraysize(kDLLNames); ++i) {
    101     FilePath dll_path = GetTestDataPath();
    102     dll_path = dll_path.Append(kDLLNames[i]);
    103 
    104     scoped_ptr<FileVersionInfo> version_info(
    105         FileVersionInfo::CreateFileVersionInfo(dll_path));
    106 
    107     EXPECT_EQ(kExpected[i], version_info->is_official_build());
    108   }
    109 }
    110 #endif
    111 
    112 #if defined(OS_WIN)
    113 TEST(FileVersionInfoTest, CustomProperties) {
    114   FilePath dll_path = GetTestDataPath();
    115   dll_path = dll_path.AppendASCII("FileVersionInfoTest1.dll");
    116 
    117   scoped_ptr<FileVersionInfo> version_info(
    118       FileVersionInfo::CreateFileVersionInfo(dll_path));
    119 
    120   // Test few existing properties.
    121   std::wstring str;
    122   FileVersionInfoWin* version_info_win =
    123       static_cast<FileVersionInfoWin*>(version_info.get());
    124   EXPECT_TRUE(version_info_win->GetValue(L"Custom prop 1",  &str));
    125   EXPECT_EQ(L"Un", str);
    126   EXPECT_EQ(L"Un", version_info_win->GetStringValue(L"Custom prop 1"));
    127 
    128   EXPECT_TRUE(version_info_win->GetValue(L"Custom prop 2",  &str));
    129   EXPECT_EQ(L"Deux", str);
    130   EXPECT_EQ(L"Deux", version_info_win->GetStringValue(L"Custom prop 2"));
    131 
    132   EXPECT_TRUE(version_info_win->GetValue(L"Custom prop 3",  &str));
    133   EXPECT_EQ(L"1600 Amphitheatre Parkway Mountain View, CA 94043", str);
    134   EXPECT_EQ(L"1600 Amphitheatre Parkway Mountain View, CA 94043",
    135             version_info_win->GetStringValue(L"Custom prop 3"));
    136 
    137   // Test an non-existing property.
    138   EXPECT_FALSE(version_info_win->GetValue(L"Unknown property",  &str));
    139   EXPECT_EQ(L"", version_info_win->GetStringValue(L"Unknown property"));
    140 }
    141 #endif
    142