Chromium Code Reviews| Index: base/mac/call_with_eh_frame_unittest.mm |
| diff --git a/base/mac/call_with_eh_frame_unittest.mm b/base/mac/call_with_eh_frame_unittest.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..46bf285c2cd957c3ce763f2b2cbf7d1f7caed411 |
| --- /dev/null |
| +++ b/base/mac/call_with_eh_frame_unittest.mm |
| @@ -0,0 +1,53 @@ |
| +// 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. |
| + |
| +#include "base/mac/call_with_eh_frame.h" |
| + |
| +#import <Foundation/Foundation.h> |
| + |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace base { |
| +namespace mac { |
| +namespace { |
| + |
| +class CallWithEHFrameTest : public testing::Test { |
| + protected: |
| + void ThrowException() { |
| + [NSArray arrayWithObject:nil]; |
| + } |
| +}; |
| + |
| +// Catching from within the EHFrame is allowed. |
| +TEST_F(CallWithEHFrameTest, CatchExceptionHigher) { |
| + bool __block saw_exception = false; |
| + base::mac::CallWithEHFrame(^{ |
| + @try { |
| + ThrowException(); |
| + } @catch (NSException* exception) { |
| + saw_exception = true; |
| + } |
| + }); |
| + EXPECT_TRUE(saw_exception); |
| +} |
| + |
| +// Trying to catch an exception outside the EHFrame is blocked. |
| +TEST_F(CallWithEHFrameTest, CatchExceptionLower) { |
| + auto catch_exception_lower = ^{ |
| + bool saw_exception = false; |
| + @try { |
| + base::mac::CallWithEHFrame(^{ |
| + ThrowException(); |
| + }); |
| + } @catch (NSException* exception) { |
| + saw_exception = true; |
| + } |
| + ASSERT_FALSE(saw_exception); |
|
Scott Hess - ex-Googler
2015/07/06 22:34:04
Should this code crash by failing this assertion,
Robert Sesek
2015/07/07 22:26:17
It should crash by throwing the excpetion.
Scott Hess - ex-Googler
2015/07/07 22:34:31
To be clear, what I meant was that this snippet ca
Robert Sesek
2015/07/07 22:35:55
No, I don't think so. One is a crash and the other
|
| + }; |
| + EXPECT_DEATH(catch_exception_lower(), ""); |
| +} |
| + |
| +} // namespace |
| +} // namespace mac |
| +} // namespace base |