Loading tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java +41 −56 Original line number Diff line number Diff line Loading @@ -53,7 +53,6 @@ import org.junit.runner.Description; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PackageInstaller.Session; import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; Loading @@ -61,29 +60,12 @@ import android.util.DisplayMetrics; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.nio.file.CopyOption; import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Enumeration; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.BiPredicate; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import com.google.android.collect.Lists; Loading Loading @@ -453,15 +435,8 @@ public class Main { SessionParams params = getSessionParams(parser, ConfigGenerator.NEXUS_5, layoutLibCallback, "Theme.Material.Light.NoActionBar", false, RenderingMode.NORMAL, 22); try { renderAndVerify(params, "scrolled.png"); } catch(AssertionError e) { // In this particular test we do not care about the image similarity. // TODO: Create new render method that allows to not compare images. if (!e.getLocalizedMessage().startsWith("Images differ")) { throw e; } } render(params, -1); assertTrue((Boolean)field.get(null)); field.set(null, false); Loading Loading @@ -654,22 +629,16 @@ public class Main { return new LayoutPullParser(APP_TEST_RES + "/layout/" + layoutPath); } /** * Create a new rendering session and test that rendering the given layout doesn't throw any * exceptions and matches the provided image. * <p> * If frameTimeNanos is >= 0 a frame will be executed during the rendering. The time indicates * how far in the future is. */ @Nullable private RenderResult renderAndVerify(SessionParams params, String goldenFileName, long frameTimeNanos) throws ClassNotFoundException { @NonNull private static RenderResult render(SessionParams params, long frameTimeNanos) { // TODO: Set up action bar handler properly to test menu rendering. // Create session params. System_Delegate.setBootTimeNanos(TimeUnit.MILLISECONDS.toNanos(871732800000L)); System_Delegate.setNanosTime(TimeUnit.MILLISECONDS.toNanos(871732800000L)); RenderSession session = sBridge.createSession(params); try { if (frameTimeNanos != -1) { session.setElapsedFrameTimeNanos(frameTimeNanos); } Loading @@ -684,18 +653,34 @@ public class Main { getLogger().error(session.getResult().getException(), session.getResult().getErrorMessage()); } try { String goldenImagePath = APP_TEST_DIR + "/golden/" + goldenFileName; ImageUtils.requireSimilar(goldenImagePath, session.getImage()); return RenderResult.getFromSession(session); } catch (IOException e) { getLogger().error(e, e.getMessage()); } finally { session.dispose(); } } return null; /** * Create a new rendering session and test that rendering the given layout doesn't throw any * exceptions and matches the provided image. * <p> * If frameTimeNanos is >= 0 a frame will be executed during the rendering. The time indicates * how far in the future is. */ @Nullable private static RenderResult renderAndVerify(SessionParams params, String goldenFileName, long frameTimeNanos) throws ClassNotFoundException { RenderResult result = Main.render(params, frameTimeNanos); try { String goldenImagePath = APP_TEST_DIR + "/golden/" + goldenFileName; assertNotNull(result.getImage()); ImageUtils.requireSimilar(goldenImagePath, result.getImage()); } catch (IOException e) { getLogger().error(e, e.getMessage()); } return result; } /** Loading @@ -703,9 +688,9 @@ public class Main { * exceptions and matches the provided image. */ @Nullable private RenderResult renderAndVerify(SessionParams params, String goldenFileName) private static RenderResult renderAndVerify(SessionParams params, String goldenFileName) throws ClassNotFoundException { return renderAndVerify(params, goldenFileName, -1); return Main.renderAndVerify(params, goldenFileName, -1); } /** Loading tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java +11 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.ide.common.rendering.api.ViewInfo; import android.annotation.NonNull; import android.annotation.Nullable; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; import java.util.List; Loading @@ -31,19 +32,22 @@ class RenderResult { private final List<ViewInfo> mRootViews; private final List<ViewInfo> mSystemViews; private final Result mRenderResult; private BufferedImage mImage; private RenderResult(@Nullable Result result, @Nullable List<ViewInfo> systemViewInfoList, @Nullable List<ViewInfo> rootViewInfoList) { @Nullable List<ViewInfo> rootViewInfoList, @Nullable BufferedImage image) { mSystemViews = systemViewInfoList == null ? Collections.emptyList() : systemViewInfoList; mRootViews = rootViewInfoList == null ? Collections.emptyList() : rootViewInfoList; mRenderResult = result; mImage = image; } @NonNull static RenderResult getFromSession(@NonNull RenderSession session) { return new RenderResult(session.getResult(), new ArrayList<>(session.getSystemRootViews()), new ArrayList<>(session.getRootViews())); new ArrayList<>(session.getRootViews()), session.getImage()); } @Nullable Loading @@ -60,4 +64,9 @@ class RenderResult { public List<ViewInfo> getSystemViews() { return mSystemViews; } @Nullable public BufferedImage getImage() { return mImage; } } Loading
tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java +41 −56 Original line number Diff line number Diff line Loading @@ -53,7 +53,6 @@ import org.junit.runner.Description; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.PackageInstaller.Session; import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; Loading @@ -61,29 +60,12 @@ import android.util.DisplayMetrics; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.nio.file.CopyOption; import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Enumeration; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.BiPredicate; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import com.google.android.collect.Lists; Loading Loading @@ -453,15 +435,8 @@ public class Main { SessionParams params = getSessionParams(parser, ConfigGenerator.NEXUS_5, layoutLibCallback, "Theme.Material.Light.NoActionBar", false, RenderingMode.NORMAL, 22); try { renderAndVerify(params, "scrolled.png"); } catch(AssertionError e) { // In this particular test we do not care about the image similarity. // TODO: Create new render method that allows to not compare images. if (!e.getLocalizedMessage().startsWith("Images differ")) { throw e; } } render(params, -1); assertTrue((Boolean)field.get(null)); field.set(null, false); Loading Loading @@ -654,22 +629,16 @@ public class Main { return new LayoutPullParser(APP_TEST_RES + "/layout/" + layoutPath); } /** * Create a new rendering session and test that rendering the given layout doesn't throw any * exceptions and matches the provided image. * <p> * If frameTimeNanos is >= 0 a frame will be executed during the rendering. The time indicates * how far in the future is. */ @Nullable private RenderResult renderAndVerify(SessionParams params, String goldenFileName, long frameTimeNanos) throws ClassNotFoundException { @NonNull private static RenderResult render(SessionParams params, long frameTimeNanos) { // TODO: Set up action bar handler properly to test menu rendering. // Create session params. System_Delegate.setBootTimeNanos(TimeUnit.MILLISECONDS.toNanos(871732800000L)); System_Delegate.setNanosTime(TimeUnit.MILLISECONDS.toNanos(871732800000L)); RenderSession session = sBridge.createSession(params); try { if (frameTimeNanos != -1) { session.setElapsedFrameTimeNanos(frameTimeNanos); } Loading @@ -684,18 +653,34 @@ public class Main { getLogger().error(session.getResult().getException(), session.getResult().getErrorMessage()); } try { String goldenImagePath = APP_TEST_DIR + "/golden/" + goldenFileName; ImageUtils.requireSimilar(goldenImagePath, session.getImage()); return RenderResult.getFromSession(session); } catch (IOException e) { getLogger().error(e, e.getMessage()); } finally { session.dispose(); } } return null; /** * Create a new rendering session and test that rendering the given layout doesn't throw any * exceptions and matches the provided image. * <p> * If frameTimeNanos is >= 0 a frame will be executed during the rendering. The time indicates * how far in the future is. */ @Nullable private static RenderResult renderAndVerify(SessionParams params, String goldenFileName, long frameTimeNanos) throws ClassNotFoundException { RenderResult result = Main.render(params, frameTimeNanos); try { String goldenImagePath = APP_TEST_DIR + "/golden/" + goldenFileName; assertNotNull(result.getImage()); ImageUtils.requireSimilar(goldenImagePath, result.getImage()); } catch (IOException e) { getLogger().error(e, e.getMessage()); } return result; } /** Loading @@ -703,9 +688,9 @@ public class Main { * exceptions and matches the provided image. */ @Nullable private RenderResult renderAndVerify(SessionParams params, String goldenFileName) private static RenderResult renderAndVerify(SessionParams params, String goldenFileName) throws ClassNotFoundException { return renderAndVerify(params, goldenFileName, -1); return Main.renderAndVerify(params, goldenFileName, -1); } /** Loading
tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/RenderResult.java +11 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import com.android.ide.common.rendering.api.ViewInfo; import android.annotation.NonNull; import android.annotation.Nullable; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Collections; import java.util.List; Loading @@ -31,19 +32,22 @@ class RenderResult { private final List<ViewInfo> mRootViews; private final List<ViewInfo> mSystemViews; private final Result mRenderResult; private BufferedImage mImage; private RenderResult(@Nullable Result result, @Nullable List<ViewInfo> systemViewInfoList, @Nullable List<ViewInfo> rootViewInfoList) { @Nullable List<ViewInfo> rootViewInfoList, @Nullable BufferedImage image) { mSystemViews = systemViewInfoList == null ? Collections.emptyList() : systemViewInfoList; mRootViews = rootViewInfoList == null ? Collections.emptyList() : rootViewInfoList; mRenderResult = result; mImage = image; } @NonNull static RenderResult getFromSession(@NonNull RenderSession session) { return new RenderResult(session.getResult(), new ArrayList<>(session.getSystemRootViews()), new ArrayList<>(session.getRootViews())); new ArrayList<>(session.getRootViews()), session.getImage()); } @Nullable Loading @@ -60,4 +64,9 @@ class RenderResult { public List<ViewInfo> getSystemViews() { return mSystemViews; } @Nullable public BufferedImage getImage() { return mImage; } }