|  | // Copyright (c) 2011 The Chromium 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 "base/win/scoped_handle.h" | 
|  |  | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | TEST(ScopedHandleTest, ScopedHandle) { | 
|  | // Any illegal error code will do. We just need to test that it is preserved | 
|  | // by ScopedHandle to avoid bug 528394. | 
|  | const DWORD magic_error = 0x12345678; | 
|  |  | 
|  | HANDLE handle = ::CreateMutex(nullptr, FALSE, nullptr); | 
|  | // Call SetLastError after creating the handle. | 
|  | ::SetLastError(magic_error); | 
|  | base::win::ScopedHandle handle_holder(handle); | 
|  | EXPECT_EQ(magic_error, ::GetLastError()); | 
|  |  | 
|  | // Create a new handle and then set LastError again. | 
|  | handle = ::CreateMutex(nullptr, FALSE, nullptr); | 
|  | ::SetLastError(magic_error); | 
|  | handle_holder.Set(handle); | 
|  | EXPECT_EQ(magic_error, ::GetLastError()); | 
|  |  | 
|  | // Create a new handle and then set LastError again. | 
|  | handle = ::CreateMutex(nullptr, FALSE, nullptr); | 
|  | base::win::ScopedHandle handle_source(handle); | 
|  | ::SetLastError(magic_error); | 
|  | handle_holder = handle_source.Pass(); | 
|  | EXPECT_EQ(magic_error, ::GetLastError()); | 
|  | } |