1 /*
2  * Copyright (C) 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.layoutlib.bridge.intensive;
18 
19 import com.android.ide.common.rendering.api.SessionParams;
20 import com.android.layoutlib.bridge.intensive.setup.ConfigGenerator;
21 import com.android.layoutlib.bridge.intensive.setup.LayoutLibTestCallback;
22 import com.android.layoutlib.bridge.intensive.setup.LayoutPullParser;
23 
24 import org.junit.After;
25 import org.junit.Test;
26 
27 public class HighQualityShadowsRenderTests extends RenderTestBase {
28     @After
afterTestCase()29     public void afterTestCase() {
30         com.android.layoutlib.bridge.test.widgets.HookWidget.reset();
31     }
32 
33     @Test
testHighQualityRectangleShadow()34     public void testHighQualityRectangleShadow() throws Exception {
35         LayoutPullParser parser = createParserFromPath("shadows_test.xml");
36         LayoutLibTestCallback layoutLibCallback =
37                 new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
38         layoutLibCallback.initResources();
39         SessionParams params = getSessionParamsBuilder()
40                 .setParser(parser)
41                 .setConfigGenerator(ConfigGenerator.NEXUS_5)
42                 .setCallback(layoutLibCallback)
43                 .disableDecoration()
44                 .build();
45 
46         renderAndVerify(params, "shadows_test_high_quality.png");
47         // We expect fidelity warnings for Path.isConvex. Fail for anything else.
48         sRenderMessages.removeIf(message -> message.equals("Path.isConvex is not supported."));
49         sRenderMessages.removeIf(message -> message.equals("Font$Builder.nAddAxis is not supported."));
50     }
51 
52     @Test
testRoundedEdgeRectangle()53     public void testRoundedEdgeRectangle() throws Exception {
54         LayoutPullParser parser = createParserFromPath("shadows_rounded_edge_test.xml");
55         LayoutLibTestCallback layoutLibCallback =
56                 new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
57         layoutLibCallback.initResources();
58         SessionParams params = getSessionParamsBuilder()
59                 .setParser(parser)
60                 .setConfigGenerator(ConfigGenerator.NEXUS_5)
61                 .setCallback(layoutLibCallback)
62                 .build();
63 
64         renderAndVerify(params, "shadows_test_high_quality_rounded_edge.png");
65         // We expect fidelity warnings for Path.isConvex. Fail for anything else.
66         sRenderMessages.removeIf(message -> message.equals("Path.isConvex is not supported."));
67         sRenderMessages.removeIf(message -> message.equals("Font$Builder.nAddAxis is not supported."));
68     }
69 
70     @Test
testLargeView()71     public void testLargeView() throws Exception {
72         LayoutPullParser parser = createParserFromPath("large_view_shadows_test.xml");
73         LayoutLibTestCallback layoutLibCallback =
74                 new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
75         layoutLibCallback.initResources();
76         SessionParams params = getSessionParamsBuilder()
77                 .setParser(parser)
78                 .setConfigGenerator(ConfigGenerator.NEXUS_5)
79                 .setCallback(layoutLibCallback)
80                 .disableDecoration()
81                 .build();
82 
83         renderAndVerify(params, "large_shadows_test_high_quality.png");
84         // We expect fidelity warnings for Path.isConvex. Fail for anything else.
85         sRenderMessages.removeIf(message -> message.equals("Path.isConvex is not supported."));
86     }
87 
88     @Test
testShadowSizes()89     public void testShadowSizes() throws Exception {
90         LayoutPullParser parser = createParserFromPath("shadow_sizes_test.xml");
91         LayoutLibTestCallback layoutLibCallback =
92                 new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
93         layoutLibCallback.initResources();
94         SessionParams params = getSessionParamsBuilder()
95                 .setParser(parser)
96                 .setConfigGenerator(ConfigGenerator.NEXUS_5)
97                 .setCallback(layoutLibCallback)
98                 .build();
99 
100         renderAndVerify(params, "shadow_sizes_test_high_quality.png");
101         // We expect fidelity warnings for Path.isConvex. Fail for anything else.
102         sRenderMessages.removeIf(message -> message.equals("Path.isConvex is not supported."));
103     }
104 
105     @Test
testWidgetWithScroll()106     public void testWidgetWithScroll() throws Exception {
107         LayoutPullParser parser = createParserFromPath("shadows_scrollview.xml");
108         LayoutLibTestCallback layoutLibCallback =
109                 new LayoutLibTestCallback(getLogger(), mDefaultClassLoader);
110         layoutLibCallback.initResources();
111         SessionParams params = getSessionParamsBuilder()
112                 .setParser(parser)
113                 .setCallback(layoutLibCallback)
114                 .build();
115 
116         renderAndVerify(params, "shadow_scrollview_test_high_quality.png");
117         // We expect fidelity warnings for Path.isConvex. Fail for anything else.
118         sRenderMessages.removeIf(message -> message.equals("Path.isConvex is not supported."));
119         sRenderMessages.removeIf(message -> message.equals("Font$Builder.nAddAxis is not supported."));
120     }
121 }
122