mirror of
https://github.com/flutter/packages.git
synced 2025-06-02 00:49:11 +08:00

Adds web platform tests for LUCI in bringup mode. The Cirrus version of the test starts `chromedriver` at the beginning and just leaves it running, which is fine since it's a fresh docker image each run. For LUCI we don't want that behavior though, so instead this adds tooling support for running chromedriver as part of running the integration tests, controllable with a flag. This will also be useful for running locally. Part of https://github.com/flutter/flutter/issues/114373
93 lines
2.3 KiB
Dart
93 lines
2.3 KiB
Dart
// Copyright 2013 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 'dart:convert';
|
|
import 'dart:io' as io;
|
|
|
|
import 'package:file/file.dart';
|
|
import 'package:mockito/mockito.dart';
|
|
import 'package:platform/platform.dart';
|
|
|
|
class MockPlatform extends Mock implements Platform {
|
|
MockPlatform({
|
|
this.isLinux = false,
|
|
this.isMacOS = false,
|
|
this.isWindows = false,
|
|
});
|
|
|
|
@override
|
|
bool isLinux;
|
|
|
|
@override
|
|
bool isMacOS;
|
|
|
|
@override
|
|
bool isWindows;
|
|
|
|
@override
|
|
Uri get script => isWindows
|
|
? Uri.file(r'C:\foo\bar', windows: true)
|
|
: Uri.file('/foo/bar', windows: false);
|
|
|
|
@override
|
|
Map<String, String> environment = <String, String>{};
|
|
}
|
|
|
|
class MockProcess extends Mock implements io.Process {
|
|
/// Creates a mock process with the given results.
|
|
///
|
|
/// The default encodings match the ProcessRunner defaults; mocks for
|
|
/// processes run with a different encoding will need to be created with
|
|
/// the matching encoding.
|
|
MockProcess({
|
|
int exitCode = 0,
|
|
String? stdout,
|
|
String? stderr,
|
|
Encoding stdoutEncoding = io.systemEncoding,
|
|
Encoding stderrEncoding = io.systemEncoding,
|
|
}) : _exitCode = exitCode {
|
|
if (stdout != null) {
|
|
_stdoutController.add(stdoutEncoding.encoder.convert(stdout));
|
|
}
|
|
if (stderr != null) {
|
|
_stderrController.add(stderrEncoding.encoder.convert(stderr));
|
|
}
|
|
_stdoutController.close();
|
|
_stderrController.close();
|
|
}
|
|
|
|
final int _exitCode;
|
|
final StreamController<List<int>> _stdoutController =
|
|
StreamController<List<int>>();
|
|
final StreamController<List<int>> _stderrController =
|
|
StreamController<List<int>>();
|
|
final MockIOSink stdinMock = MockIOSink();
|
|
|
|
@override
|
|
int get pid => 99;
|
|
|
|
@override
|
|
Future<int> get exitCode async => _exitCode;
|
|
|
|
@override
|
|
Stream<List<int>> get stdout => _stdoutController.stream;
|
|
|
|
@override
|
|
Stream<List<int>> get stderr => _stderrController.stream;
|
|
|
|
@override
|
|
IOSink get stdin => stdinMock;
|
|
|
|
@override
|
|
bool kill([io.ProcessSignal signal = io.ProcessSignal.sigterm]) => true;
|
|
}
|
|
|
|
class MockIOSink extends Mock implements IOSink {
|
|
List<String> lines = <String>[];
|
|
|
|
@override
|
|
void writeln([Object? obj = '']) => lines.add(obj.toString());
|
|
}
|