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/scoped_native_library.h" 6 #if defined(OS_WIN) 7 #include "base/files/file_path.h" 8 #endif 9 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 namespace base { 13 14 // Tests whether or not a function pointer retrieved via ScopedNativeLibrary 15 // is available only in a scope. 16 TEST(ScopedNativeLibrary, Basic) { 17 #if defined(OS_WIN) 18 // Get the pointer to DirectDrawCreate() from "ddraw.dll" and verify it 19 // is valid only in this scope. 20 // FreeLibrary() doesn't actually unload a DLL until its reference count 21 // becomes zero, i.e. function pointer is still valid if the DLL used 22 // in this test is also used by another part of this executable. 23 // So, this test uses "ddraw.dll", which is not used by Chrome at all but 24 // installed on all versions of Windows. 25 const char kFunctionName[] = "DirectDrawCreate"; 26 NativeLibrary native_library; 27 { 28 FilePath path(GetNativeLibraryName(L"ddraw")); 29 native_library = LoadNativeLibrary(path, NULL); 30 ScopedNativeLibrary library(native_library); 31 FARPROC test_function = 32 reinterpret_cast<FARPROC>(library.GetFunctionPointer(kFunctionName)); 33 EXPECT_EQ(0, IsBadCodePtr(test_function)); 34 EXPECT_EQ( 35 GetFunctionPointerFromNativeLibrary(native_library, kFunctionName), 36 test_function); 37 } 38 EXPECT_EQ(NULL, 39 GetFunctionPointerFromNativeLibrary(native_library, kFunctionName)); 40 #endif 41 } 42 43 } // namespace base 44