// Copyright 2019 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/hstring_reference.h" #include #include "base/strings/string_piece.h" #include "base/win/scoped_hstring.h" #include "base/win/windows_version.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { namespace win { namespace { constexpr wchar_t kTestString[] = L"123"; constexpr wchar_t kEmptyString[] = L""; void VerifyHSTRINGEquals(HSTRING hstring, const wchar_t* test_string) { const ScopedHString scoped_hstring(hstring); const WStringPiece hstring_contents = scoped_hstring.Get(); EXPECT_EQ(hstring_contents.compare(test_string), 0); } } // namespace TEST(HStringReferenceTest, Init) { // ScopedHString requires WinRT core functions, which are not available in // older versions. if (GetVersion() < Version::WIN8) { EXPECT_FALSE(HStringReference::ResolveCoreWinRTStringDelayload()); return; } EXPECT_TRUE(HStringReference::ResolveCoreWinRTStringDelayload()); EXPECT_TRUE(ScopedHString::ResolveCoreWinRTStringDelayload()); const HStringReference string(kTestString); EXPECT_NE(string.Get(), nullptr); VerifyHSTRINGEquals(string.Get(), kTestString); // Empty strings come back as null HSTRINGs, a valid HSTRING. const HStringReference empty_string(kEmptyString); EXPECT_EQ(empty_string.Get(), nullptr); VerifyHSTRINGEquals(empty_string.Get(), kEmptyString); // Passing a zero length and null string should also return a null HSTRING. const HStringReference null_string(nullptr, 0); EXPECT_EQ(null_string.Get(), nullptr); VerifyHSTRINGEquals(null_string.Get(), kEmptyString); } } // namespace win } // namespace base