@@ -22,11 +22,13 @@ namespace flutter_runner_test {
2222class AccessibilityBridgeTestDelegate
2323 : public flutter_runner::AccessibilityBridge::Delegate {
2424 public:
25+ float view_pixel_ratio = 1 .f;
2526 void SetSemanticsEnabled (bool enabled) override { enabled_ = enabled; }
2627 void DispatchSemanticsAction (int32_t node_id,
2728 flutter::SemanticsAction action) override {
2829 actions.push_back (std::make_pair (node_id, action));
2930 }
31+ float GetViewPixelRatio () override { return view_pixel_ratio; }
3032
3133 bool enabled () { return enabled_; }
3234 std::vector<std::pair<int32_t , flutter::SemanticsAction>> actions;
@@ -112,9 +114,10 @@ TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) {
112114 RunLoopUntilIdle ();
113115
114116 EXPECT_EQ (0 , semantics_manager_.DeleteCount ());
115- EXPECT_EQ (1 , semantics_manager_.UpdateCount ());
117+ EXPECT_EQ (2 , semantics_manager_.UpdateCount ());
116118 EXPECT_EQ (1 , semantics_manager_.CommitCount ());
117- EXPECT_EQ (3U , semantics_manager_.LastUpdatedNodes ().size ());
119+ // The root node is in the first update.
120+ EXPECT_EQ (2U , semantics_manager_.LastUpdatedNodes ().size ());
118121 EXPECT_EQ (0U , semantics_manager_.LastDeletedNodeIds ().size ());
119122 EXPECT_FALSE (semantics_manager_.DeleteOverflowed ());
120123 EXPECT_FALSE (semantics_manager_.UpdateOverflowed ());
@@ -128,7 +131,7 @@ TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) {
128131 RunLoopUntilIdle ();
129132
130133 EXPECT_EQ (1 , semantics_manager_.DeleteCount ());
131- EXPECT_EQ (2 , semantics_manager_.UpdateCount ());
134+ EXPECT_EQ (3 , semantics_manager_.UpdateCount ());
132135 EXPECT_EQ (2 , semantics_manager_.CommitCount ());
133136 EXPECT_EQ (1U , semantics_manager_.LastUpdatedNodes ().size ());
134137 ASSERT_EQ (std::vector<uint32_t >({1 , 2 }),
@@ -269,6 +272,21 @@ TEST_F(AccessibilityBridgeTest, PopulatesSelectedState) {
269272 EXPECT_FALSE (semantics_manager_.UpdateOverflowed ());
270273}
271274
275+ TEST_F (AccessibilityBridgeTest, ApplyViewPixelRatioToRoot) {
276+ accessibility_delegate_.view_pixel_ratio = 1 .25f ;
277+ flutter::SemanticsNode node0;
278+ node0.id = 0 ;
279+ node0.flags = static_cast <int >(flutter::SemanticsFlags::kIsSelected );
280+
281+ accessibility_bridge_->AddSemanticsNodeUpdate ({{0 , node0}});
282+ RunLoopUntilIdle ();
283+ const auto & fuchsia_node = semantics_manager_.LastUpdatedNodes ().at (0u );
284+ EXPECT_EQ (fuchsia_node.node_id (), static_cast <unsigned int >(node0.id ));
285+ EXPECT_EQ (fuchsia_node.transform ().matrix [0 ], 0 .8f );
286+ EXPECT_EQ (fuchsia_node.transform ().matrix [5 ], 0 .8f );
287+ EXPECT_EQ (fuchsia_node.transform ().matrix [10 ], 1 .f );
288+ }
289+
272290TEST_F (AccessibilityBridgeTest, PopulatesHiddenState) {
273291 flutter::SemanticsNode node0;
274292 node0.id = 0 ;
@@ -356,9 +374,10 @@ TEST_F(AccessibilityBridgeTest, TruncatesLargeLabel) {
356374
357375 // Nothing to delete, but we should have broken
358376 EXPECT_EQ (0 , semantics_manager_.DeleteCount ());
359- EXPECT_EQ (1 , semantics_manager_.UpdateCount ());
377+ EXPECT_EQ (2 , semantics_manager_.UpdateCount ());
360378 EXPECT_EQ (1 , semantics_manager_.CommitCount ());
361- EXPECT_EQ (3U , semantics_manager_.LastUpdatedNodes ().size ());
379+ // The root node is in the first update.
380+ EXPECT_EQ (2U , semantics_manager_.LastUpdatedNodes ().size ());
362381 auto trimmed_node =
363382 std::find_if (semantics_manager_.LastUpdatedNodes ().begin (),
364383 semantics_manager_.LastUpdatedNodes ().end (),
@@ -399,9 +418,10 @@ TEST_F(AccessibilityBridgeTest, TruncatesLargeValue) {
399418 RunLoopUntilIdle ();
400419
401420 EXPECT_EQ (0 , semantics_manager_.DeleteCount ());
402- EXPECT_EQ (1 , semantics_manager_.UpdateCount ());
421+ EXPECT_EQ (2 , semantics_manager_.UpdateCount ());
403422 EXPECT_EQ (1 , semantics_manager_.CommitCount ());
404- EXPECT_EQ (3U , semantics_manager_.LastUpdatedNodes ().size ());
423+ // The root node is in the first update.
424+ EXPECT_EQ (2U , semantics_manager_.LastUpdatedNodes ().size ());
405425 auto trimmed_node =
406426 std::find_if (semantics_manager_.LastUpdatedNodes ().begin (),
407427 semantics_manager_.LastUpdatedNodes ().end (),
@@ -455,11 +475,12 @@ TEST_F(AccessibilityBridgeTest, SplitsLargeUpdates) {
455475 });
456476 RunLoopUntilIdle ();
457477
458- // Nothing to delete, but we should have broken into groups (4, 3, 2), (1, 0)
478+ // Nothing to delete, but we should have broken into groups (4, 3, 2), (0)
479+ // (1)
459480 EXPECT_EQ (0 , semantics_manager_.DeleteCount ());
460- EXPECT_EQ (2 , semantics_manager_.UpdateCount ());
481+ EXPECT_EQ (3 , semantics_manager_.UpdateCount ());
461482 EXPECT_EQ (1 , semantics_manager_.CommitCount ());
462- EXPECT_EQ (2U , semantics_manager_.LastUpdatedNodes ().size ());
483+ EXPECT_EQ (1U , semantics_manager_.LastUpdatedNodes ().size ());
463484 EXPECT_FALSE (semantics_manager_.DeleteOverflowed ());
464485 EXPECT_FALSE (semantics_manager_.UpdateOverflowed ());
465486}
@@ -494,7 +515,8 @@ TEST_F(AccessibilityBridgeTest, HandlesCycles) {
494515 RunLoopUntilIdle ();
495516
496517 EXPECT_EQ (0 , semantics_manager_.DeleteCount ());
497- EXPECT_EQ (2 , semantics_manager_.UpdateCount ());
518+ // 1 + (2 new updates).
519+ EXPECT_EQ (3 , semantics_manager_.UpdateCount ());
498520 EXPECT_EQ (2 , semantics_manager_.CommitCount ());
499521 EXPECT_FALSE (semantics_manager_.DeleteOverflowed ());
500522 EXPECT_FALSE (semantics_manager_.UpdateOverflowed ());
0 commit comments