fuchsia: Fix runtime_tests and shell_tests (#18492)

diff --git a/fml/platform/fuchsia/message_loop_fuchsia.cc b/fml/platform/fuchsia/message_loop_fuchsia.cc
index 4e44c91..9a3c1c0 100644
--- a/fml/platform/fuchsia/message_loop_fuchsia.cc
+++ b/fml/platform/fuchsia/message_loop_fuchsia.cc
@@ -6,14 +6,23 @@
 
 #include <lib/async-loop/default.h>
 #include <lib/async/cpp/task.h>
+#include <lib/async/default.h>
 #include <lib/zx/time.h>
 
 namespace fml {
 
 MessageLoopFuchsia::MessageLoopFuchsia()
-    : loop_(&kAsyncLoopConfigAttachToCurrentThread) {}
+    : loop_(&kAsyncLoopConfigNoAttachToCurrentThread) {
+  async_set_default_dispatcher(loop_.dispatcher());
+}
 
-MessageLoopFuchsia::~MessageLoopFuchsia() = default;
+MessageLoopFuchsia::~MessageLoopFuchsia() {
+  // It is only safe to unset the current thread's default dispatcher if it is
+  // already pointing to this loop.
+  if (async_get_default_dispatcher() == loop_.dispatcher()) {
+    async_set_default_dispatcher(nullptr);
+  }
+}
 
 void MessageLoopFuchsia::Run() {
   loop_.Run();
diff --git a/shell/common/animator_unittests.cc b/shell/common/animator_unittests.cc
index bf2ac9f..34acb1d 100644
--- a/shell/common/animator_unittests.cc
+++ b/shell/common/animator_unittests.cc
@@ -46,9 +46,9 @@
   };
 
   // create a shell with a constant firing vsync waiter.
-  fml::AutoResetWaitableEvent shell_creation;
-
   auto platform_task = std::async(std::launch::async, [&]() {
+    fml::MessageLoop::EnsureInitializedForCurrentThread();
+
     shell = Shell::Create(
         task_runners, settings,
         [vsync_clock, &create_vsync_waiter](Shell& shell) {
@@ -67,10 +67,8 @@
     configuration.SetEntrypoint("onBeginFrameMain");
 
     RunEngine(shell.get(), std::move(configuration));
-    shell_creation.Signal();
   });
-
-  shell_creation.Wait();
+  platform_task.wait();
 
   // schedule a frame to trigger window.onBeginFrame
   fml::TaskRunner::RunNowOrPostTask(shell->GetTaskRunners().GetUITaskRunner(),
diff --git a/testing/fuchsia/meta/fuchsia_test.cmx b/testing/fuchsia/meta/fuchsia_test.cmx
index 2d9addc..02ac947 100644
--- a/testing/fuchsia/meta/fuchsia_test.cmx
+++ b/testing/fuchsia/meta/fuchsia_test.cmx
@@ -13,6 +13,7 @@
       "fuchsia.process.Launcher",
       "fuchsia.deprecatedtimezone.Timezone",
       "fuchsia.netstack.Netstack",
+      "fuchsia.sysmem.Allocator",
       "fuchsia.vulkan.loader.Loader",
       "fuchsia.logger.LogSink",
       "fuchsia.tracing.provider.Registry"
diff --git a/testing/fuchsia/run_tests.sh b/testing/fuchsia/run_tests.sh
index 05ffac4..2c39beb 100755
--- a/testing/fuchsia/run_tests.sh
+++ b/testing/fuchsia/run_tests.sh
@@ -76,7 +76,6 @@
 
 
 # TODO(gw280): Enable tests using JIT runner
-
 echo "$(date) START:flutter_runner_tests ----------------------------"
 ./fuchsia_ctl -d $device_name test \
     -f flutter_aot_runner-0.far    \
@@ -93,14 +92,15 @@
     --identity-file $pkey \
     --timeout-seconds $test_timeout_seconds \
     --packages-directory packages
+echo "$(date) DONE:flutter_runner_tests ----------------------------"
 
-# TODO(https://github.com/flutter/flutter/issues/50032) Enable after the
-# Fuchsia message loop migration is complete.
+# TODO(https://github.com/flutter/flutter/issues/??): Re-enable
+# FileTest's once they pass on Fuchsia.
 echo "$(date) START:fml_tests ---------------------------------------"
 ./fuchsia_ctl -d $device_name test \
     -f fml_tests-0.far  \
     -t fml_tests \
-    -a "--gtest_filter=-MessageLoop*:Message*:FileTest*" \
+    -a "--gtest_filter=-FileTest*" \
     --identity-file $pkey \
     --timeout-seconds $test_timeout_seconds \
     --packages-directory packages
@@ -117,26 +117,24 @@
 echo "$(date) DONE:flow_tests ---------------------------------------"
 
 
-# TODO(kaushikiska): Runtime and shell tests are failing with
-# async_dispatcher failures. Re-enable them once this gets fixed.
-
-# echo "$(date) START:runtime_tests -----------------------------------"
-# ./fuchsia_ctl -d $device_name test \
-#     -f runtime_tests-0.far  \
-#     -t runtime_tests \
-#     --identity-file $pkey \
-#     --timeout-seconds $test_timeout_seconds \
-#     --packages-directory packages
-
+echo "$(date) START:runtime_tests -----------------------------------"
+./fuchsia_ctl -d $device_name test \
+    -f runtime_tests-0.far  \
+    -t runtime_tests \
+    --identity-file $pkey \
+    --timeout-seconds $test_timeout_seconds \
+    --packages-directory packages
+echo "$(date) DONE:runtime_tests -----------------------------------"
 
 # TODO(https://github.com/flutter/flutter/issues/53399): Re-enable
 # OnServiceProtocolGetSkSLsWorks, CanLoadSkSLsFromAsset, and
 # CanRemoveOldPersistentCache once they pass on Fuchsia.
-# echo "$(date) START:shell_tests -------------------------------------"
-# ./fuchsia_ctl -d $device_name test \
-#     -f shell_tests-0.far  \
-#     -t shell_tests \
-#     -a "--gtest_filter=-ShellTest.CacheSkSLWorks:ShellTest.SetResourceCacheSize*:ShellTest.OnServiceProtocolGetSkSLsWorks:ShellTest.CanLoadSkSLsFromAsset:ShellTest.CanRemoveOldPersistentCache" \
-#     --identity-file $pkey \
-#     --timeout-seconds $test_timeout_seconds \
-#     --packages-directory packages
+echo "$(date) START:shell_tests -------------------------------------"
+./fuchsia_ctl -d $device_name test \
+    -f shell_tests-0.far  \
+    -t shell_tests \
+    -a "--gtest_filter=-ShellTest.CacheSkSLWorks:ShellTest.SetResourceCacheSize*:ShellTest.OnServiceProtocolGetSkSLsWorks:ShellTest.CanLoadSkSLsFromAsset:ShellTest.CanRemoveOldPersistentCache" \
+    --identity-file $pkey \
+    --timeout-seconds $test_timeout_seconds \
+    --packages-directory packages
+echo "$(date) DONE:shell_tests -----------------------------------"