@@ -658,36 +658,19 @@ public void flutterImageView_acquiresImageAndInvalidates() {
658658 verify (imageView , times (1 )).invalidate ();
659659 }
660660
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-
682661 @ Test
683662 @ SuppressLint ("WrongCall" ) /*View#onDraw*/
684- public void flutterImageView_acquiresMaxImagesAtMost () {
663+ public void flutterImageView_acquiresImageClosesPreviousImageUnlessNoNewImage () {
685664 final ImageReader mockReader = mock (ImageReader .class );
686665 when (mockReader .getMaxImages ()).thenReturn (3 );
687666
688667 final Image mockImage = mock (Image .class );
689668 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 );
691674
692675 final FlutterImageView imageView =
693676 spy (
@@ -700,33 +683,27 @@ public void flutterImageView_acquiresMaxImagesAtMost() {
700683 imageView .attachToRenderer (new FlutterRenderer (jni ));
701684 doNothing ().when (imageView ).invalidate ();
702685
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
708693
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
712695
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
716697
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
720701
721- assertTrue (imageView .acquireLatestImage ()); // 2 images
722- assertTrue (imageView .acquireLatestImage ()); // 3 images
723- assertTrue (imageView .acquireLatestImage ()); // 3 images
724- assertTrue (imageView .acquireLatestImage ()); // 3 images
725702 verify (mockReader , times (6 )).acquireLatestImage ();
726703 }
727704
728705 @ Test
729- public void flutterImageView_detachFromRendererClosesAllImages () {
706+ public void flutterImageView_detachFromRendererClosesPreviousImage () {
730707 final ImageReader mockReader = mock (ImageReader .class );
731708 when (mockReader .getMaxImages ()).thenReturn (2 );
732709
@@ -746,54 +723,12 @@ public void flutterImageView_detachFromRendererClosesAllImages() {
746723 doNothing ().when (imageView ).invalidate ();
747724 imageView .acquireLatestImage ();
748725 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 ));
788726 verify (mockImage , times (1 )).close ();
789727
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 ();
797732 }
798733
799734 @ Test
0 commit comments