@@ -10,6 +10,7 @@ import 'package:flutter/services.dart';
1010import 'package:flutter_test/flutter_test.dart' ;
1111
1212import '../widgets/clipboard_utils.dart' ;
13+ import 'semantics_tester.dart' ;
1314
1415Offset textOffsetToPosition (RenderParagraph paragraph, int offset) {
1516 const Rect caret = Rect .fromLTWH (0.0 , 0.0 , 2.0 , 20.0 );
@@ -34,7 +35,7 @@ void main() {
3435 TestDefaultBinaryMessengerBinding .instance! .defaultBinaryMessenger.setMockMethodCallHandler (SystemChannels .platform, null );
3536 });
3637
37- group ('SelectionArea ' , () {
38+ group ('SelectableRegion ' , () {
3839 testWidgets ('mouse selection sends correct events' , (WidgetTester tester) async {
3940 final UniqueKey spy = UniqueKey ();
4041 await tester.pumpWidget (
@@ -94,6 +95,81 @@ void main() {
9495 );
9596 });
9697
98+ testWidgets ('does not merge semantics node of the children' , (WidgetTester tester) async {
99+ final SemanticsTester semantics = SemanticsTester (tester);
100+ await tester.pumpWidget (
101+ MaterialApp (
102+ home: SelectableRegion (
103+ focusNode: FocusNode (),
104+ selectionControls: materialTextSelectionControls,
105+ child: Scaffold (
106+ body: Center (
107+ child: Column (
108+ mainAxisSize: MainAxisSize .min,
109+ children: < Widget > [
110+ const Text ('Line one' ),
111+ const Text ('Line two' ),
112+ ElevatedButton (
113+ onPressed: () {},
114+ child: const Text ('Button' ),
115+ )
116+ ],
117+ ),
118+ ),
119+ ),
120+ ),
121+ ),
122+ );
123+
124+ expect (
125+ semantics,
126+ hasSemantics (
127+ TestSemantics .root (
128+ children: < TestSemantics > [
129+ TestSemantics (
130+ textDirection: TextDirection .ltr,
131+ children: < TestSemantics > [
132+ TestSemantics (
133+ children: < TestSemantics > [
134+ TestSemantics (
135+ flags: < SemanticsFlag > [SemanticsFlag .scopesRoute],
136+ children: < TestSemantics > [
137+ TestSemantics (
138+ label: 'Line one' ,
139+ textDirection: TextDirection .ltr,
140+ ),
141+ TestSemantics (
142+ label: 'Line two' ,
143+ textDirection: TextDirection .ltr,
144+ ),
145+ TestSemantics (
146+ flags: < SemanticsFlag > [
147+ SemanticsFlag .isButton,
148+ SemanticsFlag .hasEnabledState,
149+ SemanticsFlag .isEnabled,
150+ SemanticsFlag .isFocusable
151+ ],
152+ actions: < SemanticsAction > [SemanticsAction .tap],
153+ label: 'Button' ,
154+ textDirection: TextDirection .ltr,
155+ ),
156+ ],
157+ ),
158+ ],
159+ ),
160+ ],
161+ ),
162+ ],
163+ ),
164+ ignoreRect: true ,
165+ ignoreTransform: true ,
166+ ignoreId: true ,
167+ ),
168+ );
169+
170+ semantics.dispose ();
171+ });
172+
97173 testWidgets ('mouse selection always cancels previous selection' , (WidgetTester tester) async {
98174 final UniqueKey spy = UniqueKey ();
99175 await tester.pumpWidget (
0 commit comments