6
6
7
7
import static junit .framework .TestCase .assertNull ;
8
8
import static org .junit .Assert .assertEquals ;
9
+ import static org .mockito .ArgumentMatchers .any ;
10
+ import static org .mockito .Mockito .doAnswer ;
11
+ import static org .mockito .Mockito .mock ;
9
12
13
+ import android .os .Handler ;
10
14
import androidx .annotation .NonNull ;
11
15
import io .flutter .embedding .engine .systemchannels .PlatformChannel ;
12
16
import io .flutter .plugin .common .BinaryMessenger ;
19
23
import java .util .List ;
20
24
import org .junit .Before ;
21
25
import org .junit .Test ;
26
+ import org .mockito .invocation .InvocationOnMock ;
27
+ import org .mockito .stubbing .Answer ;
22
28
23
29
public class DartMessengerTest {
24
30
/** A {@link BinaryMessenger} implementation that does nothing but save its messages. */
@@ -43,20 +49,24 @@ List<ByteBuffer> getMessages() {
43
49
}
44
50
}
45
51
52
+ private Handler mockHandler ;
46
53
private DartMessenger dartMessenger ;
47
54
private FakeBinaryMessenger fakeBinaryMessenger ;
48
55
49
56
@ Before
50
57
public void setUp () {
58
+ mockHandler = mock (Handler .class );
51
59
fakeBinaryMessenger = new FakeBinaryMessenger ();
52
- dartMessenger = new DartMessenger (fakeBinaryMessenger , 0 );
60
+ dartMessenger = new DartMessenger (fakeBinaryMessenger , 0 , mockHandler );
53
61
}
54
62
55
63
@ Test
56
64
public void sendCameraErrorEvent_includesErrorDescriptions () {
57
- dartMessenger . sendCameraErrorEvent ( "error description" );
65
+ doAnswer ( createPostHandlerAnswer ()). when ( mockHandler ). post ( any ( Runnable . class ) );
58
66
67
+ dartMessenger .sendCameraErrorEvent ("error description" );
59
68
List <ByteBuffer > sentMessages = fakeBinaryMessenger .getMessages ();
69
+
60
70
assertEquals (1 , sentMessages .size ());
61
71
MethodCall call = decodeSentMessage (sentMessages .get (0 ));
62
72
assertEquals ("error" , call .method );
@@ -65,6 +75,7 @@ public void sendCameraErrorEvent_includesErrorDescriptions() {
65
75
66
76
@ Test
67
77
public void sendCameraInitializedEvent_includesPreviewSize () {
78
+ doAnswer (createPostHandlerAnswer ()).when (mockHandler ).post (any (Runnable .class ));
68
79
dartMessenger .sendCameraInitializedEvent (0 , 0 , ExposureMode .auto , FocusMode .auto , true , true );
69
80
70
81
List <ByteBuffer > sentMessages = fakeBinaryMessenger .getMessages ();
@@ -81,6 +92,7 @@ public void sendCameraInitializedEvent_includesPreviewSize() {
81
92
82
93
@ Test
83
94
public void sendCameraClosingEvent () {
95
+ doAnswer (createPostHandlerAnswer ()).when (mockHandler ).post (any (Runnable .class ));
84
96
dartMessenger .sendCameraClosingEvent ();
85
97
86
98
List <ByteBuffer > sentMessages = fakeBinaryMessenger .getMessages ();
@@ -92,6 +104,7 @@ public void sendCameraClosingEvent() {
92
104
93
105
@ Test
94
106
public void sendDeviceOrientationChangedEvent () {
107
+ doAnswer (createPostHandlerAnswer ()).when (mockHandler ).post (any (Runnable .class ));
95
108
dartMessenger .sendDeviceOrientationChangeEvent (PlatformChannel .DeviceOrientation .PORTRAIT_UP );
96
109
97
110
List <ByteBuffer > sentMessages = fakeBinaryMessenger .getMessages ();
@@ -101,6 +114,19 @@ public void sendDeviceOrientationChangedEvent() {
101
114
assertEquals (call .argument ("orientation" ), "portraitUp" );
102
115
}
103
116
117
+ private static Answer <Boolean > createPostHandlerAnswer () {
118
+ return new Answer <Boolean >() {
119
+ @ Override
120
+ public Boolean answer (InvocationOnMock invocation ) throws Throwable {
121
+ Runnable runnable = invocation .getArgument (0 , Runnable .class );
122
+ if (runnable != null ) {
123
+ runnable .run ();
124
+ }
125
+ return true ;
126
+ }
127
+ };
128
+ }
129
+
104
130
private MethodCall decodeSentMessage (ByteBuffer sentMessage ) {
105
131
sentMessage .position (0 );
106
132
0 commit comments