103#if defined(OS_FUCHSIA) && (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_DEBUG)
104 GTEST_SKIP() <<
"Dart_LoadELF is not implemented on Fuchsia.";
106 auto& context = GetEmbedderContext<EmbedderTestContextSoftware>();
112 context.AddNativeCallback(
115 signal_native_latch.
Signal();
120 context.AddNativeCallback(
121 "NotifySemanticsEnabled",
123 ([¬ify_semantics_enabled_callback](Dart_NativeArguments
args) {
124 ASSERT_NE(notify_semantics_enabled_callback,
nullptr);
125 notify_semantics_enabled_callback(
args);
128 NativeEntry notify_accessibility_features_callback;
129 context.AddNativeCallback(
130 "NotifyAccessibilityFeatures",
132 [¬ify_accessibility_features_callback](Dart_NativeArguments
args) {
133 ASSERT_NE(notify_accessibility_features_callback,
nullptr);
134 notify_accessibility_features_callback(
args);
138 context.AddNativeCallback(
139 "NotifySemanticsAction",
141 ([¬ify_semantics_action_callback](Dart_NativeArguments
args) {
142 ASSERT_NE(notify_semantics_action_callback,
nullptr);
143 notify_semantics_action_callback(
args);
147 context.SetSemanticsUpdateCallback2(
168 if (node->
id == 128) {
176 semantics_update_latch.
Signal();
184 ASSERT_TRUE(
engine.is_valid());
188 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
189 Dart_Handle exception =
nullptr;
192 ASSERT_FALSE(enabled);
193 notify_semantics_enabled_latch.
Signal();
195 notify_semantics_enabled_latch.
Wait();
199 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
200 Dart_Handle exception =
nullptr;
203 ASSERT_FALSE(enabled);
204 notify_features_latch.
Signal();
209 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
210 Dart_Handle exception =
nullptr;
213 ASSERT_TRUE(enabled);
214 notify_semantics_enabled_latch_2.
Signal();
218 notify_semantics_enabled_latch_2.
Wait();
221 notify_features_latch.
Wait();
225 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
226 Dart_Handle exception =
nullptr;
229 ASSERT_TRUE(enabled);
230 notify_features_latch_2.
Signal();
235 notify_features_latch_2.
Wait();
238 signal_native_latch.
Wait();
240 semantics_update_latch.
Wait();
244 notify_semantics_action_callback = [&](Dart_NativeArguments
args) {
245 Dart_Handle exception =
nullptr;
248 ASSERT_EQ(42, node_id);
254 std::vector<int64_t> semantic_args =
257 ASSERT_THAT(semantic_args, ElementsAre(2, 1));
258 notify_semantics_action_latch.
Signal();
260 std::vector<uint8_t> bytes({2, 1});
264 notify_semantics_action_latch.
Wait();
268 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
269 Dart_Handle exception =
nullptr;
272 ASSERT_FALSE(enabled);
273 notify_semantics_enabled_latch_3.
Signal();
277 notify_semantics_enabled_latch_3.
Wait();
282#if defined(OS_FUCHSIA) && (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_DEBUG)
283 GTEST_SKIP() <<
"Dart_LoadELF is not implemented on Fuchsia.";
285 auto& context = GetEmbedderContext<EmbedderTestContextSoftware>();
291 context.AddNativeCallback(
294 signal_native_latch.
Signal();
298 context.SetSemanticsUpdateCallback2(
303 auto node = update->
nodes[0];
307 ASSERT_EQ(std::string(node->identifier),
"identifier");
312 ASSERT_EQ(std::string(node->label),
"What is the meaning of life?");
313 ASSERT_EQ(node->label_attribute_count,
size_t(2));
315 ASSERT_EQ(node->label_attributes[0]->start,
size_t(0));
316 ASSERT_EQ(node->label_attributes[0]->end,
size_t(28));
317 ASSERT_EQ(node->label_attributes[0]->type,
319 ASSERT_EQ(std::string(node->label_attributes[0]->locale->locale),
322 ASSERT_EQ(node->label_attributes[1]->start,
size_t(0));
323 ASSERT_EQ(node->label_attributes[1]->end,
size_t(1));
324 ASSERT_EQ(node->label_attributes[1]->type,
330 ASSERT_EQ(std::string(node->hint),
"It's a number");
331 ASSERT_EQ(node->hint_attribute_count,
size_t(2));
333 ASSERT_EQ(node->hint_attributes[0]->start,
size_t(0));
334 ASSERT_EQ(node->hint_attributes[0]->end,
size_t(1));
335 ASSERT_EQ(node->hint_attributes[0]->type,
337 ASSERT_EQ(std::string(node->hint_attributes[0]->locale->locale),
340 ASSERT_EQ(node->hint_attributes[1]->start,
size_t(2));
341 ASSERT_EQ(node->hint_attributes[1]->end,
size_t(3));
342 ASSERT_EQ(node->hint_attributes[1]->type,
344 ASSERT_EQ(std::string(node->hint_attributes[1]->locale->locale),
350 ASSERT_EQ(std::string(node->value),
"42");
351 ASSERT_EQ(node->value_attribute_count,
size_t(1));
353 ASSERT_EQ(node->value_attributes[0]->start,
size_t(0));
354 ASSERT_EQ(node->value_attributes[0]->end,
size_t(2));
355 ASSERT_EQ(node->value_attributes[0]->type,
357 ASSERT_EQ(std::string(node->value_attributes[0]->locale->locale),
363 ASSERT_EQ(std::string(node->increased_value),
"43");
364 ASSERT_EQ(node->increased_value_attribute_count,
size_t(2));
366 ASSERT_EQ(node->increased_value_attributes[0]->start,
size_t(0));
367 ASSERT_EQ(node->increased_value_attributes[0]->end,
size_t(1));
368 ASSERT_EQ(node->increased_value_attributes[0]->type,
371 ASSERT_EQ(node->increased_value_attributes[1]->start,
size_t(1));
372 ASSERT_EQ(node->increased_value_attributes[1]->end,
size_t(2));
373 ASSERT_EQ(node->increased_value_attributes[1]->type,
379 ASSERT_EQ(std::string(node->decreased_value),
"41");
380 ASSERT_EQ(node->decreased_value_attribute_count,
size_t(0));
381 ASSERT_EQ(node->decreased_value_attributes,
nullptr);
384 semantics_update_latch.
Signal();
392 ASSERT_TRUE(
engine.is_valid());
399 signal_native_latch.
Wait();
401 semantics_update_latch.
Wait();
406#if defined(OS_FUCHSIA) && (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_DEBUG)
407 GTEST_SKIP() <<
"Dart_LoadELF is not implemented on Fuchsia.";
409 auto& context = GetEmbedderContext<EmbedderTestContextSoftware>();
415 context.AddNativeCallback(
418 signal_native_latch.
Signal();
423 context.AddNativeCallback(
424 "NotifySemanticsEnabled",
426 ([¬ify_semantics_enabled_callback](Dart_NativeArguments
args) {
427 ASSERT_NE(notify_semantics_enabled_callback,
nullptr);
428 notify_semantics_enabled_callback(
args);
431 NativeEntry notify_accessibility_features_callback;
432 context.AddNativeCallback(
433 "NotifyAccessibilityFeatures",
435 [¬ify_accessibility_features_callback](Dart_NativeArguments
args) {
436 ASSERT_NE(notify_accessibility_features_callback,
nullptr);
437 notify_accessibility_features_callback(
args);
441 context.AddNativeCallback(
442 "NotifySemanticsAction",
444 ([¬ify_semantics_action_callback](Dart_NativeArguments
args) {
445 ASSERT_NE(notify_semantics_action_callback,
nullptr);
446 notify_semantics_action_callback(
args);
469 if (node->
id == 128) {
477 semantics_update_latch.
Signal();
485 ASSERT_TRUE(
engine.is_valid());
489 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
490 Dart_Handle exception =
nullptr;
493 ASSERT_FALSE(enabled);
494 notify_semantics_enabled_latch.
Signal();
496 notify_semantics_enabled_latch.
Wait();
500 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
501 Dart_Handle exception =
nullptr;
504 ASSERT_FALSE(enabled);
505 notify_features_latch.
Signal();
510 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
511 Dart_Handle exception =
nullptr;
514 ASSERT_TRUE(enabled);
515 notify_semantics_enabled_latch_2.
Signal();
519 notify_semantics_enabled_latch_2.
Wait();
522 notify_features_latch.
Wait();
526 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
527 Dart_Handle exception =
nullptr;
530 ASSERT_TRUE(enabled);
531 notify_features_latch_2.
Signal();
536 notify_features_latch_2.
Wait();
539 signal_native_latch.
Wait();
541 semantics_update_latch.
Wait();
545 notify_semantics_action_callback = [&](Dart_NativeArguments
args) {
546 Dart_Handle exception =
nullptr;
549 ASSERT_EQ(42, node_id);
555 std::vector<int64_t> semantic_args =
558 ASSERT_THAT(semantic_args, ElementsAre(2, 1));
559 notify_semantics_action_latch.
Signal();
561 std::vector<uint8_t> bytes({2, 1});
565 notify_semantics_action_latch.
Wait();
569 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
570 Dart_Handle exception =
nullptr;
573 ASSERT_FALSE(enabled);
574 notify_semantics_enabled_latch_3.
Signal();
578 notify_semantics_enabled_latch_3.
Wait();
583#if defined(OS_FUCHSIA) && (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_DEBUG)
584 GTEST_SKIP() <<
"Dart_LoadELF is not implemented on Fuchsia.";
586 auto& context = GetEmbedderContext<EmbedderTestContextSoftware>();
592 context.AddNativeCallback(
595 signal_native_latch.
Signal();
600 context.AddNativeCallback(
601 "NotifySemanticsEnabled",
603 ([¬ify_semantics_enabled_callback](Dart_NativeArguments
args) {
604 ASSERT_NE(notify_semantics_enabled_callback,
nullptr);
605 notify_semantics_enabled_callback(
args);
608 NativeEntry notify_accessibility_features_callback;
609 context.AddNativeCallback(
610 "NotifyAccessibilityFeatures",
612 [¬ify_accessibility_features_callback](Dart_NativeArguments
args) {
613 ASSERT_NE(notify_accessibility_features_callback,
nullptr);
614 notify_accessibility_features_callback(
args);
618 context.AddNativeCallback(
619 "NotifySemanticsAction",
621 ([¬ify_semantics_action_callback](Dart_NativeArguments
args) {
622 ASSERT_NE(notify_semantics_action_callback,
nullptr);
623 notify_semantics_action_callback(
args);
629 int node_batch_end_count = 0;
630 int action_batch_end_count = 0;
635 ++node_batch_end_count;
636 semantics_node_latch.
Signal();
639 ASSERT_EQ(0, node_batch_end_count);
640 ASSERT_EQ(0, action_batch_end_count);
654 if (node->
id == 128) {
662 int action_count = 0;
663 context.SetSemanticsCustomActionCallback(
666 ++action_batch_end_count;
667 semantics_action_latch.
Signal();
670 ASSERT_EQ(0, node_batch_end_count);
671 ASSERT_EQ(0, action_batch_end_count);
682 ASSERT_TRUE(
engine.is_valid());
686 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
687 Dart_Handle exception =
nullptr;
690 ASSERT_FALSE(enabled);
691 notify_semantics_enabled_latch.
Signal();
693 notify_semantics_enabled_latch.
Wait();
697 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
698 Dart_Handle exception =
nullptr;
701 ASSERT_FALSE(enabled);
702 notify_features_latch.
Signal();
707 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
708 Dart_Handle exception =
nullptr;
711 ASSERT_TRUE(enabled);
712 notify_semantics_enabled_latch_2.
Signal();
716 notify_semantics_enabled_latch_2.
Wait();
719 notify_features_latch.
Wait();
723 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
724 Dart_Handle exception =
nullptr;
727 ASSERT_TRUE(enabled);
728 notify_features_latch_2.
Signal();
733 notify_features_latch_2.
Wait();
736 signal_native_latch.
Wait();
738 semantics_node_latch.
Wait();
739 semantics_action_latch.
Wait();
740 ASSERT_EQ(4, node_count);
741 ASSERT_EQ(1, node_batch_end_count);
742 ASSERT_EQ(1, action_count);
743 ASSERT_EQ(1, action_batch_end_count);
747 notify_semantics_action_callback = [&](Dart_NativeArguments
args) {
748 Dart_Handle exception =
nullptr;
751 ASSERT_EQ(42, node_id);
757 std::vector<int64_t> semantic_args =
760 ASSERT_THAT(semantic_args, ElementsAre(2, 1));
761 notify_semantics_action_latch.
Signal();
763 std::vector<uint8_t> bytes({2, 1});
767 notify_semantics_action_latch.
Wait();
771 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
772 Dart_Handle exception =
nullptr;
775 ASSERT_FALSE(enabled);
776 notify_semantics_enabled_latch_3.
Signal();
780 notify_semantics_enabled_latch_3.
Wait();
785#if defined(OS_FUCHSIA) && (FLUTTER_RUNTIME_MODE != FLUTTER_RUNTIME_MODE_DEBUG)
786 GTEST_SKIP() <<
"Dart_LoadELF is not implemented on Fuchsia.";
788 auto& context = GetEmbedderContext<EmbedderTestContextSoftware>();
794 context.AddNativeCallback(
797 signal_native_latch.
Signal();
802 context.AddNativeCallback(
803 "NotifySemanticsEnabled",
805 ([¬ify_semantics_enabled_callback](Dart_NativeArguments
args) {
806 ASSERT_NE(notify_semantics_enabled_callback,
nullptr);
807 notify_semantics_enabled_callback(
args);
810 NativeEntry notify_accessibility_features_callback;
811 context.AddNativeCallback(
812 "NotifyAccessibilityFeatures",
814 [¬ify_accessibility_features_callback](Dart_NativeArguments
args) {
815 ASSERT_NE(notify_accessibility_features_callback,
nullptr);
816 notify_accessibility_features_callback(
args);
819 int num_times_set_semantics_update_callback2_called = 0;
821 context.SetSemanticsUpdateCallback2(
823 num_times_set_semantics_update_callback2_called++;
830 ASSERT_EQ(node->
id, update->
view_id + 1);
844 if (num_times_set_semantics_update_callback2_called == 3) {
845 semantics_update_latch.
Signal();
854 ASSERT_TRUE(
engine.is_valid());
858 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
859 Dart_Handle exception =
nullptr;
862 ASSERT_FALSE(enabled);
863 notify_semantics_enabled_latch.
Signal();
865 notify_semantics_enabled_latch.
Wait();
867 const int64_t first_view_id = 1;
868 const int64_t second_view_id = 2;
873 window_metrics_event.
width = 100;
874 window_metrics_event.
height = 100;
876 window_metrics_event.
left = 0;
877 window_metrics_event.
top = 0;
883 window_metrics_event.
view_id = first_view_id;
887 add_view_info.
view_id = first_view_id;
890 add_view_info.
user_data = ¬ify_add_view_latch;
892 EXPECT_TRUE(result->added);
898 notify_add_view_latch.
Wait();
901 add_view_info.
view_id = second_view_id;
902 window_metrics_event.
view_id = second_view_id;
904 EXPECT_TRUE(result->added);
910 notify_add_view_latch.
Wait();
914 notify_accessibility_features_callback = [&](Dart_NativeArguments
args) {
915 Dart_Handle exception =
nullptr;
918 ASSERT_FALSE(enabled);
919 notify_features_latch.
Signal();
924 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
925 Dart_Handle exception =
nullptr;
928 ASSERT_TRUE(enabled);
929 notify_semantics_enabled_latch_2.
Signal();
933 notify_semantics_enabled_latch_2.
Wait();
936 notify_features_latch.
Wait();
942 signal_native_latch.
Wait();
944 semantics_update_latch.
Wait();
945 EXPECT_EQ(num_times_set_semantics_update_callback2_called, 3);
949 notify_semantics_enabled_callback = [&](Dart_NativeArguments
args) {
950 Dart_Handle exception =
nullptr;
953 ASSERT_FALSE(enabled);
954 notify_semantics_enabled_latch_3.
Signal();
958 notify_semantics_enabled_latch_3.
Wait();
FlutterEngineResult FlutterEngineDispatchSemanticsAction(FLUTTER_API_SYMBOL(FlutterEngine) engine, uint64_t node_id, FlutterSemanticsAction action, const uint8_t *data, size_t data_length)
Dispatch a semantics action to the specified semantics node in the implicit view.