diff options
author | Ram Peri <ramperi@google.com> | 2022-11-21 12:22:39 -0500 |
---|---|---|
committer | Jerome Gaillard <jgaillard@google.com> | 2023-02-08 16:01:13 +0000 |
commit | dd58e4d9509696d562cffdc5388487d1542358bd (patch) | |
tree | 656a1d4977819a118f9d1bb704ff9e20efc6d233 | |
parent | 929dbb49456c0220de71e2d7d36fb770028c0e65 (diff) | |
download | layoutlib-dd58e4d9509696d562cffdc5388487d1542358bd.tar.gz |
Test: run_tests.sh. Create new bridge_client for resue.
Change-Id: I0af578d39abe2e4864b56e42cbe3df7d70047696
Merged-In: I0af578d39abe2e4864b56e42cbe3df7d70047696
-rw-r--r-- | bridge/bridge_client/Android.bp | 59 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/FrameworkResources.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/FrameworkResources.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/IdGeneratingResourceFile.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/IdGeneratingResourceFile.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/IdResourceParser.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/IdResourceParser.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/MultiResourceFile.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/MultiResourceFile.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceDeltaKind.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceDeltaKind.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceFile.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceFile.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceFolder.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceFolder.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceItem.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceItem.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceRepository.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceRepository.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ScanningContext.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ScanningContext.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/SingleResourceFile.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/SingleResourceFile.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/TestFileWrapper.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/TestFileWrapper.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/TestFolderWrapper.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/TestFolderWrapper.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ValidatingResourceParser.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ValidatingResourceParser.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ValueResourceParser.java (renamed from bridge/tests/src/com/android/ide/common/resources/deprecated/ValueResourceParser.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/BridgeClient.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java) | 147 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/RenderResult.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/LayoutPullParser.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutPullParser.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/LayoutlibBridgeClientCallback.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java) | 45 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/ImageUtils.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/ImageUtils.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/ModuleClassLoader.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/ModuleClassLoader.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/TestAssetRepository.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/TestAssetRepository.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/TestUtils.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/TestUtils.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/LongStatsCollector.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/LongStatsCollector.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/PerformanceRunner.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/PerformanceRunner.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatement.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatement.java) | 0 | ||||
-rw-r--r-- | bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatementResult.java (renamed from bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatementResult.java) | 0 | ||||
-rw-r--r-- | bridge/src/android/graphics/Typeface_Delegate.java | 2 | ||||
-rw-r--r-- | bridge/src/android/graphics/fonts/Font_Builder_Delegate.java | 3 | ||||
-rw-r--r-- | bridge/src/com/android/layoutlib/bridge/Bridge.java | 4 | ||||
-rw-r--r-- | bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java | 2 | ||||
-rw-r--r-- | bridge/tests/Android.bp | 18 | ||||
-rwxr-xr-x | bridge/tests/run_tests.sh | 87 | ||||
-rw-r--r-- | bridge/tests/src/com/android/layoutlib/bridge/android/BitmapTest.java | 2 | ||||
-rw-r--r-- | bridge/tests/src/com/android/layoutlib/bridge/android/RenderTestBase.java | 34 | ||||
-rw-r--r-- | bridge/tests/src/com/android/layoutlib/bridge/intensive/LayoutLibTestCallback.java | 25 | ||||
-rw-r--r-- | bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java | 4 |
40 files changed, 319 insertions, 113 deletions
diff --git a/bridge/bridge_client/Android.bp b/bridge/bridge_client/Android.bp new file mode 100644 index 0000000000..444a223336 --- /dev/null +++ b/bridge/bridge_client/Android.bp @@ -0,0 +1,59 @@ +// Copyright (C) 2011 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +java_library_host { + name: "layoutlib-bridge-client", + + // Only compile source java files in this lib. + srcs: [ + "**/*.java", + ], + java_resource_dirs: ["res"], + + static_libs: [ + "tools-common-prebuilt", + "ninepatch-prebuilt", + "sdk-common", + "kxml2-2.3.0", + "layoutlib_api-prebuilt", + "trove-prebuilt", + "junit", + "guava-jre", + "hamcrest", + "mockito", + "objenesis", + "layoutlib", + "temp_layoutlib", + ], + + required: ["layoutlib"], + + // Copy the jar to DIST_DIR for sdk builds + dist: { + targets: [ + "sdk", + "win_sdk", + ], + }, +} + +java_host_for_device { + name: "layoutlib-bridge-client-target", + libs: ["layoutlib-bridge-client"], + visibility: ["//visibility:public"], +} diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/FrameworkResources.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/FrameworkResources.java index 2624df0e1b..2624df0e1b 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/FrameworkResources.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/FrameworkResources.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/IdGeneratingResourceFile.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/IdGeneratingResourceFile.java index 5434cadfb1..5434cadfb1 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/IdGeneratingResourceFile.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/IdGeneratingResourceFile.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/IdResourceParser.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/IdResourceParser.java index 090217ab54..090217ab54 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/IdResourceParser.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/IdResourceParser.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/MultiResourceFile.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/MultiResourceFile.java index 016c6b4088..016c6b4088 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/MultiResourceFile.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/MultiResourceFile.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceDeltaKind.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceDeltaKind.java index 67c48f3940..67c48f3940 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceDeltaKind.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceDeltaKind.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceFile.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceFile.java index 30fbd0b153..30fbd0b153 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceFile.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceFile.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceFolder.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceFolder.java index 5fc2c195ec..5fc2c195ec 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceFolder.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceFolder.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceItem.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceItem.java index 8aaefde789..8aaefde789 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceItem.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceItem.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceRepository.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceRepository.java index fca0862922..fca0862922 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ResourceRepository.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ResourceRepository.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ScanningContext.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ScanningContext.java index dadf18d42d..dadf18d42d 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ScanningContext.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ScanningContext.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/SingleResourceFile.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/SingleResourceFile.java index 38d975dab4..38d975dab4 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/SingleResourceFile.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/SingleResourceFile.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/TestFileWrapper.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/TestFileWrapper.java index f1f3f1743a..f1f3f1743a 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/TestFileWrapper.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/TestFileWrapper.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/TestFolderWrapper.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/TestFolderWrapper.java index f945d3c650..f945d3c650 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/TestFolderWrapper.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/TestFolderWrapper.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ValidatingResourceParser.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ValidatingResourceParser.java index 58af88d9d6..58af88d9d6 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ValidatingResourceParser.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ValidatingResourceParser.java diff --git a/bridge/tests/src/com/android/ide/common/resources/deprecated/ValueResourceParser.java b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ValueResourceParser.java index 53bb5c0fcc..53bb5c0fcc 100644 --- a/bridge/tests/src/com/android/ide/common/resources/deprecated/ValueResourceParser.java +++ b/bridge/bridge_client/src/com/android/ide/common/resources/deprecated/ValueResourceParser.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/BridgeClient.java index c8afcb9893..2846a3ba64 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTestBase.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/BridgeClient.java @@ -29,7 +29,7 @@ import com.android.internal.lang.System_Delegate; import com.android.layoutlib.bridge.Bridge; import com.android.layoutlib.bridge.android.RenderParamsFlags; import com.android.layoutlib.bridge.intensive.setup.ConfigGenerator; -import com.android.layoutlib.bridge.intensive.setup.LayoutLibTestCallback; +import com.android.layoutlib.bridge.intensive.setup.LayoutlibBridgeClientCallback; import com.android.layoutlib.bridge.intensive.setup.LayoutPullParser; import com.android.layoutlib.bridge.intensive.util.ImageUtils; import com.android.layoutlib.bridge.intensive.util.ModuleClassLoader; @@ -55,7 +55,6 @@ import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; -import java.util.Locale; import java.util.concurrent.TimeUnit; import com.google.android.collect.Lists; @@ -63,6 +62,12 @@ import com.google.android.collect.Lists; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; +import android.view.View; +import android.content.Context; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.android.layoutlib.bridge.impl.RenderAction; /** * Base class for render tests. The render tests load all the framework resources and a project * checked in this test's resources. The main dependencies @@ -84,9 +89,9 @@ import static org.junit.Assert.fail; * 2. test_res.dir: This is the directory for the resources of the test. If not specified, this * falls back to getClass().getProtectionDomain().getCodeSource().getLocation() * <p> - * The app resources are at: test_res.dir/testApp/MyApplication/app/src/main/res + * The app resources are obtained using getAppResources() getAppTestAsset() getAppClassesLocation() */ -public class RenderTestBase { +public abstract class BridgeClient { /** * Listener for render process. @@ -112,22 +117,21 @@ public class RenderTestBase { private static final String KEYBOARD_DIR; protected static final String PLATFORM_DIR; private static final String TEST_RES_DIR; - /** Location of the app to test inside {@link #TEST_RES_DIR} */ - protected static final String APP_TEST_DIR = "testApp/MyApplication"; - /** Location of the app's res dir inside {@link #TEST_RES_DIR} */ - private static final String APP_TEST_RES = APP_TEST_DIR + "/src/main/res"; - /** Location of the app's asset dir inside {@link #TEST_RES_DIR} */ - private static final String APP_TEST_ASSET = APP_TEST_DIR + "/src/main/assets/"; - private static final String APP_CLASSES_LOCATION = - APP_TEST_DIR + "/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/"; + + private static final String S_EMPTY_FRAME = "<?xml version=\"1.0\" encoding=\"utf-8\"?> <FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"match_parent\" android:layout_height=\"match_parent\"> </FrameLayout>"; + protected static Bridge sBridge; - /** List of log messages generated by a render call. It can be used to find specific errors */ + + /** List of log messages generated by a render call. It can be used to find specific errors */ protected static ArrayList<String> sRenderMessages = Lists.newArrayList(); private static ILayoutLog sLayoutLibLog; private static FrameworkResources sFrameworkRepo; private static ResourceRepository sProjectResources; private static ILogger sLogger; + private String mPackageName; + private String mThemeName; + static { // Test that System Properties are properly set. PLATFORM_DIR = getPlatformDir(); @@ -140,12 +144,38 @@ public class RenderTestBase { FONT_DIR = getFontDir(); ICU_DATA_PATH = getIcuDataPath(); KEYBOARD_DIR = getKeyboardDir(); - TEST_RES_DIR = getTestResDir(); if (TEST_RES_DIR == null) { fail(String.format("System property %1$s.dir not properly set. The value is %2$s", RESOURCE_DIR_PROPERTY, System.getProperty(RESOURCE_DIR_PROPERTY))); } + + } + + public abstract String getAppTestDir(); + public abstract String getAppTestRes(); + public abstract String getAppResources(); + public abstract String getAppGoldenDir(); + public abstract String getAppTestAsset(); + public abstract String getAppClassesLocation(); + public abstract View getView(); + + protected void init(String themeName) { + mPackageName = "NOT_INITIALIZED"; + mThemeName = themeName; + initProjectResources(); + } + + public BridgeClient(String themeName) { + init(themeName); + } + + public BridgeClient() { + init("AppTheme"); + } + + public void setPackageName(String packageName) { + mPackageName = packageName; } @Rule @@ -362,7 +392,7 @@ public class RenderTestBase { } // TEST_RES_DIR not explicitly set. Fallback to the class's source location. try { - URL location = RenderTestBase.class.getProtectionDomain().getCodeSource().getLocation(); + URL location = BridgeClient.class.getProtectionDomain().getCodeSource().getLocation(); return new File(location.getPath()).exists() ? location.getPath() : null; } catch (NullPointerException e) { // Prevent a lot of null checks by just catching the exception. @@ -381,17 +411,6 @@ public class RenderTestBase { sFrameworkRepo.loadResources(); sFrameworkRepo.loadPublicResources(getLogger()); - sProjectResources = - new ResourceRepository(new TestFolderWrapper(TEST_RES_DIR + "/" + APP_TEST_RES), - false) { - @NonNull - @Override - protected ResourceItem createResourceItem(@NonNull String name) { - return new ResourceItem(name); - } - }; - sProjectResources.loadResources(); - File fontLocation = new File(FONT_DIR); File buildProp = new File(PLATFORM_DIR, "build.prop"); File attrs = new File(res, "values" + File.separator + "attrs.xml"); @@ -416,15 +435,31 @@ public class RenderTestBase { sBridge = null; } + public void initProjectResources() { + String TEST_RESOURCE_FOLDER = TEST_RES_DIR + "/" + getAppTestRes(); + //System.out.println("BridgeClient: initProjectResources: Loading resource xml files from folder:" + TEST_RESOURCE_FOLDER); + sProjectResources = + new ResourceRepository(new TestFolderWrapper(TEST_RESOURCE_FOLDER), + false) { + @NonNull + @Override + protected ResourceItem createResourceItem(@NonNull String name) { + return new ResourceItem(name); + } + }; + sProjectResources.loadResources(); + + } + @NonNull - protected static RenderResult render(com.android.ide.common.rendering.api.Bridge bridge, + protected RenderResult render(com.android.ide.common.rendering.api.Bridge bridge, SessionParams params, long frameTimeNanos) { return render(bridge, params, frameTimeNanos, null); } @NonNull - protected static RenderResult render(com.android.ide.common.rendering.api.Bridge bridge, + protected RenderResult render(com.android.ide.common.rendering.api.Bridge bridge, SessionParams params, long frameTimeNanos, @Nullable RenderSessionListener listener) { @@ -432,8 +467,16 @@ public class RenderTestBase { // Create session params. System_Delegate.setBootTimeNanos(TimeUnit.MILLISECONDS.toNanos(871732800000L)); System_Delegate.setNanosTime(TimeUnit.MILLISECONDS.toNanos(871732800000L)); + RenderSession session = bridge.createSession(params); + Context context = RenderAction.getCurrentContext(); + View v = getView(); + if (v != null ) { + ViewGroup viewGroup = (ViewGroup) session.getRootViews().get(0).getViewObject(); + viewGroup.addView(v); + } + try { if (frameTimeNanos != -1) { session.setElapsedFrameTimeNanos(frameTimeNanos); @@ -464,16 +507,9 @@ public class RenderTestBase { /** * Compares the golden image with the passed image */ - protected static void verify(@NonNull String goldenImageName, @NonNull BufferedImage image) { + protected void verify(@NonNull String goldenImageName, @NonNull BufferedImage image) { try { - boolean isMac = System.getProperty("os.name").toLowerCase(Locale.US).contains("mac"); - String goldenImagePath = APP_TEST_DIR; - if (isMac) { - goldenImagePath += "/golden-mac/"; - } else { - goldenImagePath += "/golden/"; - } - goldenImagePath += goldenImageName; + String goldenImagePath = getAppGoldenDir() + goldenImageName; ImageUtils.requireSimilar(goldenImagePath, image); } catch (IOException e) { getLogger().error(e, e.getMessage()); @@ -488,9 +524,9 @@ public class RenderTestBase { * how far in the future is. */ @Nullable - protected static RenderResult renderAndVerify(SessionParams params, String goldenFileName, + protected RenderResult renderAndVerify(SessionParams params, String goldenFileName, long frameTimeNanos) throws ClassNotFoundException { - RenderResult result = RenderTestBase.render(sBridge, params, frameTimeNanos); + RenderResult result = render(sBridge, params, frameTimeNanos); assertNotNull(result.getImage()); verify(goldenFileName, result.getImage()); @@ -502,9 +538,9 @@ public class RenderTestBase { * exceptions and matches the provided image. */ @Nullable - protected static RenderResult renderAndVerify(SessionParams params, String goldenFileName) + protected RenderResult renderAndVerify(SessionParams params, String goldenFileName) throws ClassNotFoundException { - return RenderTestBase.renderAndVerify(params, goldenFileName, TimeUnit.SECONDS.toNanos(2)); + return renderAndVerify(params, goldenFileName, TimeUnit.SECONDS.toNanos(2)); } protected static ILayoutLog getLayoutLog() { @@ -513,7 +549,7 @@ public class RenderTestBase { @Override public void warning(@Nullable String tag, @NonNull String message, @Nullable Object viewCookie, @Nullable Object data) { - System.out.println("Warning " + tag + ": " + message); + System.out.println("BridgeClient: LayoutLog: Warning " + tag + ": " + message); failWithMsg(message); } @@ -612,14 +648,20 @@ public class RenderTestBase { @Before public void beforeTestCase() { // Default class loader with access to the app classes - mDefaultClassLoader = new ModuleClassLoader(APP_CLASSES_LOCATION, getClass().getClassLoader()); + mDefaultClassLoader = new ModuleClassLoader(getAppClassesLocation(), getClass().getClassLoader()); sRenderMessages.clear(); } @NonNull protected LayoutPullParser createParserFromPath(String layoutPath) throws FileNotFoundException { - return LayoutPullParser.createFromPath(APP_TEST_RES + "/layout/" + layoutPath); + return LayoutPullParser.createFromPath(getAppResources() + "/layout/" + layoutPath); + } + + @NonNull + protected LayoutPullParser createParserFromString(String layoutStr) + throws FileNotFoundException { + return LayoutPullParser.createFromString(layoutStr); } /** @@ -651,10 +693,18 @@ public class RenderTestBase { protected SessionParams createSessionParams(String layoutFileName, ConfigGenerator deviceConfig) throws ClassNotFoundException, FileNotFoundException { // Create the layout pull parser. - LayoutPullParser parser = createParserFromPath(layoutFileName); + + LayoutPullParser parser = null; + if (layoutFileName != null) { + parser = createParserFromPath(layoutFileName); + } + else { + parser = createParserFromString(S_EMPTY_FRAME); + + } // Create LayoutLibCallback. - LayoutLibTestCallback layoutLibCallback = - new LayoutLibTestCallback(getLogger(), mDefaultClassLoader); + LayoutlibBridgeClientCallback layoutLibCallback = + new LayoutlibBridgeClientCallback(getLogger(), mDefaultClassLoader, mPackageName); layoutLibCallback.initResources(); // TODO: Set up action bar handler properly to test menu rendering. // Create session params. @@ -662,6 +712,7 @@ public class RenderTestBase { .setParser(parser) .setConfigGenerator(deviceConfig) .setCallback(layoutLibCallback) + .setTheme(mThemeName, true) .build(); } @@ -680,6 +731,6 @@ public class RenderTestBase { .setRenderingMode(RenderingMode.NORMAL) .setTargetSdk(28) .setFlag(RenderParamsFlags.FLAG_DO_NOT_RENDER_ON_CREATE, true) - .setAssetRepository(new TestAssetRepository(TEST_RES_DIR + "/" + APP_TEST_ASSET)); + .setAssetRepository(new TestAssetRepository(TEST_RES_DIR + "/" + getAppTestAsset())); } } diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/RenderResult.java index 989d146bc1..989d146bc1 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/RenderResult.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java index 684cf12c4e..684cf12c4e 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/ConfigGenerator.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutPullParser.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/LayoutPullParser.java index af0c9e5209..af0c9e5209 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutPullParser.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/LayoutPullParser.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/LayoutlibBridgeClientCallback.java index cd3bad0e36..c322c7acf9 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/setup/LayoutLibTestCallback.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/setup/LayoutlibBridgeClientCallback.java @@ -48,23 +48,24 @@ import com.google.common.io.ByteStreams; import static com.android.ide.common.rendering.api.ResourceNamespace.RES_AUTO; -public class LayoutLibTestCallback extends LayoutlibCallback { - private static final String PACKAGE_NAME = "com.android.layoutlib.test.myapplication"; - +public class LayoutlibBridgeClientCallback extends LayoutlibCallback { private final Map<Integer, ResourceReference> mProjectResources = new HashMap<>(); private final Map<ResourceReference, Integer> mResources = new HashMap<>(); private final ILogger mLog; private final ActionBarCallback mActionBarCallback = new ActionBarCallback(); private final ClassLoader mModuleClassLoader; private String mAdaptiveIconMaskPath; + private String mPackageName; - public LayoutLibTestCallback(ILogger logger, ClassLoader classLoader) { + public LayoutlibBridgeClientCallback(ILogger logger, ClassLoader classLoader, String packageName) { mLog = logger; mModuleClassLoader = classLoader; + mPackageName = packageName; } public void initResources() throws ClassNotFoundException { - Class<?> rClass = mModuleClassLoader.loadClass(PACKAGE_NAME + ".R"); + int newValue = 20000000; + Class<?> rClass = mModuleClassLoader.loadClass(mPackageName + ".R"); Class<?>[] nestedClasses = rClass.getDeclaredClasses(); for (Class<?> resClass : nestedClasses) { final ResourceType resType = ResourceType.fromClassName(resClass.getSimpleName()); @@ -76,16 +77,23 @@ public class LayoutLibTestCallback extends LayoutlibCallback { final Class<?> type = field.getType(); try { if (type == int.class) { - final Integer value = (Integer) field.get(null); + final Integer val = (Integer) field.get(null); + Integer value = val; + if (value == 0){ + value = newValue++; + setFinalStatic(field, newValue); + } ResourceReference reference = new ResourceReference(RES_AUTO, resType, field.getName()); mProjectResources.put(value, reference); + + mResources.put(reference, value); } else if (!(type.isArray() && type.getComponentType() == int.class)) { mLog.error(null, "Unknown field type in R class: %1$s", type); } } catch (IllegalAccessException e) { - mLog.error(e, "Malformed R class: %1$s", PACKAGE_NAME + ".R"); + mLog.error(e, "Malformed R class: %1$s", mPackageName + ".R"); } } } @@ -93,6 +101,21 @@ public class LayoutLibTestCallback extends LayoutlibCallback { } } + static void setFinalStatic(Field field, Object newValue) { + field.setAccessible(true); + try { + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + field.set(null, newValue); + } + catch (NoSuchFieldException e){ + //mLog.error(null, "Unable to change field modifier for: %1$s", field.toString()); + } + catch (IllegalAccessException e){ + //mLog.error(null, "Unable to change field modifier for: %1$s", field.toString()); + } + } @Override public Object loadView(@NonNull String name, @NonNull Class[] constructorSignature, Object[] constructorArgs) @@ -105,7 +128,9 @@ public class LayoutLibTestCallback extends LayoutlibCallback { @Override public ResourceReference resolveResourceId(int id) { - return mProjectResources.get(id); + ResourceReference res = mProjectResources.get(id); + System.out.println("resolveResoyrceId:" + id + " -> " + res); + return res; } @Override @@ -171,12 +196,12 @@ public class LayoutLibTestCallback extends LayoutlibCallback { @Override public String getApplicationId() { - return PACKAGE_NAME; + return mPackageName; } @Override public String getResourcePackage() { - return PACKAGE_NAME; + return mPackageName; } @Override diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/ImageUtils.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/ImageUtils.java index a8adf95d1a..a8adf95d1a 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/ImageUtils.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/ImageUtils.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/ModuleClassLoader.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/ModuleClassLoader.java index d52fdcf9d4..d52fdcf9d4 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/ModuleClassLoader.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/ModuleClassLoader.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java index 35ade3454c..35ade3454c 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/SessionParamsBuilder.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/TestAssetRepository.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/TestAssetRepository.java index 54af92d6f5..54af92d6f5 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/TestAssetRepository.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/TestAssetRepository.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/TestUtils.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/TestUtils.java index 1df8e7978b..1df8e7978b 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/TestUtils.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/TestUtils.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/LongStatsCollector.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/LongStatsCollector.java index ee98b4ba3b..ee98b4ba3b 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/LongStatsCollector.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/LongStatsCollector.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/PerformanceRunner.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/PerformanceRunner.java index 7225a10dbe..7225a10dbe 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/PerformanceRunner.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/PerformanceRunner.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatement.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatement.java index 77a2b0e509..77a2b0e509 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatement.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatement.java diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatementResult.java b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatementResult.java index 59f90d2954..59f90d2954 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatementResult.java +++ b/bridge/bridge_client/src/com/android/layoutlib/bridge/intensive/util/perf/TimedStatementResult.java diff --git a/bridge/src/android/graphics/Typeface_Delegate.java b/bridge/src/android/graphics/Typeface_Delegate.java index d9d38ad4c3..d482108ad7 100644 --- a/bridge/src/android/graphics/Typeface_Delegate.java +++ b/bridge/src/android/graphics/Typeface_Delegate.java @@ -61,7 +61,7 @@ public final class Typeface_Delegate { if (typeface != null) { return typeface; } - + if(path == null || path.trim().isEmpty()) return null; String lowerCaseValue = path.toLowerCase(); if (lowerCaseValue.endsWith(AndroidConstants.DOT_XML)) { // create a block parser for the file diff --git a/bridge/src/android/graphics/fonts/Font_Builder_Delegate.java b/bridge/src/android/graphics/fonts/Font_Builder_Delegate.java index 490659bb60..bef3510e7c 100644 --- a/bridge/src/android/graphics/fonts/Font_Builder_Delegate.java +++ b/bridge/src/android/graphics/fonts/Font_Builder_Delegate.java @@ -46,6 +46,9 @@ public class Font_Builder_Delegate { @LayoutlibDelegate /*package*/ static ByteBuffer createBuffer(@NonNull AssetManager am, @NonNull String path, boolean isAsset, int cookie) throws IOException { + + if(path == null || path.trim().isEmpty()) return null; + try (InputStream assetStream = isAsset ? am.open(path, AssetManager.ACCESS_BUFFER) : am.openNonAsset(cookie, path, AssetManager.ACCESS_BUFFER)) { diff --git a/bridge/src/com/android/layoutlib/bridge/Bridge.java b/bridge/src/com/android/layoutlib/bridge/Bridge.java index 8672116a0e..8925fe8061 100644 --- a/bridge/src/com/android/layoutlib/bridge/Bridge.java +++ b/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -456,8 +456,8 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge { } } } finally { - scene.release(); - cleanupThread(); + scene.release(); + cleanupThread(); } return new BridgeRenderSession(scene, lastResult); diff --git a/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java index c6888d0998..a26f66a13a 100644 --- a/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java +++ b/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java @@ -481,7 +481,7 @@ public final class ResourceHelper { */ public static Typeface getFont(String fontName, BridgeContext context, Theme theme, boolean isFramework) { - if (fontName == null) { + if (fontName == null || fontName.strip().isEmpty()) { return null; } diff --git a/bridge/tests/Android.bp b/bridge/tests/Android.bp index 4aec3ad213..7359064991 100644 --- a/bridge/tests/Android.bp +++ b/bridge/tests/Android.bp @@ -26,23 +26,11 @@ java_test_host { ], java_resource_dirs: ["res"], - libs: [ - "layoutlib", - "kxml2-2.3.0", - "layoutlib_api-prebuilt", - "tools-common-prebuilt", - "ninepatch-prebuilt", - "sdk-common", - "junit", - "guava", - "mockito", - "objenesis", - "hamcrest", - "trove-prebuilt", + static_libs: [ + "kotlin-stdlib", + "layoutlib-bridge-client", ], - required: ["layoutlib"], - // Copy the jar to DIST_DIR for sdk builds dist: { targets: [ diff --git a/bridge/tests/run_tests.sh b/bridge/tests/run_tests.sh index e25d272591..91e88b6c94 100755 --- a/bridge/tests/run_tests.sh +++ b/bridge/tests/run_tests.sh @@ -1,60 +1,79 @@ #!/bin/bash +set -u readonly OUT_DIR="$1" readonly DIST_DIR="$2" -readonly BUILD_NUMBER="$3" - readonly SCRIPT_DIR="$(dirname "$0")" - +readonly BASE_DIR=`readlink -m ${SCRIPT_DIR}/../../../../` +echo "BASE_DIR: $BASE_DIR" readonly FAILURE_DIR=layoutlib-test-failures readonly FAILURE_ZIP=layoutlib-test-failures.zip -STUDIO_JDK=${SCRIPT_DIR}"/../../../../prebuilts/jdk/jdk11/linux-x86" -MISC_COMMON=${SCRIPT_DIR}"/../../../../prebuilts/misc/common" -OUT_INTERMEDIATES=${SCRIPT_DIR}"/../../../../out/soong/.intermediates" -NATIVE_LIBRARIES=${SCRIPT_DIR}"/../../../../out/host/linux-x86/lib64/" -SDK=${SCRIPT_DIR}"/../../../../out/host/linux-x86/sdk/sdk*/android-sdk*" -SDK_REPO=${SCRIPT_DIR}"/../../../../out/host/linux-x86/sdk-repo" -FONT_DIR=${SCRIPT_DIR}"/../../../../out/host/common/obj/PACKAGING/fonts_intermediates" -KEYBOARD_DIR=${SCRIPT_DIR}"/../../../../out/host/common/obj/PACKAGING/keyboards_intermediates" -ICU_DATA_PATH=${SCRIPT_DIR}"/../../../../out/host/linux-x86/com.android.i18n/etc/icu/icudt72l.dat" -TMP_DIR=$(mktemp -d) +readonly CLEAN_TMP_FILES=0 +readonly USE_SOONG=1 + +readonly APP_NAME="regression" +#readonly APP_NAME="test_HelloActivity" + +STUDIO_JDK="${BASE_DIR}/prebuilts/jdk/jdk17/linux-x86" +MISC_COMMON="${BASE_DIR}/prebuilts/misc/common" +OUT_INTERMEDIATES="${BASE_DIR}/out/soong/.intermediates" +NATIVE_LIBRARIES="${BASE_DIR}/out/host/linux-x86/lib64/" +JAVA_LIBRARIES="${BASE_DIR}/out/host/common/obj/JAVA_LIBRARIES/" +HOST_LIBRARIES="${BASE_DIR}/out/host/linux-x86/" +SDK="${BASE_DIR}/out/host/linux-x86/sdk/sdk*/android-sdk*" +SDK_REPO="${BASE_DIR}/out/host/linux-x86/sdk-repo" +FONT_DIR="${BASE_DIR}/out/host/common/obj/PACKAGING/fonts_intermediates" +KEYBOARD_DIR="${BASE_DIR}/out/host/common/obj/PACKAGING/keyboards_intermediates" +ICU_DATA_PATH="${BASE_DIR}/out/host/linux-x86/com.android.i18n/etc/icu/icudt72l.dat" +TMP_DIR=${OUT_DIR}"/layoutlib_tmp" + PLATFORM=${TMP_DIR}/"android" -# Copy resources to a temp directory -cp -r ${SDK}/platforms/android* ${PLATFORM} +if [ ! -d $TMP_DIR ]; then + # Copy resources to a temp directory + mkdir -p ${TMP_DIR} ${PLATFORM} ${TMP_DIR}/build-tools ${TMP_DIR}/compiled ${TMP_DIR}/manifest + + cp -r ${SDK}/platforms/android*/** ${PLATFORM} -# Unzip build-tools to access aapt2 -mkdir ${TMP_DIR}/build-tools -unzip -q ${SDK_REPO}/sdk-repo-linux-build-tools.zip -d ${TMP_DIR}/build-tools + # Unzip build-tools to access aapt2 + unzip -q ${SDK_REPO}/sdk-repo-linux-build-tools.zip -d ${TMP_DIR}/build-tools -# Compile 9-patch files -mkdir ${TMP_DIR}/compiled -mkdir ${TMP_DIR}/manifest -echo \ + # Compile 9-patch files + echo \ '<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.android.layoutlib" />' \ > ${TMP_DIR}/manifest/AndroidManifest.xml -find ${SDK}/platforms/android*/data/res -name "*.9.png" -print0 | xargs -0 ${TMP_DIR}/build-tools/android-*/aapt2 compile -o ${TMP_DIR}/compiled/ -find ${TMP_DIR}/compiled -name "*.flat" -print0 | xargs -0 -s 1000000 ${TMP_DIR}/build-tools/android-*/aapt2 link -o ${TMP_DIR}/compiled.apk --manifest ${TMP_DIR}/manifest/AndroidManifest.xml -R -unzip -q ${TMP_DIR}/compiled.apk -d ${TMP_DIR} -for f in ${TMP_DIR}/res/*; do mv "$f" "${f/-v4/}";done -cp -RL ${TMP_DIR}/res ${PLATFORM}/data + find ${SDK}/platforms/android*/data/res -name "*.9.png" -print0 | xargs -0 ${TMP_DIR}/build-tools/android-*/aapt2 compile -o ${TMP_DIR}/compiled/ + find ${TMP_DIR}/compiled -name "*.flat" -print0 | xargs -0 -s 1000000 ${TMP_DIR}/build-tools/android-*/aapt2 link -o ${TMP_DIR}/compiled.apk --manifest ${TMP_DIR}/manifest/AndroidManifest.xml -R + unzip -q ${TMP_DIR}/compiled.apk -d ${TMP_DIR} + for f in ${TMP_DIR}/res/*; do mv "$f" "${f/-v4/}";done + cp -RL ${TMP_DIR}/res ${PLATFORM}/data +fi + + +TEST_JARS="${OUT_INTERMEDIATES}/frameworks/layoutlib/bridge/tests/layoutlib-tests/linux_glibc_common/withres/layoutlib-tests.jar" +GRADLE_RES="-Dtest_res.dir=${SCRIPT_DIR}/res" # Run layoutlib tests -${STUDIO_JDK}/bin/java -ea \ +#DEBUGGER=' -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000 ' +DEBUGGER=' ' + +set -x +${STUDIO_JDK}/bin/java -ea $DEBUGGER \ -Dnative.lib.path=${NATIVE_LIBRARIES} \ -Dfont.dir=${FONT_DIR} \ -Dicu.data.path=${ICU_DATA_PATH} \ -Dkeyboard.dir=${KEYBOARD_DIR} \ -Dplatform.dir=${PLATFORM} \ - -Dtest_res.dir=${SCRIPT_DIR}/res \ -Dtest_failure.dir=${OUT_DIR}/${FAILURE_DIR} \ - -cp ${MISC_COMMON}/tools-common/tools-common-prebuilt.jar:${MISC_COMMON}/ninepatch/ninepatch-prebuilt.jar:${MISC_COMMON}/sdk-common/sdk-common.jar:${MISC_COMMON}/kxml2/kxml2-2.3.0.jar:${MISC_COMMON}/layoutlib_api/layoutlib_api-prebuilt.jar:${OUT_INTERMEDIATES}/prebuilts/tools/common/m2/trove-prebuilt/linux_glibc_common/combined/trove-prebuilt.jar:${OUT_INTERMEDIATES}/external/junit/junit/linux_glibc_common/javac/junit.jar:${OUT_INTERMEDIATES}/external/guava/guava-jre/linux_glibc_common/javac/guava-jre.jar:${OUT_INTERMEDIATES}/external/hamcrest/hamcrest-core/hamcrest/linux_glibc_common/javac/hamcrest.jar:${OUT_INTERMEDIATES}/external/mockito/mockito/linux_glibc_common/combined/mockito.jar:${OUT_INTERMEDIATES}/external/objenesis/objenesis/linux_glibc_common/javac/objenesis.jar:${OUT_INTERMEDIATES}/frameworks/layoutlib/bridge/layoutlib/linux_glibc_common/withres/layoutlib.jar:${OUT_INTERMEDIATES}/frameworks/layoutlib/temp_layoutlib/linux_glibc_common/gen/temp_layoutlib.jar:${OUT_INTERMEDIATES}/frameworks/layoutlib/bridge/tests/layoutlib-tests/linux_glibc_common/withres/layoutlib-tests.jar:${OUT_INTERMEDIATES}/external/kotlinc/kotlin-stdlib/linux_glibc_common/combined/kotlin-stdlib.jar \ + ${GRADLE_RES} \ + -cp ${TEST_JARS} \ org.junit.runner.JUnitCore \ com.android.layoutlib.bridge.intensive.Main - test_exit_code=$? +set +x + # Create zip of all failure screenshots if [[ -d "${OUT_DIR}/${FAILURE_DIR}" ]]; then @@ -67,7 +86,9 @@ if [[ -d "${DIST_DIR}" ]] && [[ -e "${OUT_DIR}/${FAILURE_ZIP}" ]]; then fi # Clean -rm -rf ${TMP_DIR} -rm -rf ${OUT_DIR}/${FAILURE_DIR} +if [[ $CLEAN_TMP_FILES -eq 1 ]]; then + rm -rf ${TMP_DIR} + rm -rf ${OUT_DIR}/${FAILURE_DIR} +fi exit ${test_exit_code} diff --git a/bridge/tests/src/com/android/layoutlib/bridge/android/BitmapTest.java b/bridge/tests/src/com/android/layoutlib/bridge/android/BitmapTest.java index d90cca30ce..873a58998c 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/android/BitmapTest.java +++ b/bridge/tests/src/com/android/layoutlib/bridge/android/BitmapTest.java @@ -109,7 +109,7 @@ public class BitmapTest extends RenderTestBase { int[] imageData = ((DataBufferInt) image.getRaster().getDataBuffer()).getData(); bitmap.getPixels(imageData, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight()); - RenderTestBase.verify("bitmap_decoder.png", image); + verify("bitmap_decoder.png", image); } finally { RenderActionTestUtil.setBridgeContext(oldContext); context.disposeResources(); diff --git a/bridge/tests/src/com/android/layoutlib/bridge/android/RenderTestBase.java b/bridge/tests/src/com/android/layoutlib/bridge/android/RenderTestBase.java new file mode 100644 index 0000000000..7e0a0b65a3 --- /dev/null +++ b/bridge/tests/src/com/android/layoutlib/bridge/android/RenderTestBase.java @@ -0,0 +1,34 @@ +package com.android.layoutlib.bridge.intensive; + +import org.junit.Before; +import java.util.Locale; + +import android.view.View; + +public class RenderTestBase extends BridgeClient { + public static final String S_PACKAGE_NAME = "com.android.layoutlib.test.myapplication"; + + public String getAppTestDir() { return "testApp/MyApplication"; } + public String getAppTestRes() { return getAppTestDir() + "/src/main/res"; } + public String getAppResources() { return getAppTestRes(); } + public String getAppTestAsset() { return getAppTestDir() + "/src/main/assets/"; } + public String getAppClassesLocation() { return getAppTestDir() + "/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/"; } + public View getView() { return null; } + public String getAppGoldenDir() { + String goldenImagePath = getAppTestDir(); + boolean isMac = System.getProperty("os.name").toLowerCase(Locale.US).contains("mac"); + if (isMac) { + goldenImagePath += "/golden-mac/"; + } else { + goldenImagePath += "/golden/"; + } + return goldenImagePath; + } + + + @Before + public void initPackageName() { + setPackageName(S_PACKAGE_NAME); + } + +} diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/LayoutLibTestCallback.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/LayoutLibTestCallback.java new file mode 100644 index 0000000000..7c6c84bc78 --- /dev/null +++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/LayoutLibTestCallback.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.layoutlib.bridge.intensive.setup; + +import com.android.utils.ILogger; + +public class LayoutLibTestCallback extends LayoutlibBridgeClientCallback { + private static final String S_PACKAGE_NAME = "com.android.layoutlib.test.myapplication"; + + public LayoutLibTestCallback(ILogger logger, ClassLoader classLoader) { super(logger, classLoader, S_PACKAGE_NAME); } +} diff --git a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java index 11ba0d3734..c6829addbb 100644 --- a/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java +++ b/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java @@ -1440,7 +1440,7 @@ public class RenderTests extends RenderTestBase { .disableDecoration() .build(); - RenderResult result = RenderTestBase.render(sBridge, params, -1); + RenderResult result = render(sBridge, params, -1); BufferedImage image = result.getImage(); assertNotNull(image); Graphics2D g = (Graphics2D) image.getGraphics(); @@ -1449,7 +1449,7 @@ public class RenderTests extends RenderTestBase { paintBorders(g, 0, 0, 0, vInfo); } - RenderTestBase.verify("view_boundaries.png", image); + verify("view_boundaries.png", image); } /** |