Index: content/browser/mac/closure_blocks_leopard_compat_unittest.cc |
=================================================================== |
--- content/browser/mac/closure_blocks_leopard_compat_unittest.cc (revision 124212) |
+++ content/browser/mac/closure_blocks_leopard_compat_unittest.cc (working copy) |
@@ -1,98 +0,0 @@ |
-// 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 "testing/gtest/include/gtest/gtest.h" |
- |
-#include "base/mac/mac_util.h" |
-#include "content/browser/mac/closure_blocks_leopard_compat.h" |
- |
-// Used in ClosureBlocksLeopardCompatTest.Global. Putting a block at global |
-// scope results in a block structure whose isa field is set to |
-// NSConcreteGlobalBlock, ensuring that symbol is referenced. This test needs |
-// to be able to load on 10.5 where that symbol is not present at runtime, so |
-// the real test here is that the symbol is weakly imported. If not, the |
-// executable will fail to load. |
-void (^global_block)(bool*) = ^(bool* ran_pointer) { *ran_pointer = true; }; |
- |
-namespace { |
- |
-// It should be possible to declare a block on OSes as early as Leopard |
-// (10.5). This should be buildable with the 10.5 SDK and a 10.5 deployment |
-// target, and runnable on 10.5. However, the block itself is not expected to |
-// be runnable on 10.5. This test verfies that blocks are buildable on 10.5 |
-// and runnable on Snow Leopard (10.6) and later. |
- |
-TEST(ClosureBlocksLeopardCompatTest, Stack) { |
- bool ran = false; |
- |
- // This should result in a block structure whose isa field is set to |
- // NSConcreteStackBlock, ensuring that symbol is referenced. This test |
- // needs to be able to load on 10.5 where that symbol is not present at |
- // runtime, so the real test here checks that the symbol is weakly imported. |
- // If not, the executable will fail to load. |
- |
- void (^test_block)(bool*) = ^(bool* ran_pointer) { *ran_pointer = true; }; |
- |
- ASSERT_FALSE(ran); |
- |
- if (base::mac::IsOSSnowLeopardOrLater()) { |
- test_block(&ran); |
- |
- EXPECT_TRUE(ran); |
- } |
-} |
- |
-TEST(ClosureBlocksLeopardCompatTest, Global) { |
- bool ran = false; |
- |
- ASSERT_FALSE(ran); |
- |
- if (base::mac::IsOSSnowLeopardOrLater()) { |
- global_block(&ran); |
- |
- EXPECT_TRUE(ran); |
- } |
-} |
- |
-TEST(ClosureBlocksLeopardCompatTest, CopyRelease) { |
- if (base::mac::IsOSSnowLeopardOrLater()) { |
- // Protect the entire test in this conditional, because __block won't run |
- // on 10.5. |
- __block int value = 0; |
- |
- typedef int (^TestBlockType)(); |
- TestBlockType local_block = ^(void) { return ++value; }; |
- |
- ASSERT_EQ(0, value); |
- |
- int rv = local_block(); |
- EXPECT_EQ(1, rv); |
- EXPECT_EQ(rv, value); |
- |
- // Using Block_copy, Block_release, and these other operations ensures |
- // that _Block_copy, _Block_release, _Block_object_assign, and |
- // _Block_object_dispose are referenced. This test needs to be able to |
- // load on 10.5 where these symbols are not present at runtime, so the |
- // real test here is that the symbol is weakly imported. If not, the |
- // executable will fail to load. |
- |
- TestBlockType copied_block = Block_copy(local_block); |
- |
- rv = copied_block(); |
- EXPECT_EQ(2, rv); |
- EXPECT_EQ(rv, value); |
- |
- rv = copied_block(); |
- EXPECT_EQ(3, rv); |
- EXPECT_EQ(rv, value); |
- |
- Block_release(copied_block); |
- |
- rv = local_block(); |
- EXPECT_EQ(4, rv); |
- EXPECT_EQ(rv, value); |
- } |
-} |
- |
-} // namespace |