Tôi muốn viết một trình so khớp Espresso xác minh rằng một `ImageView 'có một tập bitmap cụ thể. Kể từ khi ứng dụng tải hình ảnh qua Glide, tôi nghĩ rằng tôi phải làm tương tự ở phía thử nghiệm để tính toán cắt xén/định tâm trước khi tôi thực sự có thể so sánh các bitmap dự kiến và thực tế.Đang tải hình ảnh đồng bộ với Glide
Dưới đây là những gì tôi đã đưa ra cho đến nay:
BitmapRequestBuilder<Uri, Bitmap> bitmapRequest = Glide.with(imageView.getContext())
.load(Uri.parse("file:///android_asset/" + mPath))
.asBitmap();
switch (imageView.getScaleType()) {
case CENTER_CROP:
bitmapRequest.centerCrop();
break;
case FIT_CENTER:
case FIT_START:
case FIT_END:
bitmapRequest.fitCenter();
break;
default:
// no scaling applied to the ImageView under test
}
AtomicReference<Bitmap> bmRef = new AtomicReference<>();
bitmapRequest.into(new SimpleTarget<Bitmap>(
imageView.getMeasuredWidth(),
imageView.getMeasuredHeight()
) {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
bmRef.set(resource);
}
});
// ???
try {
Bitmap expected = bmRef.get();
return expected.sameAs(bitmap);
} catch (Exception e) {
throw new IllegalStateException("could not load asset " + mPath, e);
}
Bây giờ vấn đề ở đây là tất nhiên là tôi có một bế tắc. Tôi đang trên thread chính (matcher được thực hiện trên chủ đề chính IIRC) và Glide muốn một chuỗi phụ trợ để tải bitmap và sau đó trả về trên chính thread (trong 'onResourceReady') chính nó. Vì vậy, tôi cần phải chờ đợi từ bên ngoài cho kết quả được đăng trên bên trong, trong khi vẫn giữ thread chính chạy.
I (không thành công) đã cố gắng nâng cấp số looper hiện tại qua Looper.loop()
trong // ???
và cũng đã thử phương pháp khóa/chờ thông thường, nhưng không có tác dụng. Tôi không có ý tưởng ...
này không hoạt động trong trường hợp này, không may, chỉ cần thử nó một lần nữa. –