1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/win/scoped_localalloc.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <windows.h> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include <shellapi.h> 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace base { 14*6777b538SAndroid Build Coastguard Worker namespace win { 15*6777b538SAndroid Build Coastguard Worker TEST(ScopedLocalAlloc,SimpleUsage)16*6777b538SAndroid Build Coastguard WorkerTEST(ScopedLocalAlloc, SimpleUsage) { 17*6777b538SAndroid Build Coastguard Worker ScopedLocalAlloc scoped_local_alloc(::LocalAlloc(LMEM_FIXED, 0x1000)); 18*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(scoped_local_alloc); 19*6777b538SAndroid Build Coastguard Worker scoped_local_alloc.reset(); 20*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(scoped_local_alloc); 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker std::wstring input_command_line = L"c:\\test\\process.exe --p1=1"; 23*6777b538SAndroid Build Coastguard Worker int num_args = 0; 24*6777b538SAndroid Build Coastguard Worker base::win::ScopedLocalAllocTyped<wchar_t*> argv( 25*6777b538SAndroid Build Coastguard Worker ::CommandLineToArgvW(&input_command_line[0], &num_args)); 26*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(argv); 27*6777b538SAndroid Build Coastguard Worker EXPECT_STREQ(argv.get()[0], L"c:\\test\\process.exe"); 28*6777b538SAndroid Build Coastguard Worker argv.reset(); 29*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(argv); 30*6777b538SAndroid Build Coastguard Worker } 31*6777b538SAndroid Build Coastguard Worker TEST(ScopedLocalAlloc,Transfer)32*6777b538SAndroid Build Coastguard WorkerTEST(ScopedLocalAlloc, Transfer) { 33*6777b538SAndroid Build Coastguard Worker HLOCAL ptr = ::LocalAlloc(LMEM_FIXED, 0x1000); 34*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(ptr); 35*6777b538SAndroid Build Coastguard Worker ScopedLocalAlloc scoped_ptr = TakeLocalAlloc(ptr); 36*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(scoped_ptr); 37*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(ptr); 38*6777b538SAndroid Build Coastguard Worker scoped_ptr.reset(); 39*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(scoped_ptr); 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker wchar_t* str_ptr = static_cast<wchar_t*>(::LocalAlloc(LMEM_FIXED, 0x1000)); 42*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(str_ptr); 43*6777b538SAndroid Build Coastguard Worker ScopedLocalAllocTyped<wchar_t> scoped_str_ptr = TakeLocalAlloc(str_ptr); 44*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(scoped_str_ptr); 45*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(str_ptr); 46*6777b538SAndroid Build Coastguard Worker scoped_str_ptr.reset(); 47*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(scoped_str_ptr); 48*6777b538SAndroid Build Coastguard Worker } 49*6777b538SAndroid Build Coastguard Worker 50*6777b538SAndroid Build Coastguard Worker } // namespace win 51*6777b538SAndroid Build Coastguard Worker } // namespace base 52