11// Copyright 2013 The Flutter Authors. All rights reserved.
22// Use of this source code is governed by a BSD-style license that can be
33// found in the LICENSE file.
4- // FLUTTER_NOLINT
54
65#include " flutter/fml/mapping.h"
76#include " flutter/fml/synchronization/count_down_latch.h"
1918namespace flutter {
2019namespace testing {
2120
22- using DartIsolateTest = FixtureTest;
21+ class DartIsolateTest : public FixtureTest {
22+ public:
23+ DartIsolateTest () {}
24+
25+ void Wait () { latch_.Wait (); }
26+
27+ void Signal () { latch_.Signal (); }
28+
29+ private:
30+ fml::AutoResetWaitableEvent latch_;
31+
32+ FML_DISALLOW_COPY_AND_ASSIGN (DartIsolateTest);
33+ };
2334
2435TEST_F (DartIsolateTest, RootIsolateCreationAndShutdown) {
2536 ASSERT_FALSE (DartVMRef::IsInstanceRunning ());
@@ -153,11 +164,10 @@ TEST_F(DartIsolateTest, CanRunDartCodeCodeSynchronously) {
153164
154165TEST_F (DartIsolateTest, CanRegisterNativeCallback) {
155166 ASSERT_FALSE (DartVMRef::IsInstanceRunning ());
156- fml::AutoResetWaitableEvent latch;
157167 AddNativeCallback (" NotifyNative" ,
158- CREATE_NATIVE_ENTRY (([&latch ](Dart_NativeArguments args) {
168+ CREATE_NATIVE_ENTRY (([this ](Dart_NativeArguments args) {
159169 FML_LOG (ERROR) << " Hello from Dart!" ;
160- latch. Signal ();
170+ Signal ();
161171 })));
162172 const auto settings = CreateSettingsForFixture ();
163173 auto vm_ref = DartVMRef::Create (settings);
@@ -173,7 +183,7 @@ TEST_F(DartIsolateTest, CanRegisterNativeCallback) {
173183 " canRegisterNativeCallback" , {}, GetFixturesPath ());
174184 ASSERT_TRUE (isolate);
175185 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
176- latch. Wait ();
186+ Wait ();
177187}
178188
179189TEST_F (DartIsolateTest, CanSaveCompilationTrace) {
@@ -182,12 +192,11 @@ TEST_F(DartIsolateTest, CanSaveCompilationTrace) {
182192 GTEST_SKIP ();
183193 return ;
184194 }
185- fml::AutoResetWaitableEvent latch;
186195 AddNativeCallback (" NotifyNative" ,
187- CREATE_NATIVE_ENTRY (([&latch ](Dart_NativeArguments args) {
196+ CREATE_NATIVE_ENTRY (([this ](Dart_NativeArguments args) {
188197 ASSERT_TRUE (tonic::DartConverter<bool >::FromDart (
189198 Dart_GetNativeArgument (args, 0 )));
190- latch. Signal ();
199+ Signal ();
191200 })));
192201
193202 const auto settings = CreateSettingsForFixture ();
@@ -205,31 +214,52 @@ TEST_F(DartIsolateTest, CanSaveCompilationTrace) {
205214 ASSERT_TRUE (isolate);
206215 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
207216
208- latch. Wait ();
217+ Wait ();
209218}
210219
211- TEST_F (DartIsolateTest, CanLaunchSecondaryIsolates) {
212- fml::CountDownLatch latch (3 );
213- fml::AutoResetWaitableEvent child_shutdown_latch;
214- fml::AutoResetWaitableEvent root_isolate_shutdown_latch;
220+ class DartSecondaryIsolateTest : public FixtureTest {
221+ public:
222+ DartSecondaryIsolateTest () : latch_(3 ) {}
223+
224+ void LatchCountDown () { latch_.CountDown (); }
225+
226+ void LatchWait () { latch_.Wait (); }
227+
228+ void ChildShutdownSignal () { child_shutdown_latch_.Signal (); }
229+
230+ void ChildShutdownWait () { child_shutdown_latch_.Wait (); }
231+
232+ void RootIsolateShutdownSignal () { root_isolate_shutdown_latch_.Signal (); }
233+
234+ bool RootIsolateIsSignaled () {
235+ return root_isolate_shutdown_latch_.IsSignaledForTest ();
236+ }
237+
238+ private:
239+ fml::CountDownLatch latch_;
240+ fml::AutoResetWaitableEvent child_shutdown_latch_;
241+ fml::AutoResetWaitableEvent root_isolate_shutdown_latch_;
242+
243+ FML_DISALLOW_COPY_AND_ASSIGN (DartSecondaryIsolateTest);
244+ };
245+
246+ TEST_F (DartSecondaryIsolateTest, CanLaunchSecondaryIsolates) {
215247 AddNativeCallback (" NotifyNative" ,
216- CREATE_NATIVE_ENTRY (([&latch ](Dart_NativeArguments args) {
217- latch. CountDown ();
248+ CREATE_NATIVE_ENTRY (([this ](Dart_NativeArguments args) {
249+ LatchCountDown ();
218250 })));
219251 AddNativeCallback (
220- " PassMessage" , CREATE_NATIVE_ENTRY (([&latch ](Dart_NativeArguments args) {
252+ " PassMessage" , CREATE_NATIVE_ENTRY (([this ](Dart_NativeArguments args) {
221253 auto message = tonic::DartConverter<std::string>::FromDart (
222254 Dart_GetNativeArgument (args, 0 ));
223255 ASSERT_EQ (" Hello from code is secondary isolate." , message);
224- latch. CountDown ();
256+ LatchCountDown ();
225257 })));
226258 auto settings = CreateSettingsForFixture ();
227- settings.root_isolate_shutdown_callback = [&root_isolate_shutdown_latch]() {
228- root_isolate_shutdown_latch.Signal ();
229- };
230- settings.isolate_shutdown_callback = [&child_shutdown_latch]() {
231- child_shutdown_latch.Signal ();
259+ settings.root_isolate_shutdown_callback = [this ]() {
260+ RootIsolateShutdownSignal ();
232261 };
262+ settings.isolate_shutdown_callback = [this ]() { ChildShutdownSignal (); };
233263 auto vm_ref = DartVMRef::Create (settings);
234264 auto thread = CreateNewThread ();
235265 TaskRunners task_runners (GetCurrentTestName (), //
@@ -243,19 +273,18 @@ TEST_F(DartIsolateTest, CanLaunchSecondaryIsolates) {
243273 GetFixturesPath ());
244274 ASSERT_TRUE (isolate);
245275 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
246- child_shutdown_latch. Wait (); // wait for child isolate to shutdown first
247- ASSERT_FALSE (root_isolate_shutdown_latch. IsSignaledForTest ());
248- latch. Wait (); // wait for last NotifyNative called by main isolate
276+ ChildShutdownWait (); // wait for child isolate to shutdown first
277+ ASSERT_FALSE (RootIsolateIsSignaled ());
278+ LatchWait (); // wait for last NotifyNative called by main isolate
249279 // root isolate will be auto-shutdown
250280}
251281
252282TEST_F (DartIsolateTest, CanRecieveArguments) {
253- fml::AutoResetWaitableEvent latch;
254283 AddNativeCallback (" NotifyNative" ,
255- CREATE_NATIVE_ENTRY (([&latch ](Dart_NativeArguments args) {
284+ CREATE_NATIVE_ENTRY (([this ](Dart_NativeArguments args) {
256285 ASSERT_TRUE (tonic::DartConverter<bool >::FromDart (
257286 Dart_GetNativeArgument (args, 0 )));
258- latch. Signal ();
287+ Signal ();
259288 })));
260289
261290 const auto settings = CreateSettingsForFixture ();
@@ -273,7 +302,7 @@ TEST_F(DartIsolateTest, CanRecieveArguments) {
273302 ASSERT_TRUE (isolate);
274303 ASSERT_EQ (isolate->get ()->GetPhase (), DartIsolate::Phase::Running);
275304
276- latch. Wait ();
305+ Wait ();
277306}
278307
279308} // namespace testing
0 commit comments