flutter/packages/flutter_tools/test/commands.shard/hermetic/logs_test.dart
Michael Goderbauer 5491c8c146
Auto-format Framework (#160545)
This auto-formats all *.dart files in the repository outside of the
`engine` subdirectory and enforces that these files stay formatted with
a presubmit check.

**Reviewers:** Please carefully review all the commits except for the
one titled "formatted". The "formatted" commit was auto-generated by
running `dev/tools/format.sh -a -f`. The other commits were hand-crafted
to prepare the repo for the formatting change. I recommend reviewing the
commits one-by-one via the "Commits" tab and avoiding Github's "Files
changed" tab as it will likely slow down your browser because of the
size of this PR.

---------

Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
2024-12-19 20:06:21 +00:00

81 lines
2.5 KiB
Dart

// 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:async';
import 'package:flutter_tools/src/base/common.dart';
import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/commands/logs.dart';
import 'package:flutter_tools/src/device.dart';
import 'package:test/fake.dart';
import '../../src/context.dart';
import '../../src/fake_devices.dart';
import '../../src/test_flutter_command_runner.dart';
void main() {
group('logs', () {
late Platform platform;
late FakeDeviceManager deviceManager;
const String deviceId = 'abc123';
setUp(() {
Cache.disableLocking();
deviceManager = FakeDeviceManager();
platform = FakePlatform();
});
tearDown(() {
Cache.enableLocking();
});
testUsingContext('fail with a bad device id', () async {
final LogsCommand command = LogsCommand(
sigterm: FakeProcessSignal(),
sigint: FakeProcessSignal(),
);
await expectLater(
() => createTestCommandRunner(command).run(<String>['-d', 'abc123', 'logs']),
throwsA(
isA<ToolExit>().having((ToolExit error) => error.exitCode, 'exitCode', anyOf(isNull, 1)),
),
);
});
testUsingContext(
'does not try to complete exitCompleter multiple times',
() async {
final FakeDevice fakeDevice = FakeDevice('phone', deviceId);
deviceManager.attachedDevices.add(fakeDevice);
final FakeProcessSignal termSignal = FakeProcessSignal();
final FakeProcessSignal intSignal = FakeProcessSignal();
final LogsCommand command = LogsCommand(sigterm: termSignal, sigint: intSignal);
final Future<void> commandFuture = createTestCommandRunner(
command,
).run(<String>['-d', deviceId, 'logs']);
intSignal.send(1);
termSignal.send(1);
await pumpEventQueue(times: 5);
await commandFuture;
},
overrides: <Type, Generator>{Platform: () => platform, DeviceManager: () => deviceManager},
);
});
}
class FakeProcessSignal extends Fake implements ProcessSignal {
late final StreamController<ProcessSignal> _controller = StreamController<ProcessSignal>();
@override
Stream<ProcessSignal> watch() => _controller.stream;
@override
bool send(int pid) {
_controller.add(this);
return true;
}
}