Unverified Commit 4436334f authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Adopt TestUsage in flutter_command_test (#76282)

parent 04182572
...@@ -30,15 +30,15 @@ import 'utils.dart'; ...@@ -30,15 +30,15 @@ import 'utils.dart';
void main() { void main() {
group('Flutter Command', () { group('Flutter Command', () {
MockitoCache cache; MockCache cache;
MockitoUsage usage; TestUsage usage;
FakeClock clock; FakeClock clock;
MockProcessInfo mockProcessInfo; MockProcessInfo mockProcessInfo;
setUp(() { setUp(() {
Cache.disableLocking(); Cache.disableLocking();
cache = MockitoCache(); cache = MockCache();
usage = MockitoUsage(); usage = TestUsage();
clock = FakeClock(); clock = FakeClock();
mockProcessInfo = MockProcessInfo(); mockProcessInfo = MockProcessInfo();
...@@ -160,24 +160,19 @@ void main() { ...@@ -160,24 +160,19 @@ void main() {
); );
await flutterCommand.run(); await flutterCommand.run();
verify(usage.sendCommand( expect(usage.events, <TestUsageEvent>[
'dummy', const TestUsageEvent(
parameters: anyNamed('parameters'), 'tool-command-result',
)); 'dummy',
verify(usage.sendEvent( label: 'success',
'tool-command-result', ),
'dummy', const TestUsageEvent(
label: 'success',
parameters: anyNamed('parameters'),
));
expect(verify(usage.sendEvent(
'tool-command-max-rss', 'tool-command-max-rss',
'dummy', 'dummy',
label: 'success', label: 'success',
value: captureAnyNamed('value'), value: 10,
)).captured[0], ),
10, ]);
);
}); });
testUsingCommandContext('reports command that results in warning', () async { testUsingCommandContext('reports command that results in warning', () async {
...@@ -191,24 +186,19 @@ void main() { ...@@ -191,24 +186,19 @@ void main() {
); );
await flutterCommand.run(); await flutterCommand.run();
verify(usage.sendCommand( expect(usage.events, <TestUsageEvent>[
'dummy', const TestUsageEvent(
parameters: anyNamed('parameters'), 'tool-command-result',
)); 'dummy',
verify(usage.sendEvent( label: 'warning',
'tool-command-result', ),
'dummy', const TestUsageEvent(
label: 'warning',
parameters: anyNamed('parameters'),
));
expect(verify(usage.sendEvent(
'tool-command-max-rss', 'tool-command-max-rss',
'dummy', 'dummy',
label: 'warning', label: 'warning',
value: captureAnyNamed('value'), value: 10,
)).captured[0], ),
10, ]);
);
}); });
testUsingCommandContext('reports command that results in failure', () async { testUsingCommandContext('reports command that results in failure', () async {
...@@ -255,29 +245,23 @@ void main() { ...@@ -255,29 +245,23 @@ void main() {
return null; // unreachable return null; // unreachable
} }
); );
try { try {
await flutterCommand.run(); await flutterCommand.run();
fail('Mock should make this fail'); fail('Mock should make this fail');
} on ToolExit { } on ToolExit {
verify(usage.sendCommand( expect(usage.events, <TestUsageEvent>[
'dummy', const TestUsageEvent(
parameters: anyNamed('parameters'), 'tool-command-result',
)); 'dummy',
verify(usage.sendEvent( label: 'fail',
'tool-command-result', ),
'dummy', const TestUsageEvent(
label: 'fail',
parameters: anyNamed('parameters'),
));
expect(verify(usage.sendEvent(
'tool-command-max-rss', 'tool-command-max-rss',
'dummy', 'dummy',
label: 'fail', label: 'fail',
value: captureAnyNamed('value'), value: 10,
)).captured[0], ),
10, ]);
);
} }
}); });
...@@ -366,24 +350,19 @@ void main() { ...@@ -366,24 +350,19 @@ void main() {
signalController.add(mockSignal); signalController.add(mockSignal);
await completer.future; await completer.future;
verify(usage.sendCommand( expect(usage.events, <TestUsageEvent>[
'dummy', const TestUsageEvent(
parameters: anyNamed('parameters'), 'tool-command-result',
)); 'dummy',
verify(usage.sendEvent( label: 'killed',
'tool-command-result', ),
'dummy', const TestUsageEvent(
label: 'killed',
parameters: anyNamed('parameters'),
));
expect(verify(usage.sendEvent(
'tool-command-max-rss', 'tool-command-max-rss',
'dummy', 'dummy',
label: 'killed', label: 'killed',
value: captureAnyNamed('value'), value: 10,
)).captured[0], ),
10, ]);
);
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
ProcessInfo: () => mockProcessInfo, ProcessInfo: () => mockProcessInfo,
Signals: () => FakeSignals( Signals: () => FakeSignals(
...@@ -439,17 +418,13 @@ void main() { ...@@ -439,17 +418,13 @@ void main() {
final DummyFlutterCommand flutterCommand = DummyFlutterCommand(); final DummyFlutterCommand flutterCommand = DummyFlutterCommand();
await flutterCommand.run(); await flutterCommand.run();
expect( expect(usage.timings, contains(
verify(usage.sendTiming( const TestTimingEvent(
captureAny, captureAny, captureAny,
label: captureAnyNamed('label'))).captured,
<dynamic>[
'flutter', 'flutter',
'dummy', 'dummy',
const Duration(milliseconds: 1000), Duration(milliseconds: 1000),
'fail', label: 'fail',
], )));
);
}); });
testUsingCommandContext('no timing report without usagePath', () async { testUsingCommandContext('no timing report without usagePath', () async {
...@@ -459,9 +434,8 @@ void main() { ...@@ -459,9 +434,8 @@ void main() {
final DummyFlutterCommand flutterCommand = final DummyFlutterCommand flutterCommand =
DummyFlutterCommand(noUsagePath: true); DummyFlutterCommand(noUsagePath: true);
await flutterCommand.run(); await flutterCommand.run();
verifyNever(usage.sendTiming(
any, any, any, expect(usage.timings, isEmpty);
label: anyNamed('label')));
}); });
testUsingCommandContext('report additional FlutterCommandResult data', () async { testUsingCommandContext('report additional FlutterCommandResult data', () async {
...@@ -479,17 +453,14 @@ void main() { ...@@ -479,17 +453,14 @@ void main() {
commandFunction: () async => commandResult commandFunction: () async => commandResult
); );
await flutterCommand.run(); await flutterCommand.run();
expect(
verify(usage.sendTiming( expect(usage.timings, contains(
captureAny, captureAny, captureAny, const TestTimingEvent(
label: captureAnyNamed('label'))).captured,
<dynamic>[
'flutter', 'flutter',
'dummy', 'dummy',
const Duration(milliseconds: 500), // FlutterCommandResult's end time used instead. Duration(milliseconds: 500),
'success-blah1-blah2-blah3', label: 'success-blah1-blah2-blah3',
], )));
);
}); });
testUsingCommandContext('report failed execution timing too', () async { testUsingCommandContext('report failed execution timing too', () async {
...@@ -507,18 +478,13 @@ void main() { ...@@ -507,18 +478,13 @@ void main() {
await flutterCommand.run(); await flutterCommand.run();
fail('Mock should make this fail'); fail('Mock should make this fail');
} on ToolExit { } on ToolExit {
expect(usage.timings, contains(
expect( const TestTimingEvent(
verify(usage.sendTiming(
captureAny, captureAny, captureAny,
label: captureAnyNamed('label'))).captured,
<dynamic>[
'flutter', 'flutter',
'dummy', 'dummy',
const Duration(milliseconds: 1000), Duration(milliseconds: 1000),
'fail', label: 'fail',
], )));
);
} }
}); });
...@@ -551,14 +517,28 @@ void main() { ...@@ -551,14 +517,28 @@ void main() {
await runner.run(<String>['test']); await runner.run(<String>['test']);
verify(globals.flutterUsage.sendEvent(NullSafetyAnalysisEvent.kNullSafetyCategory, 'runtime-mode', label: 'NullSafetyMode.sound')).called(1); expect(usage.events, containsAll(<TestUsageEvent>[
verify(globals.flutterUsage.sendEvent(NullSafetyAnalysisEvent.kNullSafetyCategory, 'stats', parameters: <String, String>{ const TestUsageEvent(
'cd49': '1', 'cd50': '1', NullSafetyAnalysisEvent.kNullSafetyCategory,
})).called(1); 'runtime-mode',
verify(globals.flutterUsage.sendEvent(NullSafetyAnalysisEvent.kNullSafetyCategory, 'language-version', label: '2.12')).called(1); label: 'NullSafetyMode.sound',
),
const TestUsageEvent(
NullSafetyAnalysisEvent.kNullSafetyCategory,
'stats',
parameters: <String, String>{
'cd49': '1', 'cd50': '1',
},
),
const TestUsageEvent(
NullSafetyAnalysisEvent.kNullSafetyCategory,
'language-version',
label: '2.12',
),
]));
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
Pub: () => FakePub(), Pub: () => FakePub(),
Usage: () => MockitoUsage(), Usage: () => usage,
FileSystem: () => MemoryFileSystem.test(), FileSystem: () => MemoryFileSystem.test(),
ProcessManager: () => FakeProcessManager.any(), ProcessManager: () => FakeProcessManager.any(),
}); });
...@@ -681,3 +661,5 @@ class FakeClock extends Fake implements SystemClock { ...@@ -681,3 +661,5 @@ class FakeClock extends Fake implements SystemClock {
return DateTime.fromMillisecondsSinceEpoch(times.removeAt(0)); return DateTime.fromMillisecondsSinceEpoch(times.removeAt(0));
} }
} }
class MockCache extends Mock implements Cache {}
...@@ -4,10 +4,7 @@ ...@@ -4,10 +4,7 @@
// @dart = 2.8 // @dart = 2.8
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/reporting/reporting.dart';
import 'package:flutter_tools/src/runner/flutter_command.dart'; import 'package:flutter_tools/src/runner/flutter_command.dart';
import 'package:mockito/mockito.dart';
typedef CommandFunction = Future<FlutterCommandResult> Function(); typedef CommandFunction = Future<FlutterCommandResult> Function();
...@@ -39,7 +36,3 @@ class DummyFlutterCommand extends FlutterCommand { ...@@ -39,7 +36,3 @@ class DummyFlutterCommand extends FlutterCommand {
return commandFunction == null ? FlutterCommandResult.fail() : await commandFunction(); return commandFunction == null ? FlutterCommandResult.fail() : await commandFunction();
} }
} }
class MockitoCache extends Mock implements Cache {}
class MockitoUsage extends Mock implements Usage {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment