@@ -658,36 +658,19 @@ public void flutterImageView_acquiresImageAndInvalidates() {
658
658
verify (imageView , times (1 )).invalidate ();
659
659
}
660
660
661
- @ Test
662
- public void flutterImageView_acquireLatestImageReturnsFalse () {
663
- final ImageReader mockReader = mock (ImageReader .class );
664
- when (mockReader .getMaxImages ()).thenReturn (2 );
665
-
666
- final FlutterImageView imageView =
667
- spy (
668
- new FlutterImageView (
669
- RuntimeEnvironment .application ,
670
- mockReader ,
671
- FlutterImageView .SurfaceKind .background ));
672
-
673
- assertFalse (imageView .acquireLatestImage ());
674
-
675
- final FlutterJNI jni = mock (FlutterJNI .class );
676
- imageView .attachToRenderer (new FlutterRenderer (jni ));
677
-
678
- when (mockReader .acquireLatestImage ()).thenReturn (null );
679
- assertFalse (imageView .acquireLatestImage ());
680
- }
681
-
682
661
@ Test
683
662
@ SuppressLint ("WrongCall" ) /*View#onDraw*/
684
- public void flutterImageView_acquiresMaxImagesAtMost () {
663
+ public void flutterImageView_acquiresImageClosesPreviousImageUnlessNoNewImage () {
685
664
final ImageReader mockReader = mock (ImageReader .class );
686
665
when (mockReader .getMaxImages ()).thenReturn (3 );
687
666
688
667
final Image mockImage = mock (Image .class );
689
668
when (mockImage .getPlanes ()).thenReturn (new Plane [0 ]);
690
- when (mockReader .acquireLatestImage ()).thenReturn (mockImage );
669
+ // Mock no latest image on the second time
670
+ when (mockReader .acquireLatestImage ())
671
+ .thenReturn (mockImage )
672
+ .thenReturn (null )
673
+ .thenReturn (mockImage );
691
674
692
675
final FlutterImageView imageView =
693
676
spy (
@@ -700,33 +683,27 @@ public void flutterImageView_acquiresMaxImagesAtMost() {
700
683
imageView .attachToRenderer (new FlutterRenderer (jni ));
701
684
doNothing ().when (imageView ).invalidate ();
702
685
703
- assertTrue (imageView .acquireLatestImage ()); // 1 image
704
- assertTrue (imageView .acquireLatestImage ()); // 2 images
705
- assertTrue (imageView .acquireLatestImage ()); // 3 images
706
- assertTrue (imageView .acquireLatestImage ()); // 3 images
707
- verify (mockReader , times (3 )).acquireLatestImage ();
686
+ assertTrue (imageView .acquireLatestImage ()); // No previous, acquire latest image
687
+ assertFalse (
688
+ imageView .acquireLatestImage ()); // Mock no image when acquire, don't close, and assertFalse
689
+ assertTrue (imageView .acquireLatestImage ()); // Acquire latest image and close previous
690
+ assertTrue (imageView .acquireLatestImage ()); // Acquire latest image and close previous
691
+ assertTrue (imageView .acquireLatestImage ()); // Acquire latest image and close previous
692
+ verify (mockImage , times (3 )).close (); // Close 3 times
708
693
709
- imageView .onDraw (mock (Canvas .class )); // 3 images
710
- assertTrue (imageView .acquireLatestImage ()); // 3 images
711
- verify (mockReader , times (3 )).acquireLatestImage ();
694
+ imageView .onDraw (mock (Canvas .class )); // Draw latest image
712
695
713
- imageView .onDraw (mock (Canvas .class )); // 2 images
714
- assertTrue (imageView .acquireLatestImage ()); // 3 images
715
- verify (mockReader , times (4 )).acquireLatestImage ();
696
+ assertTrue (imageView .acquireLatestImage ()); // acquire latest image and close previous
716
697
717
- imageView .onDraw (mock (Canvas .class )); // 2 images
718
- imageView .onDraw (mock (Canvas .class )); // 1 image
719
- imageView .onDraw (mock (Canvas .class )); // 1 image
698
+ imageView .onDraw (mock (Canvas .class )); // Draw latest image
699
+ imageView .onDraw (mock (Canvas .class )); // Draw latest image
700
+ imageView .onDraw (mock (Canvas .class )); // Draw latest image
720
701
721
- assertTrue (imageView .acquireLatestImage ()); // 2 images
722
- assertTrue (imageView .acquireLatestImage ()); // 3 images
723
- assertTrue (imageView .acquireLatestImage ()); // 3 images
724
- assertTrue (imageView .acquireLatestImage ()); // 3 images
725
702
verify (mockReader , times (6 )).acquireLatestImage ();
726
703
}
727
704
728
705
@ Test
729
- public void flutterImageView_detachFromRendererClosesAllImages () {
706
+ public void flutterImageView_detachFromRendererClosesPreviousImage () {
730
707
final ImageReader mockReader = mock (ImageReader .class );
731
708
when (mockReader .getMaxImages ()).thenReturn (2 );
732
709
@@ -746,54 +723,12 @@ public void flutterImageView_detachFromRendererClosesAllImages() {
746
723
doNothing ().when (imageView ).invalidate ();
747
724
imageView .acquireLatestImage ();
748
725
imageView .acquireLatestImage ();
749
- imageView .detachFromRenderer ();
750
-
751
- verify (mockImage , times (2 )).close ();
752
- }
753
-
754
- @ Test
755
- @ SuppressLint ("WrongCall" ) /*View#onDraw*/
756
- public void flutterImageView_onDrawClosesAllImages () {
757
- final ImageReader mockReader = mock (ImageReader .class );
758
- when (mockReader .getMaxImages ()).thenReturn (2 );
759
-
760
- final Image mockImage = mock (Image .class );
761
- when (mockImage .getPlanes ()).thenReturn (new Plane [0 ]);
762
- when (mockReader .acquireLatestImage ()).thenReturn (mockImage );
763
-
764
- final FlutterImageView imageView =
765
- spy (
766
- new FlutterImageView (
767
- RuntimeEnvironment .application ,
768
- mockReader ,
769
- FlutterImageView .SurfaceKind .background ));
770
-
771
- final FlutterJNI jni = mock (FlutterJNI .class );
772
- imageView .attachToRenderer (new FlutterRenderer (jni ));
773
-
774
- doNothing ().when (imageView ).invalidate ();
775
- imageView .acquireLatestImage ();
776
- imageView .acquireLatestImage ();
777
-
778
- imageView .onDraw (mock (Canvas .class ));
779
- imageView .onDraw (mock (Canvas .class ));
780
-
781
- // 1 image is closed and 1 is active.
782
- verify (mockImage , times (1 )).close ();
783
- verify (mockReader , times (2 )).acquireLatestImage ();
784
-
785
- // This call doesn't do anything because there isn't
786
- // an image in the queue.
787
- imageView .onDraw (mock (Canvas .class ));
788
726
verify (mockImage , times (1 )).close ();
789
727
790
- // Aquire another image and push it to the queue.
791
- imageView .acquireLatestImage ();
792
- verify (mockReader , times (3 )).acquireLatestImage ();
793
-
794
- // Then, the second image is closed.
795
- imageView .onDraw (mock (Canvas .class ));
796
- verify (mockImage , times (2 )).close ();
728
+ imageView .detachFromRenderer ();
729
+ // There's an acquireLatestImage() in detachFromRenderer(),
730
+ // so it will be 2 times called close() inside detachFromRenderer()
731
+ verify (mockImage , times (3 )).close ();
797
732
}
798
733
799
734
@ Test
0 commit comments