| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/ui/overlays/overlay_presentation_util.h" |
| |
| #import "ios/chrome/browser/ui/infobars/presentation/infobar_modal_positioner.h" |
| #import "ios/chrome/common/ui/util/constraints_ui_util.h" |
| #import "ios/chrome/common/ui/util/text_view_util.h" |
| #import "ios/web/common/uikit_ui_util.h" |
| #import "testing/gtest/include/gtest/gtest.h" |
| #import "testing/gtest_mac.h" |
| #import "testing/platform_test.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| @interface TestModalPositioner : NSObject <InfobarModalPositioner> |
| @end |
| |
| @implementation TestModalPositioner |
| |
| - (CGFloat)modalHeightForWidth:(CGFloat)width { |
| return 350; |
| } |
| |
| @end |
| |
| using OverlayPresentationUtilTest = PlatformTest; |
| |
| // Tests that the frame returned by `ContainedModalFrameThatFit` fits in the |
| // given view. |
| TEST_F(OverlayPresentationUtilTest, TestContainedModalFrameThatFit) { |
| TestModalPositioner* positioner = [[TestModalPositioner alloc] init]; |
| |
| CGRect frame = CGRectMake(0, 0, 500, 500); |
| UITextView* text_view = CreateUITextViewWithTextKit1(); |
| text_view.frame = frame; |
| text_view.text = @"test"; |
| |
| // The text_view must be added to the window so that its safe area is not |
| // null. |
| [GetAnyKeyWindow() addSubview:text_view]; |
| |
| CGRect new_frame = ContainedModalFrameThatFit(positioner, text_view); |
| |
| EXPECT_TRUE(text_view.frame.size.width > new_frame.size.width); |
| EXPECT_TRUE(text_view.frame.size.height > new_frame.size.height); |
| |
| EXPECT_EQ(new_frame.size.width, 394); |
| EXPECT_EQ(new_frame.size.height, 350); |
| |
| [text_view removeFromSuperview]; |
| } |