Fix API test after r241728
[WebKit-https.git] / Tools / TestWebKitAPI / Tests / WebKitCocoa / VisibleContentRect.mm
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #import "config.h"
27
28 #if WK_API_ENABLED && PLATFORM(IOS_FAMILY)
29
30 #import "TestWKWebView.h"
31 #import <WebKit/WKWebViewPrivate.h>
32 #import <wtf/RetainPtr.h>
33 #import <wtf/WeakPtr.h>
34
35 @interface WKWebView ()
36 - (CGRect)_visibleContentRect;
37 @end
38
39 @interface TestWKWebViewWithEnclosingView : TestWKWebView
40 @property (nonatomic, assign) UIView *test_enclosingViewForExposedRectComputation;
41 @end
42
43 @implementation TestWKWebViewWithEnclosingView
44 - (UIView *)_enclosingViewForExposedRectComputation
45 {
46     if (_test_enclosingViewForExposedRectComputation)
47         return _test_enclosingViewForExposedRectComputation;
48     return [super _enclosingViewForExposedRectComputation];
49 }
50 @end
51
52 namespace TestWebKitAPI {
53
54 TEST(WebKit, VisibleContentRect_FullBounds)
55 {
56     auto config = adoptNS([[WKWebViewConfiguration alloc] init]);
57     auto webView = adoptNS([[TestWKWebViewWithEnclosingView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:config.get()]);
58
59     EXPECT_TRUE(CGRectEqualToRect([webView _visibleContentRect], CGRectMake(0, 0, 800, 600)));
60 }
61
62 TEST(WebKit, VisibleContentRect_FullBoundsWithinScrollView)
63 {
64     auto config = adoptNS([[WKWebViewConfiguration alloc] init]);
65     auto webView = adoptNS([[TestWKWebViewWithEnclosingView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:config.get()]);
66     auto window = webView.get().window;
67     auto scrollView = adoptNS([[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)]);
68     [window addSubview:scrollView.get()];
69     [scrollView addSubview:webView.get()];
70
71     EXPECT_TRUE(CGRectEqualToRect([webView _visibleContentRect], CGRectMake(0, 0, 800, 600)));
72 }
73
74 TEST(WebKit, VisibleContentRect_FullBoundsWhenClippedByNonScrollView)
75 {
76     auto config = adoptNS([[WKWebViewConfiguration alloc] init]);
77     auto webView = adoptNS([[TestWKWebViewWithEnclosingView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:config.get()]);
78     auto window = webView.get().window;
79     auto view = adoptNS([[UIView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)]);
80     [window addSubview:view.get()];
81     [view addSubview:webView.get()];
82
83     webView.get().frame = CGRectMake(-100, -100, 1000, 800);
84
85     EXPECT_TRUE(CGRectEqualToRect([webView _visibleContentRect], CGRectMake(0, 0, 1000, 800)));
86 }
87
88 TEST(WebKit, VisibleContentRect_ClippedBoundsWhenClippedByScrollView)
89 {
90     CGRect windowBounds = CGRectMake(0, 0, 800, 600);
91     auto config = adoptNS([[WKWebViewConfiguration alloc] init]);
92     auto webView = adoptNS([[TestWKWebViewWithEnclosingView alloc] initWithFrame:windowBounds configuration:config.get()]);
93     auto window = webView.get().window;
94     auto scrollView = adoptNS([[UIScrollView alloc] initWithFrame:windowBounds]);
95     [window addSubview:scrollView.get()];
96     [scrollView addSubview:webView.get()];
97
98     webView.get().frame = CGRectMake(-100, -100, 1000, 800);
99     scrollView.get().contentSize = CGSizeMake(1000, 800);
100     scrollView.get().contentOffset = CGPointMake(50, 50);
101
102     EXPECT_TRUE(CGRectEqualToRect([webView _visibleContentRect], CGRectMake(150, 150, 800, 600)));
103 }
104
105 TEST(WebKit, VisibleContentRect_ClippedBoundsWhenClippedByEnclosingView)
106 {
107     auto config = adoptNS([[WKWebViewConfiguration alloc] init]);
108     auto webView = adoptNS([[TestWKWebViewWithEnclosingView alloc] initWithFrame:CGRectMake(0, 0, 800, 600) configuration:config.get()]);
109     auto window = webView.get().window;
110     auto view = adoptNS([[UIView alloc] initWithFrame:CGRectMake(0, 0, 800, 600)]);
111     [window addSubview:view.get()];
112     [view addSubview:webView.get()];
113
114     webView.get().frame = CGRectMake(-100, -100, 1000, 800);
115     webView.get().test_enclosingViewForExposedRectComputation = view.get();
116
117     EXPECT_TRUE(CGRectEqualToRect([webView _visibleContentRect], CGRectMake(100, 100, 800, 600)));
118 }
119
120 } // namespace TestWebKitAPI
121
122 #endif // WK_API_ENABLED && PLATFORM(IOS_FAMILY)
123