Bir `ImageView 'özel bir bitmap kümesinin olduğunu doğrulayan bir Espresso eşleştirici yazmak istiyorum. Uygulamanın Glide üzerinden görüntü yüklemesi olduğundan, gerçekte beklenen ve gerçek bitmapleri karşılaştırabilmeden önce, aynı zamanda test tarafımda da kırpmayı/merkezlemeyi hesaba katmam gerektiğini düşündüm. İşteGörüntüyü Glide ile eşzamanlı olarak yükleme
Ben şimdiye kadar geldi budur:
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);
}
Şimdi burada mesele bir kilitlenme olması tabii ki. Ana iş parçacığıyım (eşleştirici ana iş parçacığı IIRC üzerinde çalıştırılır) ve Glide bitmap'i yüklemek için bir arka uç iş parçacığı ister ve sonra ana iş parçacığına ('onResourceReady') kendiliğinden döner. Bu yüzden, ana iş parçacığını devam ettirirken, içeride yayınlanan sonuç için dışarıdan beklemem gerekiyor.
I (başarısız) // ???
içinde Looper.loop()
yoluyla cari Lüperin ilerletmek için çalıştı ve aynı zamanda düzenli kilit/bekleme yaklaşımını denedik, ama hiçbir şey çalıştı. Fikirlerim tükendi ...
maalesef sadece tekrar denedim. –