aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRam Peri <ramperi@google.com>2022-11-21 12:22:39 -0500
committerJerome Gaillard <jgaillard@google.com>2023-02-08 16:01:13 +0000
commitdd58e4d9509696d562cffdc5388487d1542358bd (patch)
tree656a1d4977819a118f9d1bb704ff9e20efc6d233
parent929dbb49456c0220de71e2d7d36fb770028c0e65 (diff)
downloadlayoutlib-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.bp59
-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.java2
-rw-r--r--bridge/src/android/graphics/fonts/Font_Builder_Delegate.java3
-rw-r--r--bridge/src/com/android/layoutlib/bridge/Bridge.java4
-rw-r--r--bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java2
-rw-r--r--bridge/tests/Android.bp18
-rwxr-xr-xbridge/tests/run_tests.sh87
-rw-r--r--bridge/tests/src/com/android/layoutlib/bridge/android/BitmapTest.java2
-rw-r--r--bridge/tests/src/com/android/layoutlib/bridge/android/RenderTestBase.java34
-rw-r--r--bridge/tests/src/com/android/layoutlib/bridge/intensive/LayoutLibTestCallback.java25
-rw-r--r--bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderTests.java4
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);
}
/**