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
c74225e0
Commit
c74225e0
authored
May 08, 2017
by
xster
Committed by
GitHub
May 08, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Report timing on failed executions too (#9661)
* handle errors * review notes
parent
3012cce1
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
85 additions
and
51 deletions
+85
-51
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+39
-34
flutter_command_test.dart
...s/flutter_tools/test/src/runner/flutter_command_test.dart
+46
-17
No files found.
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
c74225e0
...
@@ -34,13 +34,11 @@ enum ExitStatus {
...
@@ -34,13 +34,11 @@ enum ExitStatus {
/// provide a [FlutterCommandResult] to furnish additional information for
/// provide a [FlutterCommandResult] to furnish additional information for
/// analytics.
/// analytics.
class
FlutterCommandResult
{
class
FlutterCommandResult
{
FlutterCommandResult
(
const
FlutterCommandResult
(
this
.
exitStatus
,
{
this
.
exitStatus
,
{
this
.
analyticsParameters
,
this
.
analyticsParameters
,
this
.
endTimeOverride
,
this
.
endTimeOverride
,
})
{
});
assert
(
exitStatus
!=
null
);
}
final
ExitStatus
exitStatus
;
final
ExitStatus
exitStatus
;
...
@@ -153,10 +151,15 @@ abstract class FlutterCommand extends Command<Null> {
...
@@ -153,10 +151,15 @@ abstract class FlutterCommand extends Command<Null> {
if
(
flutterUsage
.
isFirstRun
)
if
(
flutterUsage
.
isFirstRun
)
flutterUsage
.
printWelcome
();
flutterUsage
.
printWelcome
();
final
FlutterCommandResult
commandResult
=
await
verifyThenRunCommand
();
FlutterCommandResult
commandResult
;
try
{
commandResult
=
await
verifyThenRunCommand
();
}
on
ToolExit
{
commandResult
=
const
FlutterCommandResult
(
ExitStatus
.
fail
);
rethrow
;
}
finally
{
final
DateTime
endTime
=
clock
.
now
();
final
DateTime
endTime
=
clock
.
now
();
printTrace
(
"'flutter
$name
' took
${getElapsedAsMilliseconds(endTime.difference(startTime))}
."
);
printTrace
(
'"flutter
$name
" took
${getElapsedAsMilliseconds(endTime.difference(startTime))}
.'
);
if
(
usagePath
!=
null
)
{
if
(
usagePath
!=
null
)
{
final
List
<
String
>
labels
=
<
String
>[];
final
List
<
String
>
labels
=
<
String
>[];
if
(
commandResult
?.
exitStatus
!=
null
)
if
(
commandResult
?.
exitStatus
!=
null
)
...
@@ -180,6 +183,8 @@ abstract class FlutterCommand extends Command<Null> {
...
@@ -180,6 +183,8 @@ abstract class FlutterCommand extends Command<Null> {
}
}
}
}
}
/// Perform validation then call [runCommand] to execute the command.
/// Perform validation then call [runCommand] to execute the command.
/// Return a [Future] that completes with an exit code
/// Return a [Future] that completes with an exit code
/// indicating whether execution was successful.
/// indicating whether execution was successful.
...
@@ -202,7 +207,7 @@ abstract class FlutterCommand extends Command<Null> {
...
@@ -202,7 +207,7 @@ abstract class FlutterCommand extends Command<Null> {
final
String
commandPath
=
await
usagePath
;
final
String
commandPath
=
await
usagePath
;
if
(
commandPath
!=
null
)
if
(
commandPath
!=
null
)
flutterUsage
.
sendCommand
(
commandPath
);
flutterUsage
.
sendCommand
(
commandPath
);
return
runCommand
();
return
await
runCommand
();
}
}
/// Subclasses must implement this to execute the command.
/// Subclasses must implement this to execute the command.
...
...
packages/flutter_tools/test/src/runner/flutter_command_test.dart
View file @
c74225e0
...
@@ -6,6 +6,7 @@ import 'dart:async';
...
@@ -6,6 +6,7 @@ import 'dart:async';
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/usage.dart'
;
import
'package:flutter_tools/src/usage.dart'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:mockito/mockito.dart'
;
import
'package:mockito/mockito.dart'
;
import
'package:quiver/time.dart'
;
import
'package:quiver/time.dart'
;
...
@@ -88,14 +89,15 @@ void main() {
...
@@ -88,14 +89,15 @@ void main() {
mockTimes
=
<
int
>[
1000
,
2000
];
mockTimes
=
<
int
>[
1000
,
2000
];
final
FlutterCommandResult
commandResult
=
new
FlutterCommandResult
(
final
FlutterCommandResult
commandResult
=
new
FlutterCommandResult
(
ExitStatus
.
fail
,
ExitStatus
.
success
,
// nulls should be cleaned up.
// nulls should be cleaned up.
analyticsParameters:
<
String
>
[
'blah1'
,
'blah2'
,
null
,
'blah3'
],
analyticsParameters:
<
String
>
[
'blah1'
,
'blah2'
,
null
,
'blah3'
],
endTimeOverride:
new
DateTime
.
fromMillisecondsSinceEpoch
(
1500
)
endTimeOverride:
new
DateTime
.
fromMillisecondsSinceEpoch
(
1500
)
);
);
final
DummyFlutterCommand
flutterCommand
=
final
DummyFlutterCommand
flutterCommand
=
new
DummyFlutterCommand
(
new
DummyFlutterCommand
(
flutterCommandResult:
commandResult
);
commandFunction:
()
async
=>
commandResult
);
await
flutterCommand
.
run
();
await
flutterCommand
.
run
();
verify
(
clock
.
now
()).
called
(
2
);
verify
(
clock
.
now
()).
called
(
2
);
expect
(
expect
(
...
@@ -104,7 +106,7 @@ void main() {
...
@@ -104,7 +106,7 @@ void main() {
'flutter'
,
'flutter'
,
'dummy'
,
'dummy'
,
const
Duration
(
milliseconds:
500
),
// FlutterCommandResult's end time used instead.
const
Duration
(
milliseconds:
500
),
// FlutterCommandResult's end time used instead.
'
fail
-blah1-blah2-blah3'
,
'
success
-blah1-blah2-blah3'
,
],
],
);
);
},
},
...
@@ -113,20 +115,47 @@ void main() {
...
@@ -113,20 +115,47 @@ void main() {
Usage:
()
=>
usage
,
Usage:
()
=>
usage
,
});
});
testUsingContext
(
'report failed execution timing too'
,
()
async
{
// Crash if called a third time which is unexpected.
mockTimes
=
<
int
>[
1000
,
2000
];
final
DummyFlutterCommand
flutterCommand
=
new
DummyFlutterCommand
(
commandFunction:
()
async
{
throwToolExit
(
'fail'
);
});
try
{
await
flutterCommand
.
run
();
fail
(
'Mock should make this fail'
);
}
on
ToolExit
{
// Should have still checked time twice.
verify
(
clock
.
now
()).
called
(
2
);
expect
(
verify
(
usage
.
sendTiming
(
captureAny
,
captureAny
,
captureAny
,
label:
captureAny
)).
captured
,
<
dynamic
>[
'flutter'
,
'dummy'
,
const
Duration
(
milliseconds:
1000
),
'fail'
]
);
}
},
overrides:
<
Type
,
Generator
>{
Clock:
()
=>
clock
,
Usage:
()
=>
usage
,
});
});
});
}
}
typedef
Future
<
FlutterCommandResult
>
CommandFunction
();
class
DummyFlutterCommand
extends
FlutterCommand
{
class
DummyFlutterCommand
extends
FlutterCommand
{
DummyFlutterCommand
({
DummyFlutterCommand
({
this
.
shouldUpdateCache
:
false
,
this
.
shouldUpdateCache
:
false
,
this
.
noUsagePath
:
false
,
this
.
noUsagePath
:
false
,
this
.
flutterCommandResult
this
.
commandFunction
,
});
});
final
bool
noUsagePath
;
final
bool
noUsagePath
;
final
FlutterCommandResult
flutterCommandResult
;
final
CommandFunction
commandFunction
;
@override
@override
final
bool
shouldUpdateCache
;
final
bool
shouldUpdateCache
;
...
@@ -142,7 +171,7 @@ class DummyFlutterCommand extends FlutterCommand {
...
@@ -142,7 +171,7 @@ class DummyFlutterCommand extends FlutterCommand {
@override
@override
Future
<
FlutterCommandResult
>
runCommand
()
async
{
Future
<
FlutterCommandResult
>
runCommand
()
async
{
return
flutterCommandResult
;
return
commandFunction
==
null
?
null
:
commandFunction
()
;
}
}
}
}
...
...
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