Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
14af5bbe
Unverified
Commit
14af5bbe
authored
Sep 05, 2020
by
Jonah Williams
Committed by
GitHub
Sep 05, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "Add finders for enableFlutterDriverExtension (#64308)" (#65273)
This reverts commit
db4dda20
.
parent
db4dda20
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
86 additions
and
167 deletions
+86
-167
diagnostics_tree.dart
packages/flutter_driver/lib/src/common/diagnostics_tree.dart
+2
-2
find.dart
packages/flutter_driver/lib/src/common/find.dart
+28
-31
geometry.dart
packages/flutter_driver/lib/src/common/geometry.dart
+2
-2
gesture.dart
packages/flutter_driver/lib/src/common/gesture.dart
+5
-5
text.dart
packages/flutter_driver/lib/src/common/text.dart
+1
-1
extension.dart
packages/flutter_driver/lib/src/extension/extension.dart
+35
-107
extension_test.dart
...es/flutter_driver/test/src/real_tests/extension_test.dart
+11
-11
find_test.dart
packages/flutter_driver/test/src/real_tests/find_test.dart
+2
-8
No files found.
packages/flutter_driver/lib/src/common/diagnostics_tree.dart
View file @
14af5bbe
...
...
@@ -33,11 +33,11 @@ class GetDiagnosticsTree extends CommandWithTarget {
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
GetDiagnosticsTree
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
GetDiagnosticsTree
.
deserialize
(
Map
<
String
,
String
>
json
)
:
subtreeDepth
=
int
.
parse
(
json
[
'subtreeDepth'
]),
includeProperties
=
json
[
'includeProperties'
]
==
'true'
,
diagnosticsType
=
_diagnosticsTypeIndex
.
lookupBySimpleName
(
json
[
'diagnosticsType'
]),
super
.
deserialize
(
json
,
finderFactory
);
super
.
deserialize
(
json
);
/// How many levels of children to include in the JSON result.
///
...
...
packages/flutter_driver/lib/src/common/find.dart
View file @
14af5bbe
...
...
@@ -9,25 +9,6 @@ import 'package:meta/meta.dart';
import
'error.dart'
;
import
'message.dart'
;
/// A factory for deserializing [Finder]s.
mixin
DeserializeFinderFactory
{
/// Deserializes the finder from JSON generated by [SerializableFinder.serialize].
SerializableFinder
deserializeFinder
(
Map
<
String
,
String
>
json
)
{
final
String
finderType
=
json
[
'finderType'
];
switch
(
finderType
)
{
case
'ByType'
:
return
ByType
.
deserialize
(
json
);
case
'ByValueKey'
:
return
ByValueKey
.
deserialize
(
json
);
case
'ByTooltipMessage'
:
return
ByTooltipMessage
.
deserialize
(
json
);
case
'BySemanticsLabel'
:
return
BySemanticsLabel
.
deserialize
(
json
);
case
'ByText'
:
return
ByText
.
deserialize
(
json
);
case
'PageBack'
:
return
const
PageBack
();
case
'Descendant'
:
return
Descendant
.
deserialize
(
json
,
this
);
case
'Ancestor'
:
return
Ancestor
.
deserialize
(
json
,
this
);
}
throw
DriverError
(
'Unsupported search specification type
$finderType
'
);
}
}
const
List
<
Type
>
_supportedKeyValueTypes
=
<
Type
>[
String
,
int
];
DriverError
_createInvalidKeyValueTypeError
(
String
invalidType
)
{
...
...
@@ -47,8 +28,8 @@ abstract class CommandWithTarget extends Command {
}
/// Deserializes this command from the value generated by [serialize].
CommandWithTarget
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
:
finder
=
finderFactory
.
deserializeFinder
(
json
),
CommandWithTarget
.
deserialize
(
Map
<
String
,
String
>
json
)
:
finder
=
SerializableFinder
.
deserialize
(
json
),
super
.
deserialize
(
json
);
/// Locates the object or objects targeted by this command.
...
...
@@ -77,7 +58,7 @@ class WaitFor extends CommandWithTarget {
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
WaitFor
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
:
super
.
deserialize
(
json
,
finderFactory
);
WaitFor
.
deserialize
(
Map
<
String
,
String
>
json
)
:
super
.
deserialize
(
json
);
@override
String
get
kind
=>
'waitFor'
;
...
...
@@ -107,7 +88,7 @@ class WaitForAbsent extends CommandWithTarget {
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
WaitForAbsent
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
:
super
.
deserialize
(
json
,
finderFactory
);
WaitForAbsent
.
deserialize
(
Map
<
String
,
String
>
json
)
:
super
.
deserialize
(
json
);
@override
String
get
kind
=>
'waitForAbsent'
;
...
...
@@ -145,6 +126,22 @@ abstract class SerializableFinder {
Map
<
String
,
String
>
serialize
()
=>
<
String
,
String
>{
'finderType'
:
finderType
,
};
/// Deserializes a finder from JSON generated by [serialize].
static
SerializableFinder
deserialize
(
Map
<
String
,
String
>
json
)
{
final
String
finderType
=
json
[
'finderType'
];
switch
(
finderType
)
{
case
'ByType'
:
return
ByType
.
deserialize
(
json
);
case
'ByValueKey'
:
return
ByValueKey
.
deserialize
(
json
);
case
'ByTooltipMessage'
:
return
ByTooltipMessage
.
deserialize
(
json
);
case
'BySemanticsLabel'
:
return
BySemanticsLabel
.
deserialize
(
json
);
case
'ByText'
:
return
ByText
.
deserialize
(
json
);
case
'PageBack'
:
return
const
PageBack
();
case
'Descendant'
:
return
Descendant
.
deserialize
(
json
);
case
'Ancestor'
:
return
Ancestor
.
deserialize
(
json
);
}
throw
DriverError
(
'Unsupported search specification type
$finderType
'
);
}
}
/// A Flutter Driver finder that finds widgets by tooltip text.
...
...
@@ -352,14 +349,14 @@ class Descendant extends SerializableFinder {
}
/// Deserializes the finder from JSON generated by [serialize].
static
Descendant
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
{
static
Descendant
deserialize
(
Map
<
String
,
String
>
json
)
{
final
Map
<
String
,
String
>
jsonOfMatcher
=
Map
<
String
,
String
>.
from
(
jsonDecode
(
json
[
'of'
])
as
Map
<
String
,
dynamic
>);
final
Map
<
String
,
String
>
jsonMatchingMatcher
=
Map
<
String
,
String
>.
from
(
jsonDecode
(
json
[
'matching'
])
as
Map
<
String
,
dynamic
>);
return
Descendant
(
of:
finderFactory
.
deserializeFinder
(
jsonOfMatcher
),
matching:
finderFactory
.
deserializeFinder
(
jsonMatchingMatcher
),
of:
SerializableFinder
.
deserialize
(
jsonOfMatcher
),
matching:
SerializableFinder
.
deserialize
(
jsonMatchingMatcher
),
matchRoot:
json
[
'matchRoot'
]
==
'true'
,
firstMatchOnly:
json
[
'firstMatchOnly'
]
==
'true'
,
);
...
...
@@ -407,14 +404,14 @@ class Ancestor extends SerializableFinder {
}
/// Deserializes the finder from JSON generated by [serialize].
static
Ancestor
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
{
static
Ancestor
deserialize
(
Map
<
String
,
String
>
json
)
{
final
Map
<
String
,
String
>
jsonOfMatcher
=
Map
<
String
,
String
>.
from
(
jsonDecode
(
json
[
'of'
])
as
Map
<
String
,
dynamic
>);
final
Map
<
String
,
String
>
jsonMatchingMatcher
=
Map
<
String
,
String
>.
from
(
jsonDecode
(
json
[
'matching'
])
as
Map
<
String
,
dynamic
>);
return
Ancestor
(
of:
finderFactory
.
deserializeFinder
(
jsonOfMatcher
),
matching:
finderFactory
.
deserializeFinder
(
jsonMatchingMatcher
),
of:
SerializableFinder
.
deserialize
(
jsonOfMatcher
),
matching:
SerializableFinder
.
deserialize
(
jsonMatchingMatcher
),
matchRoot:
json
[
'matchRoot'
]
==
'true'
,
firstMatchOnly:
json
[
'firstMatchOnly'
]
==
'true'
,
);
...
...
@@ -439,8 +436,8 @@ class GetSemanticsId extends CommandWithTarget {
GetSemanticsId
(
SerializableFinder
finder
,
{
Duration
timeout
})
:
super
(
finder
,
timeout:
timeout
);
/// Creates a command from a JSON map.
GetSemanticsId
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
:
super
.
deserialize
(
json
,
finderFactory
);
GetSemanticsId
.
deserialize
(
Map
<
String
,
String
>
json
)
:
super
.
deserialize
(
json
);
@override
String
get
kind
=>
'get_semantics_id'
;
...
...
packages/flutter_driver/lib/src/common/geometry.dart
View file @
14af5bbe
...
...
@@ -36,9 +36,9 @@ class GetOffset extends CommandWithTarget {
GetOffset
(
SerializableFinder
finder
,
this
.
offsetType
,
{
Duration
timeout
})
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
GetOffset
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
GetOffset
.
deserialize
(
Map
<
String
,
String
>
json
)
:
offsetType
=
_offsetTypeIndex
.
lookupBySimpleName
(
json
[
'offsetType'
]),
super
.
deserialize
(
json
,
finderFactory
);
super
.
deserialize
(
json
);
@override
Map
<
String
,
String
>
serialize
()
=>
super
.
serialize
()..
addAll
(<
String
,
String
>{
...
...
packages/flutter_driver/lib/src/common/gesture.dart
View file @
14af5bbe
...
...
@@ -11,7 +11,7 @@ class Tap extends CommandWithTarget {
Tap
(
SerializableFinder
finder
,
{
Duration
timeout
})
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
Tap
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
:
super
.
deserialize
(
json
,
finderFactory
);
Tap
.
deserialize
(
Map
<
String
,
String
>
json
)
:
super
.
deserialize
(
json
);
@override
String
get
kind
=>
'tap'
;
...
...
@@ -46,12 +46,12 @@ class Scroll extends CommandWithTarget {
})
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
Scroll
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
Scroll
.
deserialize
(
Map
<
String
,
String
>
json
)
:
dx
=
double
.
parse
(
json
[
'dx'
]),
dy
=
double
.
parse
(
json
[
'dy'
]),
duration
=
Duration
(
microseconds:
int
.
parse
(
json
[
'duration'
])),
frequency
=
int
.
parse
(
json
[
'frequency'
]),
super
.
deserialize
(
json
,
finderFactory
);
super
.
deserialize
(
json
);
/// Delta X offset per move event.
final
double
dx
;
...
...
@@ -99,9 +99,9 @@ class ScrollIntoView extends CommandWithTarget {
ScrollIntoView
(
SerializableFinder
finder
,
{
this
.
alignment
=
0.0
,
Duration
timeout
})
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
ScrollIntoView
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
ScrollIntoView
.
deserialize
(
Map
<
String
,
String
>
json
)
:
alignment
=
double
.
parse
(
json
[
'alignment'
]),
super
.
deserialize
(
json
,
finderFactory
);
super
.
deserialize
(
json
);
/// How the widget should be aligned.
///
...
...
packages/flutter_driver/lib/src/common/text.dart
View file @
14af5bbe
...
...
@@ -11,7 +11,7 @@ class GetText extends CommandWithTarget {
GetText
(
SerializableFinder
finder
,
{
Duration
timeout
})
:
super
(
finder
,
timeout:
timeout
);
/// Deserializes this command from the value generated by [serialize].
GetText
.
deserialize
(
Map
<
String
,
String
>
json
,
DeserializeFinderFactory
finderFactory
)
:
super
.
deserialize
(
json
,
finderFactory
);
GetText
.
deserialize
(
Map
<
String
,
String
>
json
)
:
super
.
deserialize
(
json
);
@override
String
get
kind
=>
'get_text'
;
...
...
packages/flutter_driver/lib/src/extension/extension.dart
View file @
14af5bbe
...
...
@@ -43,16 +43,15 @@ const String _extensionMethod = 'ext.flutter.$_extensionMethodName';
typedef
DataHandler
=
Future
<
String
>
Function
(
String
message
);
class
_DriverBinding
extends
BindingBase
with
SchedulerBinding
,
ServicesBinding
,
GestureBinding
,
PaintingBinding
,
SemanticsBinding
,
RendererBinding
,
WidgetsBinding
{
_DriverBinding
(
this
.
_handler
,
this
.
_silenceErrors
,
this
.
finders
);
_DriverBinding
(
this
.
_handler
,
this
.
_silenceErrors
);
final
DataHandler
_handler
;
final
bool
_silenceErrors
;
final
List
<
FinderExtension
>
finders
;
@override
void
initServiceExtensions
()
{
super
.
initServiceExtensions
();
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
(
_handler
,
_silenceErrors
,
finders
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
(
_handler
,
_silenceErrors
);
registerServiceExtension
(
name:
_extensionMethodName
,
callback:
extension
.
call
,
...
...
@@ -87,59 +86,9 @@ class _DriverBinding extends BindingBase with SchedulerBinding, ServicesBinding,
/// for tests where exceptions are expected. Defaults to false. Any errors
/// will still be returned in the `response` field of the result JSON along
/// with an `isError` boolean.
///
/// The `finders` parameter are used to add custom finders, as in the following example.
///
/// ```dart main
/// void main() {
/// enableFlutterDriverExtension(finders: <FinderExtension>[ SomeFinderExtension() ]);
///
/// app.main();
/// }
/// ```
///
/// ```dart
/// class Some extends SerializableFinder {
/// const Some(this.title);
///
/// final String title;
///
/// @override
/// String get finderType => 'Some';
///
/// @override
/// Map<String, String> serialize() => super.serialize()..addAll(<String, String>{
/// 'title': title,
/// });
/// }
/// ```
///
/// ```dart
/// class SomeFinderExtension extends FinderExtension {
///
/// String get finderType => 'Some';
///
/// SerializableFinder deserialize(Map<String, String> params, DeserializeFinderFactory finderFactory) {
/// return Some(json['title']);
/// }
///
/// Finder createFinder(SerializableFinder finder) {
/// Some someFinder = finder as Some;
///
/// return find.byElementPredicate((Element element) {
/// final Widget widget = element.widget;
/// if (element.widget is SomeWidget) {
/// return element.widget.title == someFinder.title;
/// }
/// return false;
/// });
/// }
/// }
/// ```
///
void
enableFlutterDriverExtension
(
{
DataHandler
handler
,
bool
silenceErrors
=
false
,
List
<
FinderExtension
>
finders
})
{
void
enableFlutterDriverExtension
(
{
DataHandler
handler
,
bool
silenceErrors
=
false
})
{
assert
(
WidgetsBinding
.
instance
==
null
);
_DriverBinding
(
handler
,
silenceErrors
,
finders
??
<
FinderExtension
>[]
);
_DriverBinding
(
handler
,
silenceErrors
);
assert
(
WidgetsBinding
.
instance
is
_DriverBinding
);
}
...
...
@@ -149,19 +98,9 @@ typedef CommandHandlerCallback = Future<Result> Function(Command c);
/// Signature for functions that deserialize a JSON map to a command object.
typedef
CommandDeserializerCallback
=
Command
Function
(
Map
<
String
,
String
>
params
);
/// Used to expand the new Finder
abstract
class
FinderExtension
{
/// Identifies the type of finder to be used by the driver extension.
String
get
finderType
;
/// Deserializes the finder from JSON generated by [SerializableFinder.serialize].
SerializableFinder
deserialize
(
Map
<
String
,
String
>
params
,
DeserializeFinderFactory
finderFactory
);
/// Signature for functions that run the given finder and return the [Element]
/// found, if any, or null otherwise.
Finder
createFinder
(
SerializableFinder
finder
);
}
/// Signature for functions that run the given finder and return the [Element]
/// found, if any, or null otherwise.
typedef
FinderConstructor
=
Finder
Function
(
SerializableFinder
finder
);
/// The class that manages communication between a Flutter Driver test and the
/// application being remote-controlled, on the application side.
...
...
@@ -169,9 +108,9 @@ abstract class FinderExtension {
/// This is not normally used directly. It is instantiated automatically when
/// calling [enableFlutterDriverExtension].
@visibleForTesting
class
FlutterDriverExtension
with
DeserializeFinderFactory
{
class
FlutterDriverExtension
{
/// Creates an object to manage a Flutter Driver connection.
FlutterDriverExtension
(
this
.
_requestDataHandler
,
this
.
_silenceErrors
,
List
<
FinderExtension
>
finders
)
{
FlutterDriverExtension
(
this
.
_requestDataHandler
,
this
.
_silenceErrors
)
{
_testTextInput
.
register
();
_commandHandlers
.
addAll
(<
String
,
CommandHandlerCallback
>{
...
...
@@ -203,28 +142,35 @@ class FlutterDriverExtension with DeserializeFinderFactory {
'get_layer_tree'
:
(
Map
<
String
,
String
>
params
)
=>
GetLayerTree
.
deserialize
(
params
),
'get_render_tree'
:
(
Map
<
String
,
String
>
params
)
=>
GetRenderTree
.
deserialize
(
params
),
'enter_text'
:
(
Map
<
String
,
String
>
params
)
=>
EnterText
.
deserialize
(
params
),
'get_text'
:
(
Map
<
String
,
String
>
params
)
=>
GetText
.
deserialize
(
params
,
this
),
'get_text'
:
(
Map
<
String
,
String
>
params
)
=>
GetText
.
deserialize
(
params
),
'request_data'
:
(
Map
<
String
,
String
>
params
)
=>
RequestData
.
deserialize
(
params
),
'scroll'
:
(
Map
<
String
,
String
>
params
)
=>
Scroll
.
deserialize
(
params
,
this
),
'scrollIntoView'
:
(
Map
<
String
,
String
>
params
)
=>
ScrollIntoView
.
deserialize
(
params
,
this
),
'scroll'
:
(
Map
<
String
,
String
>
params
)
=>
Scroll
.
deserialize
(
params
),
'scrollIntoView'
:
(
Map
<
String
,
String
>
params
)
=>
ScrollIntoView
.
deserialize
(
params
),
'set_frame_sync'
:
(
Map
<
String
,
String
>
params
)
=>
SetFrameSync
.
deserialize
(
params
),
'set_semantics'
:
(
Map
<
String
,
String
>
params
)
=>
SetSemantics
.
deserialize
(
params
),
'set_text_entry_emulation'
:
(
Map
<
String
,
String
>
params
)
=>
SetTextEntryEmulation
.
deserialize
(
params
),
'tap'
:
(
Map
<
String
,
String
>
params
)
=>
Tap
.
deserialize
(
params
,
this
),
'waitFor'
:
(
Map
<
String
,
String
>
params
)
=>
WaitFor
.
deserialize
(
params
,
this
),
'waitForAbsent'
:
(
Map
<
String
,
String
>
params
)
=>
WaitForAbsent
.
deserialize
(
params
,
this
),
'tap'
:
(
Map
<
String
,
String
>
params
)
=>
Tap
.
deserialize
(
params
),
'waitFor'
:
(
Map
<
String
,
String
>
params
)
=>
WaitFor
.
deserialize
(
params
),
'waitForAbsent'
:
(
Map
<
String
,
String
>
params
)
=>
WaitForAbsent
.
deserialize
(
params
),
'waitForCondition'
:
(
Map
<
String
,
String
>
params
)
=>
WaitForCondition
.
deserialize
(
params
),
'waitUntilNoTransientCallbacks'
:
(
Map
<
String
,
String
>
params
)
=>
WaitUntilNoTransientCallbacks
.
deserialize
(
params
),
'waitUntilNoPendingFrame'
:
(
Map
<
String
,
String
>
params
)
=>
WaitUntilNoPendingFrame
.
deserialize
(
params
),
'waitUntilFirstFrameRasterized'
:
(
Map
<
String
,
String
>
params
)
=>
WaitUntilFirstFrameRasterized
.
deserialize
(
params
),
'get_semantics_id'
:
(
Map
<
String
,
String
>
params
)
=>
GetSemanticsId
.
deserialize
(
params
,
this
),
'get_offset'
:
(
Map
<
String
,
String
>
params
)
=>
GetOffset
.
deserialize
(
params
,
this
),
'get_diagnostics_tree'
:
(
Map
<
String
,
String
>
params
)
=>
GetDiagnosticsTree
.
deserialize
(
params
,
this
),
'get_semantics_id'
:
(
Map
<
String
,
String
>
params
)
=>
GetSemanticsId
.
deserialize
(
params
),
'get_offset'
:
(
Map
<
String
,
String
>
params
)
=>
GetOffset
.
deserialize
(
params
),
'get_diagnostics_tree'
:
(
Map
<
String
,
String
>
params
)
=>
GetDiagnosticsTree
.
deserialize
(
params
),
});
for
(
final
FinderExtension
finder
in
finders
)
{
_finderExtensions
[
finder
.
finderType
]
=
finder
;
}
_finders
.
addAll
(<
String
,
FinderConstructor
>{
'ByText'
:
(
SerializableFinder
finder
)
=>
_createByTextFinder
(
finder
as
ByText
),
'ByTooltipMessage'
:
(
SerializableFinder
finder
)
=>
_createByTooltipMessageFinder
(
finder
as
ByTooltipMessage
),
'BySemanticsLabel'
:
(
SerializableFinder
finder
)
=>
_createBySemanticsLabelFinder
(
finder
as
BySemanticsLabel
),
'ByValueKey'
:
(
SerializableFinder
finder
)
=>
_createByValueKeyFinder
(
finder
as
ByValueKey
),
'ByType'
:
(
SerializableFinder
finder
)
=>
_createByTypeFinder
(
finder
as
ByType
),
'PageBack'
:
(
SerializableFinder
finder
)
=>
_createPageBackFinder
(),
'Ancestor'
:
(
SerializableFinder
finder
)
=>
_createAncestorFinder
(
finder
as
Ancestor
),
'Descendant'
:
(
SerializableFinder
finder
)
=>
_createDescendantFinder
(
finder
as
Descendant
),
});
}
final
TestTextInput
_testTextInput
=
TestTextInput
();
...
...
@@ -239,7 +185,7 @@ class FlutterDriverExtension with DeserializeFinderFactory {
final
WidgetController
_prober
=
LiveWidgetController
(
WidgetsBinding
.
instance
);
final
Map
<
String
,
CommandHandlerCallback
>
_commandHandlers
=
<
String
,
CommandHandlerCallback
>{};
final
Map
<
String
,
CommandDeserializerCallback
>
_commandDeserializers
=
<
String
,
CommandDeserializerCallback
>{};
final
Map
<
String
,
Finder
Extension
>
_finderExtensions
=
<
String
,
FinderExtension
>{};
final
Map
<
String
,
Finder
Constructor
>
_finders
=
<
String
,
FinderConstructor
>{};
/// With [_frameSync] enabled, Flutter Driver will wait to perform an action
/// until there are no pending frames in the app under test.
...
...
@@ -426,30 +372,12 @@ class FlutterDriverExtension with DeserializeFinderFactory {
}
Finder
_createFinder
(
SerializableFinder
finder
)
{
switch
(
finder
.
finderType
)
{
case
'ByText'
:
return
_createByTextFinder
(
finder
as
ByText
);
case
'ByTooltipMessage'
:
return
_createByTooltipMessageFinder
(
finder
as
ByTooltipMessage
);
case
'BySemanticsLabel'
:
return
_createBySemanticsLabelFinder
(
finder
as
BySemanticsLabel
);
case
'ByValueKey'
:
return
_createByValueKeyFinder
(
finder
as
ByValueKey
);
case
'ByType'
:
return
_createByTypeFinder
(
finder
as
ByType
);
case
'PageBack'
:
return
_createPageBackFinder
();
case
'Ancestor'
:
return
_createAncestorFinder
(
finder
as
Ancestor
);
case
'Descendant'
:
return
_createDescendantFinder
(
finder
as
Descendant
);
default
:
if
(
_finderExtensions
.
containsKey
(
finder
.
finderType
))
{
return
_finderExtensions
[
finder
.
finderType
].
createFinder
(
finder
);
}
else
{
throw
'Unsupported finder type:
${finder.finderType}
'
;
}
}
final
FinderConstructor
constructor
=
_finders
[
finder
.
finderType
];
if
(
constructor
==
null
)
throw
'Unsupported finder type:
${finder.finderType}
'
;
return
constructor
(
finder
);
}
Future
<
TapResult
>
_tap
(
Command
command
)
async
{
...
...
packages/flutter_driver/test/src/real_tests/extension_test.dart
View file @
14af5bbe
...
...
@@ -37,7 +37,7 @@ void main() {
setUp
(()
{
result
=
null
;
extension
=
FlutterDriverExtension
((
String
message
)
async
{
log
.
add
(
message
);
return
(
messageId
+=
1
).
toString
();
},
false
,
<
FinderExtension
>[]
);
extension
=
FlutterDriverExtension
((
String
message
)
async
{
log
.
add
(
message
);
return
(
messageId
+=
1
).
toString
();
},
false
);
});
testWidgets
(
'returns immediately when transient callback queue is empty'
,
(
WidgetTester
tester
)
async
{
...
...
@@ -98,7 +98,7 @@ void main() {
setUp
(()
{
result
=
null
;
extension
=
FlutterDriverExtension
((
String
message
)
async
{
log
.
add
(
message
);
return
(
messageId
+=
1
).
toString
();
},
false
,
<
FinderExtension
>[]
);
extension
=
FlutterDriverExtension
((
String
message
)
async
{
log
.
add
(
message
);
return
(
messageId
+=
1
).
toString
();
},
false
);
});
testWidgets
(
'waiting for NoTransientCallbacks returns immediately when transient callback queue is empty'
,
(
WidgetTester
tester
)
async
{
...
...
@@ -464,7 +464,7 @@ void main() {
group
(
'getSemanticsId'
,
()
{
FlutterDriverExtension
extension
;
setUp
(()
{
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
});
testWidgets
(
'works when semantics are enabled'
,
(
WidgetTester
tester
)
async
{
...
...
@@ -513,7 +513,7 @@ void main() {
});
testWidgets
(
'getOffset'
,
(
WidgetTester
tester
)
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
Offset
>
getOffset
(
OffsetType
offset
)
async
{
final
Map
<
String
,
String
>
arguments
=
GetOffset
(
ByValueKey
(
1
),
offset
).
serialize
();
...
...
@@ -545,7 +545,7 @@ void main() {
testWidgets
(
'getText'
,
(
WidgetTester
tester
)
async
{
await
silenceDriverLogger
(()
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
String
>
getTextInternal
(
SerializableFinder
search
)
async
{
final
Map
<
String
,
String
>
arguments
=
GetText
(
search
,
timeout:
const
Duration
(
seconds:
1
)).
serialize
();
...
...
@@ -615,7 +615,7 @@ void main() {
testWidgets
(
'descendant finder'
,
(
WidgetTester
tester
)
async
{
await
silenceDriverLogger
(()
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
String
>
getDescendantText
({
String
of
,
bool
matchRoot
=
false
})
async
{
final
Map
<
String
,
String
>
arguments
=
GetText
(
Descendant
(
...
...
@@ -660,7 +660,7 @@ void main() {
testWidgets
(
'descendant finder firstMatchOnly'
,
(
WidgetTester
tester
)
async
{
await
silenceDriverLogger
(()
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
String
>
getDescendantText
()
async
{
final
Map
<
String
,
String
>
arguments
=
GetText
(
Descendant
(
...
...
@@ -694,7 +694,7 @@ void main() {
testWidgets
(
'ancestor finder'
,
(
WidgetTester
tester
)
async
{
await
silenceDriverLogger
(()
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
Offset
>
getAncestorTopLeft
({
String
of
,
String
matching
,
bool
matchRoot
=
false
})
async
{
final
Map
<
String
,
String
>
arguments
=
GetOffset
(
Ancestor
(
...
...
@@ -764,7 +764,7 @@ void main() {
testWidgets
(
'ancestor finder firstMatchOnly'
,
(
WidgetTester
tester
)
async
{
await
silenceDriverLogger
(()
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
Offset
>
getAncestorTopLeft
()
async
{
final
Map
<
String
,
String
>
arguments
=
GetOffset
(
Ancestor
(
...
...
@@ -812,7 +812,7 @@ void main() {
});
testWidgets
(
'GetDiagnosticsTree'
,
(
WidgetTester
tester
)
async
{
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
final
FlutterDriverExtension
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
Future
<
Map
<
String
,
Object
>>
getDiagnosticsTree
(
DiagnosticsType
type
,
SerializableFinder
finder
,
{
int
depth
=
0
,
bool
properties
=
true
})
async
{
final
Map
<
String
,
String
>
arguments
=
GetDiagnosticsTree
(
finder
,
type
,
subtreeDepth:
depth
,
includeProperties:
properties
).
serialize
();
...
...
@@ -882,7 +882,7 @@ void main() {
Map
<
String
,
dynamic
>
result
;
setUp
(()
{
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
,
<
FinderExtension
>[]
);
extension
=
FlutterDriverExtension
((
String
arg
)
async
=>
''
,
true
);
result
=
null
;
});
...
...
packages/flutter_driver/test/src/real_tests/find_test.dart
View file @
14af5bbe
...
...
@@ -2,15 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'package:flutter_driver/flutter_driver.dart'
;
import
'package:flutter_driver/src/common/find.dart'
;
import
'package:mockito/mockito.dart'
;
import
'../../common.dart'
;
void
main
(
)
{
MockDeserialize
mockDeserialize
;
test
(
'Ancestor finder serialize'
,
()
{
const
SerializableFinder
of
=
ByType
(
'Text'
);
final
SerializableFinder
matching
=
ByValueKey
(
'hello'
);
...
...
@@ -39,7 +35,7 @@ void main() {
'firstMatchOnly'
:
'true'
,
};
final
Ancestor
a
=
Ancestor
.
deserialize
(
serialized
,
mockDeserialize
);
final
Ancestor
a
=
Ancestor
.
deserialize
(
serialized
);
expect
(
a
.
of
,
isA
<
ByType
>());
expect
(
a
.
matching
,
isA
<
ByValueKey
>());
expect
(
a
.
matchRoot
,
isTrue
);
...
...
@@ -74,12 +70,10 @@ void main() {
'firstMatchOnly'
:
'true'
,
};
final
Descendant
a
=
Descendant
.
deserialize
(
serialized
,
mockDeserialize
);
final
Descendant
a
=
Descendant
.
deserialize
(
serialized
);
expect
(
a
.
of
,
isA
<
ByType
>());
expect
(
a
.
matching
,
isA
<
ByValueKey
>());
expect
(
a
.
matchRoot
,
isTrue
);
expect
(
a
.
firstMatchOnly
,
isTrue
);
});
}
class
MockDeserialize
with
Mock
,
DeserializeFinderFactory
{
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment