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
5318782a
Unverified
Commit
5318782a
authored
Jan 20, 2021
by
Dan Field
Committed by
GitHub
Jan 20, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Use package:vm_service instead of json_rpc_2 (#74215)
parent
178c87cc
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
155 additions
and
368 deletions
+155
-368
pubspec.yaml
packages/flutter_driver/pubspec.yaml
+2
-3
drive_todo_list_scroll.dart
...emote_debug_protocol/examples/drive_todo_list_scroll.dart
+0
-65
list_vms_and_flutter_views.dart
...e_debug_protocol/examples/list_vms_and_flutter_views.dart
+0
-48
dart_vm.dart
...s/fuchsia_remote_debug_protocol/lib/src/dart/dart_vm.dart
+51
-107
fuchsia_remote_connection.dart
...ote_debug_protocol/lib/src/fuchsia_remote_connection.dart
+2
-5
pubspec.yaml
packages/fuchsia_remote_debug_protocol/pubspec.yaml
+18
-29
fuchsia_remote_connection_test.dart
...e_debug_protocol/test/fuchsia_remote_connection_test.dart
+12
-12
network_test.dart
...a_remote_debug_protocol/test/src/common/network_test.dart
+2
-1
dart_vm_test.dart
...sia_remote_debug_protocol/test/src/dart/dart_vm_test.dart
+68
-98
No files found.
packages/flutter_driver/pubspec.yaml
View file @
5318782a
...
@@ -30,7 +30,6 @@ dependencies:
...
@@ -30,7 +30,6 @@ dependencies:
convert
:
2.1.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert
:
2.1.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto
:
2.1.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto
:
2.1.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
fake_async
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
fake_async
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
json_rpc_2
:
2.2.2
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher
:
0.12.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher
:
0.12.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
platform
:
3.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
platform
:
3.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
process
:
4.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
process
:
4.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...
@@ -43,7 +42,6 @@ dependencies:
...
@@ -43,7 +42,6 @@ dependencies:
test_api
:
0.2.19-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api
:
0.2.19-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data
:
1.3.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data
:
1.3.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math
:
2.1.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math
:
2.1.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel
:
1.1.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies
:
dev_dependencies
:
quiver
:
2.1.5
quiver
:
2.1.5
...
@@ -75,7 +73,8 @@ dev_dependencies:
...
@@ -75,7 +73,8 @@ dev_dependencies:
source_maps
:
0.10.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps
:
0.10.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core
:
0.3.12-nullsafety.9
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core
:
0.3.12-nullsafety.9
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher
:
0.9.7+15
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher
:
0.9.7+15
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel
:
1.1.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol
:
0.7.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol
:
0.7.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml
:
2.2.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml
:
2.2.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM:
d99
e
# PUBSPEC CHECKSUM:
b25
e
packages/fuchsia_remote_debug_protocol/examples/drive_todo_list_scroll.dart
deleted
100644 → 0
View file @
178c87cc
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:core'
;
import
'package:flutter_driver/flutter_driver.dart'
;
import
'package:fuchsia_remote_debug_protocol/fuchsia_remote_debug_protocol.dart'
;
import
'package:fuchsia_remote_debug_protocol/logging.dart'
;
/// Runs through a simple usage of the fuchsia_remote_debug_protocol library:
/// connects to a remote machine at the address in argument 1 (interface
/// optional for argument 2) to drive an application named 'todo_list' by
/// scrolling up and down on the main scaffold.
///
/// Make sure to set up your application (you can change the name from
/// 'todo_list') follows the setup for testing with the flutter driver:
/// https://flutter.dev/testing/#adding-the-flutter_driver-dependency
///
/// Example usage:
///
/// $ dart examples/driver_todo_list_scroll.dart \
/// fe80::8eae:4cff:fef4:9247 eno1
Future
<
void
>
main
(
List
<
String
>
args
)
async
{
// Log only at info level within the library. If issues arise, this can be
// changed to [LoggingLevel.all] or [LoggingLevel.fine] to see more
// information.
Logger
.
globalLevel
=
LoggingLevel
.
info
;
if
(
args
.
isEmpty
)
{
print
(
'Expects an IP address and/or network interface'
);
return
;
}
final
String
address
=
args
[
0
];
final
String
interface
=
args
.
length
>
1
?
args
[
1
]
:
''
;
// Example ssh config path for the Fuchsia device after having made a local
// build.
const
String
sshConfigPath
=
'../../../fuchsia/out/x64rel/ssh-keys/ssh_config'
;
final
FuchsiaRemoteConnection
connection
=
await
FuchsiaRemoteConnection
.
connect
(
address
,
interface
,
sshConfigPath
);
const
Pattern
isolatePattern
=
'todo_list'
;
print
(
'Finding
$isolatePattern
'
);
final
List
<
IsolateRef
>
refs
=
await
connection
.
getMainIsolatesByPattern
(
isolatePattern
);
final
IsolateRef
ref
=
refs
.
first
;
print
(
'Driving
${ref.name}
'
);
final
FlutterDriver
driver
=
await
FlutterDriver
.
connect
(
dartVmServiceUrl:
ref
.
dartVm
.
uri
.
toString
(),
isolateNumber:
ref
.
number
,
printCommunication:
true
,
logCommunicationToFile:
false
);
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
// Scrolls down 300px.
await
driver
.
scroll
(
find
.
byType
(
'Scaffold'
),
0.0
,
-
300.0
,
const
Duration
(
milliseconds:
300
));
await
Future
<
void
>.
delayed
(
const
Duration
(
milliseconds:
500
));
// Scrolls up 300px.
await
driver
.
scroll
(
find
.
byType
(
'Scaffold'
),
300.0
,
300.0
,
const
Duration
(
milliseconds:
300
));
}
await
driver
.
close
();
await
connection
.
stop
();
}
packages/fuchsia_remote_debug_protocol/examples/list_vms_and_flutter_views.dart
deleted
100644 → 0
View file @
178c87cc
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:core'
;
import
'package:fuchsia_remote_debug_protocol/fuchsia_remote_debug_protocol.dart'
;
import
'package:fuchsia_remote_debug_protocol/logging.dart'
;
/// Runs through a simple usage of the fuchsia_remote_debug_protocol library:
/// connects to a remote machine at the address in argument 1 (interface
/// optional for argument 2) to list all active flutter views and Dart VMs
/// running on said device. This uses an SSH config file (optional, depending
/// on your setup).
///
/// Example usage:
///
/// $ dart examples/list_vms_and_flutter_views.dart \
/// fe80::8eae:4cff:fef4:9247 eno1
Future
<
void
>
main
(
List
<
String
>
args
)
async
{
// Log only at info level within the library. If issues arise, this can be
// changed to [LoggingLevel.all] or [LoggingLevel.fine] to see more
// information.
Logger
.
globalLevel
=
LoggingLevel
.
info
;
if
(
args
.
isEmpty
)
{
print
(
'Expects an IP address and/or network interface'
);
return
;
}
final
String
address
=
args
[
0
];
final
String
interface
=
args
.
length
>
1
?
args
[
1
]
:
''
;
// Example ssh config path for the Fuchsia device after having made a local
// build.
const
String
sshConfigPath
=
'../../../fuchsia/out/x64rel/ssh-keys/ssh_config'
;
final
FuchsiaRemoteConnection
connection
=
await
FuchsiaRemoteConnection
.
connect
(
address
,
interface
,
sshConfigPath
);
print
(
'On
$address
, the following Dart VM ports are running:'
);
for
(
final
int
port
in
await
connection
.
getDeviceServicePorts
())
{
print
(
'
\t
$port
'
);
}
print
(
''
);
print
(
'The following Flutter views are running:'
);
for
(
final
FlutterView
view
in
await
connection
.
getFlutterViews
())
{
print
(
'
\t
${view.name ?? view.id}
'
);
}
await
connection
.
stop
();
}
packages/fuchsia_remote_debug_protocol/lib/src/dart/dart_vm.dart
View file @
5318782a
...
@@ -5,22 +5,17 @@
...
@@ -5,22 +5,17 @@
import
'dart:async'
;
import
'dart:async'
;
import
'dart:io'
;
import
'dart:io'
;
import
'package:json_rpc_2/json_rpc_2.dart'
as
json_rpc
;
import
'package:vm_service/vm_service.dart'
as
vms
;
import
'package:web_socket_channel/io.dart'
;
import
'../common/logging.dart'
;
import
'../common/logging.dart'
;
const
Duration
_kConnectTimeout
=
Duration
(
seconds:
9
);
const
Duration
_kConnectTimeout
=
Duration
(
seconds:
3
);
const
Duration
_kReconnectAttemptInterval
=
Duration
(
seconds:
3
);
const
Duration
_kRpcTimeout
=
Duration
(
seconds:
5
);
const
Duration
_kRpcTimeout
=
Duration
(
seconds:
5
);
final
Logger
_log
=
Logger
(
'DartVm'
);
final
Logger
_log
=
Logger
(
'DartVm'
);
/// Signature of an asynchronous function for establishing a
JSON RPC-2
/// Signature of an asynchronous function for establishing a
[vms.VmService]
/// connection to a [Uri].
/// connection to a [Uri].
typedef
RpcPeerConnectionFunction
=
Future
<
json_rpc
.
Peer
>
Function
(
typedef
RpcPeerConnectionFunction
=
Future
<
vms
.
VmService
>
Function
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
});
});
...
@@ -31,79 +26,44 @@ typedef RpcPeerConnectionFunction = Future<json_rpc.Peer> Function(
...
@@ -31,79 +26,44 @@ typedef RpcPeerConnectionFunction = Future<json_rpc.Peer> Function(
/// custom connection function is needed.
/// custom connection function is needed.
RpcPeerConnectionFunction
fuchsiaVmServiceConnectionFunction
=
_waitAndConnect
;
RpcPeerConnectionFunction
fuchsiaVmServiceConnectionFunction
=
_waitAndConnect
;
/// The JSON RPC 2 spec says that a notification from a client must not respond
/// to the client. It's possible the client sent a notification as a "ping", but
/// the service isn't set up yet to respond.
///
/// For example, if the client sends a notification message to the server for
/// 'streamNotify', but the server has not finished loading, it will throw an
/// exception. Since the message is a notification, the server follows the
/// specification and does not send a response back, but is left with an
/// unhandled exception. That exception is safe for us to ignore - the client
/// is signaling that it will try again later if it doesn't get what it wants
/// here by sending a notification.
// This may be ignoring too many exceptions. It would be best to rewrite
// the client code to not use notifications so that it gets error replies back
// and can decide what to do from there.
// TODO(dnfield): https://github.com/flutter/flutter/issues/31813
bool
_ignoreRpcError
(
dynamic
error
)
{
if
(
error
is
json_rpc
.
RpcException
)
{
final
json_rpc
.
RpcException
exception
=
error
;
return
exception
.
data
==
null
||
exception
.
data
[
'id'
]
==
null
;
}
else
if
(
error
is
String
&&
error
.
startsWith
(
'JSON-RPC error -32601'
))
{
return
true
;
}
return
false
;
}
void
_unhandledJsonRpcError
(
dynamic
error
,
dynamic
stack
)
{
if
(
_ignoreRpcError
(
error
))
{
return
;
}
_log
.
fine
(
'Error in internalimplementation of JSON RPC.
\n
$error
\n
$stack
'
);
}
/// Attempts to connect to a Dart VM service.
/// Attempts to connect to a Dart VM service.
///
///
/// Gives up after `timeout` has elapsed.
/// Gives up after `timeout` has elapsed.
Future
<
json_rpc
.
Peer
>
_waitAndConnect
(
Future
<
vms
.
VmService
>
_waitAndConnect
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
=
_kConnectTimeout
,
Duration
timeout
=
_kConnectTimeout
,
})
async
{
})
async
{
final
Stopwatch
timer
=
Stopwatch
()..
start
();
int
attempts
=
0
;
WebSocket
socket
;
Future
<
json_rpc
.
Peer
>
attemptConnection
(
Uri
uri
)
async
{
while
(
true
)
{
WebSocket
socket
;
json_rpc
.
Peer
peer
;
try
{
try
{
socket
=
await
WebSocket
.
connect
(
uri
.
toString
()).
timeout
(
timeout
);
socket
=
await
WebSocket
.
connect
(
uri
.
toString
());
peer
=
json_rpc
.
Peer
(
IOWebSocketChannel
(
socket
).
cast
(),
onUnhandledError:
_unhandledJsonRpcError
)..
listen
();
final
StreamController
<
dynamic
>
controller
=
StreamController
<
dynamic
>();
return
peer
;
final
Completer
<
void
>
streamClosedCompleter
=
Completer
<
void
>();
}
on
HttpException
catch
(
e
)
{
socket
.
listen
(
// This is a fine warning as this most likely means the port is stale.
(
dynamic
data
)
=>
controller
.
add
(
data
),
_log
.
fine
(
'
$e
:
${e.message}
'
);
onDone:
()
=>
streamClosedCompleter
.
complete
(),
await
peer
?.
close
();
);
await
socket
?.
close
();
final
vms
.
VmService
service
=
vms
.
VmService
(
rethrow
;
controller
.
stream
,
socket
.
add
,
log:
null
,
disposeHandler:
()
=>
socket
.
close
(),
streamClosed:
streamClosedCompleter
.
future
);
// This call is to ensure we are able to establish a connection instead of
// keeping on trucking and failing farther down the process.
await
service
.
getVersion
();
return
service
;
}
catch
(
e
)
{
}
catch
(
e
)
{
_log
.
fine
(
'Dart VM connection failed
$e
:
${e.message}
'
);
// Other unknown errors will be handled with reconnects.
await
peer
?.
close
();
await
socket
?.
close
();
await
socket
?.
close
();
if
(
timer
.
elapsed
<
timeout
)
{
if
(
attempts
>
5
)
{
_log
.
info
(
'Attempting to reconnect'
);
_log
.
warning
(
'It is taking an unusually long time to connect to the VM...'
);
await
Future
<
void
>.
delayed
(
_kReconnectAttemptInterval
);
return
attemptConnection
(
uri
);
}
else
{
_log
.
warning
(
"Connection to Fuchsia's Dart VM timed out at "
'
${uri.toString()}
'
);
rethrow
;
}
}
attempts
+=
1
;
await
Future
<
void
>.
delayed
(
timeout
);
}
}
}
}
return
attemptConnection
(
uri
);
}
}
/// Restores the VM service connection function to the default implementation.
/// Restores the VM service connection function to the default implementation.
...
@@ -133,9 +93,9 @@ class RpcFormatError extends Error {
...
@@ -133,9 +93,9 @@ class RpcFormatError extends Error {
/// Either wraps existing RPC calls to the Dart VM service, or runs raw RPC
/// Either wraps existing RPC calls to the Dart VM service, or runs raw RPC
/// function calls via [invokeRpc].
/// function calls via [invokeRpc].
class
DartVm
{
class
DartVm
{
DartVm
.
_
(
this
.
_
peer
,
this
.
uri
);
DartVm
.
_
(
this
.
_
vmService
,
this
.
uri
);
final
json_rpc
.
Peer
_peer
;
final
vms
.
VmService
_vmService
;
/// The URL through which this DartVM instance is connected.
/// The URL through which this DartVM instance is connected.
final
Uri
uri
;
final
Uri
uri
;
...
@@ -150,12 +110,12 @@ class DartVm {
...
@@ -150,12 +110,12 @@ class DartVm {
if
(
uri
.
scheme
==
'http'
)
{
if
(
uri
.
scheme
==
'http'
)
{
uri
=
uri
.
replace
(
scheme:
'ws'
,
path:
'/ws'
);
uri
=
uri
.
replace
(
scheme:
'ws'
,
path:
'/ws'
);
}
}
final
json_rpc
.
Peer
peer
=
await
fuchsiaVmServiceConnectionFunction
(
uri
,
timeout:
timeout
);
final
vms
.
VmService
service
=
await
fuchsiaVmServiceConnectionFunction
(
uri
,
timeout:
timeout
);
if
(
peer
==
null
)
{
if
(
service
==
null
)
{
return
null
;
return
null
;
}
}
return
DartVm
.
_
(
peer
,
uri
);
return
DartVm
.
_
(
service
,
uri
);
}
}
/// Returns a [List] of [IsolateRef] objects whose name matches `pattern`.
/// Returns a [List] of [IsolateRef] objects whose name matches `pattern`.
...
@@ -167,39 +127,17 @@ class DartVm {
...
@@ -167,39 +127,17 @@ class DartVm {
Pattern
pattern
,
{
Pattern
pattern
,
{
Duration
timeout
=
_kRpcTimeout
,
Duration
timeout
=
_kRpcTimeout
,
})
async
{
})
async
{
final
Map
<
String
,
dynamic
>
jsonVmRef
=
final
vms
.
VM
vmRef
=
await
_vmService
.
getVM
();
await
invokeRpc
(
'getVM'
,
timeout:
timeout
);
final
List
<
IsolateRef
>
result
=
<
IsolateRef
>[];
final
List
<
IsolateRef
>
result
=
<
IsolateRef
>[];
for
(
final
Map
<
String
,
dynamic
>
jsonIsolate
in
(
jsonVmRef
[
'isolates'
]
as
List
<
dynamic
>).
cast
<
Map
<
String
,
dynamic
>>())
{
for
(
final
vms
.
IsolateRef
isolateRef
in
vmRef
.
isolates
)
{
final
String
name
=
jsonIsolate
[
'name'
]
as
String
;
if
(
pattern
.
matchAsPrefix
(
isolateRef
.
name
)
!=
null
)
{
if
(
pattern
.
matchAsPrefix
(
name
)
!=
null
)
{
_log
.
fine
(
'Found Isolate matching "
$pattern
": "
${isolateRef.name}
"'
);
_log
.
fine
(
'Found Isolate matching "
$pattern
": "
$name
"'
);
result
.
add
(
IsolateRef
.
_fromJson
(
isolateRef
.
json
,
this
));
result
.
add
(
IsolateRef
.
_fromJson
(
jsonIsolate
,
this
));
}
}
}
}
return
result
;
return
result
;
}
}
/// Invokes a raw JSON RPC command with the VM service.
///
/// When `timeout` is set and reached, throws a [TimeoutException].
///
/// If the function returns, it is with a parsed JSON response.
Future
<
Map
<
String
,
dynamic
>>
invokeRpc
(
String
function
,
{
Map
<
String
,
dynamic
>
params
,
Duration
timeout
=
_kRpcTimeout
,
})
async
{
final
Map
<
String
,
dynamic
>
result
=
await
_peer
.
sendRequest
(
function
,
params
??
<
String
,
dynamic
>{})
.
timeout
(
timeout
,
onTimeout:
()
{
throw
TimeoutException
(
'Peer connection timed out during RPC call'
,
timeout
,
);
})
as
Map
<
String
,
dynamic
>;
return
result
;
}
/// Returns a list of [FlutterView] objects running across all Dart VM's.
/// Returns a list of [FlutterView] objects running across all Dart VM's.
///
///
...
@@ -211,9 +149,8 @@ class DartVm {
...
@@ -211,9 +149,8 @@ class DartVm {
Duration
timeout
=
_kRpcTimeout
,
Duration
timeout
=
_kRpcTimeout
,
})
async
{
})
async
{
final
List
<
FlutterView
>
views
=
<
FlutterView
>[];
final
List
<
FlutterView
>
views
=
<
FlutterView
>[];
final
Map
<
String
,
dynamic
>
rpcResponse
=
final
vms
.
Response
rpcResponse
=
await
_vmService
.
callMethod
(
'_flutter.listViews'
);
await
invokeRpc
(
'_flutter.listViews'
,
timeout:
timeout
);
for
(
final
Map
<
String
,
dynamic
>
jsonView
in
(
rpcResponse
.
json
[
'views'
]
as
List
<
dynamic
>).
cast
<
Map
<
String
,
dynamic
>>())
{
for
(
final
Map
<
String
,
dynamic
>
jsonView
in
(
rpcResponse
[
'views'
]
as
List
<
dynamic
>).
cast
<
Map
<
String
,
dynamic
>>())
{
final
FlutterView
flutterView
=
FlutterView
.
_fromJson
(
jsonView
);
final
FlutterView
flutterView
=
FlutterView
.
_fromJson
(
jsonView
);
if
(
flutterView
!=
null
)
{
if
(
flutterView
!=
null
)
{
views
.
add
(
flutterView
);
views
.
add
(
flutterView
);
...
@@ -222,11 +159,18 @@ class DartVm {
...
@@ -222,11 +159,18 @@ class DartVm {
return
views
;
return
views
;
}
}
/// Tests that the connection to the [vms.VmService] is valid.
Future
<
void
>
ping
()
async
{
final
vms
.
Version
version
=
await
_vmService
.
getVersion
();
_log
.
fine
(
'DartVM(
$uri
) version check result:
$version
'
);
}
/// Disconnects from the Dart VM Service.
/// Disconnects from the Dart VM Service.
///
///
/// After this function completes this object is no longer usable.
/// After this function completes this object is no longer usable.
Future
<
void
>
stop
()
async
{
Future
<
void
>
stop
()
async
{
await
_peer
?.
close
();
_vmService
.
dispose
();
await
_vmService
.
onDone
;
}
}
}
}
...
...
packages/fuchsia_remote_debug_protocol/lib/src/fuchsia_remote_connection.dart
View file @
5318782a
...
@@ -473,12 +473,9 @@ class FuchsiaRemoteConnection {
...
@@ -473,12 +473,9 @@ class FuchsiaRemoteConnection {
/// Removes any failing ports from the cache.
/// Removes any failing ports from the cache.
Future
<
void
>
_checkPorts
([
bool
queueEvents
=
true
])
async
{
Future
<
void
>
_checkPorts
([
bool
queueEvents
=
true
])
async
{
// Filters out stale ports after connecting. Ignores results.
// Filters out stale ports after connecting. Ignores results.
await
_invokeForAllVms
<
Map
<
String
,
dynamic
>
>(
await
_invokeForAllVms
<
void
>(
(
DartVm
vmService
)
async
{
(
DartVm
vmService
)
async
{
final
Map
<
String
,
dynamic
>
res
=
await
vmService
.
ping
();
await
vmService
.
invokeRpc
(
'getVersion'
);
_log
.
fine
(
'DartVM(
${vmService.uri}
) version check result:
$res
'
);
return
res
;
},
},
queueEvents
,
queueEvents
,
);
);
...
...
packages/fuchsia_remote_debug_protocol/pubspec.yaml
View file @
5318782a
...
@@ -8,40 +8,13 @@ environment:
...
@@ -8,40 +8,13 @@ environment:
sdk
:
"
>=2.2.2
<3.0.0"
sdk
:
"
>=2.2.2
<3.0.0"
dependencies
:
dependencies
:
json_rpc_2
:
2.2.2
process
:
4.0.0-nullsafety.4
process
:
4.0.0-nullsafety.4
web_socket_channel
:
1.1.0
vm_service
:
5.5.0
flutter_test
:
sdk
:
flutter
flutter_driver
:
sdk
:
flutter
archive
:
2.0.13
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args
:
1.6.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async
:
2.5.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector
:
2.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
clock
:
1.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection
:
1.15.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert
:
2.1.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto
:
2.1.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
fake_async
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file
:
6.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file
:
6.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher
:
0.12.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta
:
1.3.0-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta
:
1.3.0-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path
:
1.8.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path
:
1.8.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
platform
:
3.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
platform
:
3.0.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span
:
1.8.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
stack_trace
:
1.10.0-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
stream_channel
:
2.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner
:
1.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
sync_http
:
0.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api
:
0.2.19-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data
:
1.3.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math
:
2.1.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vm_service
:
5.5.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webdriver
:
2.1.2
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies
:
dev_dependencies
:
mockito
:
4.1.1
mockito
:
4.1.1
...
@@ -49,14 +22,22 @@ dev_dependencies:
...
@@ -49,14 +22,22 @@ dev_dependencies:
_fe_analyzer_shared
:
12.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
_fe_analyzer_shared
:
12.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer
:
0.40.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer
:
0.40.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args
:
1.6.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async
:
2.5.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector
:
2.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
cli_util
:
0.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
cli_util
:
0.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection
:
1.15.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert
:
2.1.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage
:
0.14.2
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage
:
0.14.2
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto
:
2.1.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob
:
1.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob
:
1.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server
:
2.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server
:
2.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser
:
3.1.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser
:
3.1.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io
:
0.3.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io
:
0.3.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
js
:
0.6.3-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
js
:
0.6.3-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
logging
:
0.11.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
logging
:
0.11.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher
:
0.12.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
mime
:
0.9.7
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
mime
:
0.9.7
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_interop
:
1.2.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_interop
:
1.2.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_io
:
1.1.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_io
:
1.1.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...
@@ -71,9 +52,17 @@ dev_dependencies:
...
@@ -71,9 +52,17 @@ dev_dependencies:
shelf_web_socket
:
0.2.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
shelf_web_socket
:
0.2.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace
:
2.1.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_map_stack_trace
:
2.1.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps
:
0.10.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_maps
:
0.10.10-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span
:
1.8.0-nullsafety.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
stack_trace
:
1.10.0-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
stream_channel
:
2.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
string_scanner
:
1.1.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph
:
1.2.0-nullsafety.3
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_api
:
0.2.19-nullsafety.6
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core
:
0.3.12-nullsafety.9
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
test_core
:
0.3.12-nullsafety.9
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data
:
1.3.0-nullsafety.5
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher
:
0.9.7+15
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
watcher
:
0.9.7+15
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel
:
1.1.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol
:
0.7.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
webkit_inspection_protocol
:
0.7.4
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml
:
2.2.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml
:
2.2.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM:
5fad
# PUBSPEC CHECKSUM:
7193
packages/fuchsia_remote_debug_protocol/test/fuchsia_remote_connection_test.dart
View file @
5318782a
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
// found in the LICENSE file.
// found in the LICENSE file.
import
'package:mockito/mockito.dart'
;
import
'package:mockito/mockito.dart'
;
import
'package:
json_rpc_2/json_rpc_2.dart'
as
json_rpc
;
import
'package:
vm_service/vm_service.dart'
as
vms
;
import
'package:fuchsia_remote_debug_protocol/fuchsia_remote_debug_protocol.dart'
;
import
'package:fuchsia_remote_debug_protocol/fuchsia_remote_debug_protocol.dart'
;
...
@@ -12,7 +12,7 @@ import 'common.dart';
...
@@ -12,7 +12,7 @@ import 'common.dart';
void
main
(
)
{
void
main
(
)
{
group
(
'FuchsiaRemoteConnection.connect'
,
()
{
group
(
'FuchsiaRemoteConnection.connect'
,
()
{
List
<
MockPortForwarder
>
forwardedPorts
;
List
<
MockPortForwarder
>
forwardedPorts
;
List
<
Mock
Peer
>
mockPeerConnection
s
;
List
<
Mock
VmService
>
mockVmService
s
;
List
<
Uri
>
uriConnections
;
List
<
Uri
>
uriConnections
;
setUp
(()
{
setUp
(()
{
...
@@ -59,22 +59,22 @@ void main() {
...
@@ -59,22 +59,22 @@ void main() {
];
];
forwardedPorts
=
<
MockPortForwarder
>[];
forwardedPorts
=
<
MockPortForwarder
>[];
mock
PeerConnections
=
<
MockPeer
>[];
mock
VmServices
=
<
MockVmService
>[];
uriConnections
=
<
Uri
>[];
uriConnections
=
<
Uri
>[];
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Future
<
vms
.
VmService
>
mockVmConnectionFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
return
Future
<
json_rpc
.
Peer
>(()
async
{
return
Future
<
vms
.
VmService
>(()
async
{
final
Mock
Peer
mp
=
MockPeer
();
final
Mock
VmService
service
=
MockVmService
();
mock
PeerConnections
.
add
(
mp
);
mock
VmServices
.
add
(
service
);
uriConnections
.
add
(
uri
);
uriConnections
.
add
(
uri
);
when
(
mp
.
sendRequest
(
any
,
any
))
when
(
service
.
callMethod
(
'_flutter.listViews'
))
// The local ports match the desired indices for now, so get the
// The local ports match the desired indices for now, so get the
// canned response from the URI port.
// canned response from the URI port.
.
thenAnswer
((
_
)
=>
Future
<
Map
<
String
,
dynamic
>
>(
.
thenAnswer
((
_
)
=>
Future
<
vms
.
Response
>(
()
=>
flutterViewCannedResponses
[
uri
.
port
]
));
()
=>
vms
.
Response
.
parse
(
flutterViewCannedResponses
[
uri
.
port
])
));
return
mp
;
return
service
;
});
});
}
}
...
@@ -315,4 +315,4 @@ class MockSshCommandRunner extends Mock implements SshCommandRunner {}
...
@@ -315,4 +315,4 @@ class MockSshCommandRunner extends Mock implements SshCommandRunner {}
class
MockPortForwarder
extends
Mock
implements
PortForwarder
{}
class
MockPortForwarder
extends
Mock
implements
PortForwarder
{}
class
Mock
Peer
extends
Mock
implements
json_rpc
.
Peer
{}
class
Mock
VmService
extends
Mock
implements
vms
.
VmService
{}
packages/fuchsia_remote_debug_protocol/test/src/common/network_test.dart
View file @
5318782a
...
@@ -3,7 +3,8 @@
...
@@ -3,7 +3,8 @@
// found in the LICENSE file.
// found in the LICENSE file.
import
'package:fuchsia_remote_debug_protocol/src/common/network.dart'
;
import
'package:fuchsia_remote_debug_protocol/src/common/network.dart'
;
import
'package:flutter_test/flutter_test.dart'
;
import
'../../common.dart'
;
void
main
(
)
{
void
main
(
)
{
final
List
<
String
>
ipv4Addresses
=
<
String
>[
'127.0.0.1'
,
'8.8.8.8'
];
final
List
<
String
>
ipv4Addresses
=
<
String
>[
'127.0.0.1'
,
'8.8.8.8'
];
...
...
packages/fuchsia_remote_debug_protocol/test/src/dart/dart_vm_test.dart
View file @
5318782a
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
import
'dart:async'
;
import
'dart:async'
;
import
'package:fuchsia_remote_debug_protocol/src/dart/dart_vm.dart'
;
import
'package:fuchsia_remote_debug_protocol/src/dart/dart_vm.dart'
;
import
'package:
json_rpc_2/json_rpc_2.dart'
as
json_rpc
;
import
'package:
vm_service/vm_service.dart'
as
vms
;
import
'package:mockito/mockito.dart'
;
import
'package:mockito/mockito.dart'
;
import
'../../common.dart'
;
import
'../../common.dart'
;
...
@@ -17,11 +17,11 @@ void main() {
...
@@ -17,11 +17,11 @@ void main() {
});
});
test
(
'null connector'
,
()
async
{
test
(
'null connector'
,
()
async
{
Future
<
json_rpc
.
Peer
>
mockServiceFunction
(
Future
<
vms
.
VmService
>
mockServiceFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
return
Future
<
json_rpc
.
Peer
>(()
=>
null
);
return
Future
<
vms
.
VmService
>(()
=>
null
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockServiceFunction
;
fuchsiaVmServiceConnectionFunction
=
mockServiceFunction
;
...
@@ -30,12 +30,12 @@ void main() {
...
@@ -30,12 +30,12 @@ void main() {
});
});
test
(
'disconnect closes peer'
,
()
async
{
test
(
'disconnect closes peer'
,
()
async
{
final
Mock
Peer
peer
=
MockPeer
();
final
Mock
VmService
service
=
MockVmService
();
Future
<
json_rpc
.
Peer
>
mockServiceFunction
(
Future
<
vms
.
VmService
>
mockServiceFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
return
Future
<
json_rpc
.
Peer
>(()
=>
peer
);
return
Future
<
vms
.
VmService
>(()
=>
service
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockServiceFunction
;
fuchsiaVmServiceConnectionFunction
=
mockServiceFunction
;
...
@@ -43,15 +43,15 @@ void main() {
...
@@ -43,15 +43,15 @@ void main() {
await
DartVm
.
connect
(
Uri
.
parse
(
'http://this.whatever/ws'
));
await
DartVm
.
connect
(
Uri
.
parse
(
'http://this.whatever/ws'
));
expect
(
vm
,
isNot
(
null
));
expect
(
vm
,
isNot
(
null
));
await
vm
.
stop
();
await
vm
.
stop
();
verify
(
peer
.
cl
ose
());
verify
(
service
.
disp
ose
());
});
});
});
});
group
(
'DartVm.getAllFlutterViews'
,
()
{
group
(
'DartVm.getAllFlutterViews'
,
()
{
Mock
Peer
mockPeer
;
Mock
VmService
mockService
;
setUp
(()
{
setUp
(()
{
mock
Peer
=
MockPeer
();
mock
Service
=
MockVmService
();
});
});
tearDown
(()
{
tearDown
(()
{
...
@@ -90,13 +90,13 @@ void main() {
...
@@ -90,13 +90,13 @@ void main() {
],
],
};
};
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Future
<
vms
.
VmService
>
mockVmConnectionFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
when
(
mock
Peer
.
sendRequest
(
any
,
any
)).
thenAnswer
((
_
)
=>
when
(
mock
Service
.
callMethod
(
'_flutter.listViews'
)).
thenAnswer
((
_
)
async
=>
Future
<
Map
<
String
,
dynamic
>>(()
=>
flutterViewCannedResponses
));
vms
.
Response
.
parse
(
flutterViewCannedResponses
));
return
Future
<
json_rpc
.
Peer
>(()
=>
mockPeer
);
return
Future
<
vms
.
VmService
>(()
=>
mockService
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
...
@@ -148,13 +148,13 @@ void main() {
...
@@ -148,13 +148,13 @@ void main() {
],
],
};
};
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Future
<
vms
.
VmService
>
mockVmConnectionFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
when
(
mock
Peer
.
sendRequest
(
any
,
any
)).
thenAnswer
((
_
)
=>
when
(
mock
Service
.
callMethod
(
'_flutter.listViews'
)).
thenAnswer
((
_
)
async
=>
Future
<
Map
<
String
,
dynamic
>>(()
=>
flutterViewCannedResponses
));
vms
.
Response
.
parse
(
flutterViewCannedResponses
));
return
Future
<
json_rpc
.
Peer
>(()
=>
mockPeer
);
return
Future
<
vms
.
VmService
>(()
=>
mockService
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
...
@@ -198,14 +198,13 @@ void main() {
...
@@ -198,14 +198,13 @@ void main() {
],
],
};
};
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Future
<
vms
.
VmService
>
mockVmConnectionFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
when
(
mockPeer
.
sendRequest
(
any
,
any
)).
thenAnswer
((
_
)
=>
when
(
mockService
.
callMethod
(
'_flutter.listViews'
)).
thenAnswer
((
_
)
async
=>
Future
<
Map
<
String
,
dynamic
>>(
vms
.
Response
.
parse
(
flutterViewCannedResponseMissingId
));
()
=>
flutterViewCannedResponseMissingId
));
return
Future
<
vms
.
VmService
>(()
=>
mockService
);
return
Future
<
json_rpc
.
Peer
>(()
=>
mockPeer
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
...
@@ -221,46 +220,44 @@ void main() {
...
@@ -221,46 +220,44 @@ void main() {
});
});
test
(
'get isolates by pattern'
,
()
async
{
test
(
'get isolates by pattern'
,
()
async
{
final
Map
<
String
,
dynamic
>
vmCannedResponse
=
<
String
,
dynamic
>{
final
List
<
vms
.
IsolateRef
>
isolates
=
<
vms
.
IsolateRef
>[
'isolates'
:
<
dynamic
>[
vms
.
IsolateRef
.
parse
(<
String
,
dynamic
>{
<
String
,
dynamic
>{
'type'
:
'@Isolate'
,
'type'
:
'@Isolate'
,
'fixedId'
:
'true'
,
'fixedId'
:
'true'
,
'id'
:
'isolates/1'
,
'id'
:
'isolates/1'
,
'name'
:
'file://thingThatWillNotMatch:main()'
,
'name'
:
'file://thingThatWillNotMatch:main()'
,
'number'
:
'1'
,
'number'
:
'1'
,
}),
},
vms
.
IsolateRef
.
parse
(<
String
,
dynamic
>{
<
String
,
dynamic
>{
'type'
:
'@Isolate'
,
'type'
:
'@Isolate'
,
'fixedId'
:
'true'
,
'fixedId'
:
'true'
,
'id'
:
'isolates/2'
,
'id'
:
'isolates/2'
,
'name'
:
'0:dart_name_pattern()'
,
'name'
:
'0:dart_name_pattern()'
,
'number'
:
'2'
,
'number'
:
'2'
,
}),
},
vms
.
IsolateRef
.
parse
(<
String
,
dynamic
>{
<
String
,
dynamic
>{
'type'
:
'@Isolate'
,
'type'
:
'@Isolate'
,
'fixedId'
:
'true'
,
'fixedId'
:
'true'
,
'id'
:
'isolates/3'
,
'id'
:
'isolates/3'
,
'name'
:
'flutterBinary.cmx'
,
'name'
:
'flutterBinary.cmx'
,
'number'
:
'3'
,
'number'
:
'3'
,
}),
},
vms
.
IsolateRef
.
parse
(<
String
,
dynamic
>{
<
String
,
dynamic
>{
'type'
:
'@Isolate'
,
'type'
:
'@Isolate'
,
'fixedId'
:
'true'
,
'fixedId'
:
'true'
,
'id'
:
'isolates/4'
,
'id'
:
'isolates/4'
,
'name'
:
'0:some_other_dart_name_pattern()'
,
'name'
:
'0:some_other_dart_name_pattern()'
,
'number'
:
'4'
,
'number'
:
'4'
,
}),
},
];
],
};
Future
<
vms
.
VmService
>
mockVmConnectionFunction
(
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
when
(
mock
Peer
.
sendRequest
(
any
,
any
)).
thenAnswer
(
when
(
mock
Service
.
getVM
()).
thenAnswer
((
_
)
async
=>
(
_
)
=>
Future
<
Map
<
String
,
dynamic
>>(()
=>
vmCannedResponse
));
FakeVM
(
isolates:
isolates
));
return
Future
<
json_rpc
.
Peer
>(()
=>
mockPeer
);
return
Future
<
vms
.
VmService
>(()
=>
mockService
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
...
@@ -292,14 +289,13 @@ void main() {
...
@@ -292,14 +289,13 @@ void main() {
],
],
};
};
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Future
<
vms
.
VmService
>
mockVmConnectionFunction
(
Uri
uri
,
{
Uri
uri
,
{
Duration
timeout
,
Duration
timeout
,
})
{
})
{
when
(
mockPeer
.
sendRequest
(
any
,
any
)).
thenAnswer
((
_
)
=>
when
(
mockService
.
callMethod
(
any
)).
thenAnswer
((
_
)
async
=>
Future
<
Map
<
String
,
dynamic
>>(
vms
.
Response
.
parse
(
flutterViewCannedResponseMissingIsolateName
));
()
=>
flutterViewCannedResponseMissingIsolateName
));
return
Future
<
vms
.
VmService
>(()
=>
mockService
);
return
Future
<
json_rpc
.
Peer
>(()
=>
mockPeer
);
}
}
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
...
@@ -314,41 +310,15 @@ void main() {
...
@@ -314,41 +310,15 @@ void main() {
expect
(
failingFunction
,
throwsA
(
isA
<
RpcFormatError
>()));
expect
(
failingFunction
,
throwsA
(
isA
<
RpcFormatError
>()));
});
});
});
});
}
group
(
'DartVm.invokeRpc'
,
()
{
class
MockVmService
extends
Mock
implements
vms
.
VmService
{}
MockPeer
mockPeer
;
setUp
(()
{
mockPeer
=
MockPeer
();
});
tearDown
(()
{
restoreVmServiceConnectionFunction
();
});
test
(
'verify timeout fires'
,
()
async
{
const
Duration
timeoutTime
=
Duration
(
milliseconds:
100
);
Future
<
json_rpc
.
Peer
>
mockVmConnectionFunction
(
Uri
uri
,
{
Duration
timeout
,
})
{
// Return a command that will never complete.
when
(
mockPeer
.
sendRequest
(
any
,
any
))
.
thenAnswer
((
_
)
=>
Completer
<
Map
<
String
,
dynamic
>>().
future
);
return
Future
<
json_rpc
.
Peer
>(()
=>
mockPeer
);
}
fuchsiaVmServiceConnectionFunction
=
mockVmConnectionFunction
;
class
FakeVM
extends
Fake
implements
vms
.
VM
{
final
DartVm
vm
=
FakeVM
({
await
DartVm
.
connect
(
Uri
.
parse
(
'http://whatever.com/ws'
));
this
.
isolates
=
const
<
vms
.
IsolateRef
>[],
expect
(
vm
,
isNot
(
null
));
Future
<
void
>
failingFunction
()
async
{
await
vm
.
invokeRpc
(
'somesillyfunction'
,
timeout:
timeoutTime
);
}
expect
(
failingFunction
,
throwsA
(
isA
<
TimeoutException
>()));
});
});
});
}
class
MockPeer
extends
Mock
implements
json_rpc
.
Peer
{}
@override
List
<
vms
.
IsolateRef
>
isolates
;
}
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