// Copyright 2015 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. #import "ios/web/alloc_with_zone_interceptor.h" #include "base/mac/scoped_nsobject.h" #include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest_mac.h" #include "testing/platform_test.h" // Testable class to test web::AddAllocWithZoneMethod. @interface CRBTestAlloc : NSObject @end @implementation CRBTestAlloc @end namespace web { namespace { // Test fixture for alloc_with_zone_interceptor functions. typedef PlatformTest AllocWithZoneInterceptorTest; // Tests that AddAllocWithZoneMethod delegates allocation to the caller. TEST_F(AllocWithZoneInterceptorTest, AddAllocWithZoneMethod) { NSZone* const kZone = NSDefaultMallocZone(); base::scoped_nsobject original_result( [CRBTestAlloc allocWithZone:kZone]); ASSERT_TRUE([original_result isMemberOfClass:[CRBTestAlloc class]]); NSString* const kResult = @"test-result"; AddAllocWithZoneMethod([CRBTestAlloc class], ^id(Class klass, NSZone* zone) { EXPECT_EQ([CRBTestAlloc class], klass); EXPECT_EQ(kZone, zone); return kResult; }); EXPECT_NSEQ(kResult, [CRBTestAlloc allocWithZone:kZone]); } } // namespace } // namespace web