mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
* runs ios unit tests, if the simulator is already booted. * address reviewer comments * changing comments for the Safari desktop tests * addressing reviewer comments. removing the timeout. * change mobile browsers ver name for safari.dart * removing then calback on browser exit, only leaving the exception callback
81 lines
3.1 KiB
Dart
81 lines
3.1 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.
|
|
|
|
// @dart = 2.6
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import 'browser.dart';
|
|
import 'safari_installation.dart';
|
|
import 'common.dart';
|
|
|
|
/// A class for running an instance of Safari.
|
|
///
|
|
/// Most of the communication with the browser is expected to happen via HTTP,
|
|
/// so this exposes a bare-bones API. The browser starts as soon as the class is
|
|
/// constructed, and is killed when [close] is called.
|
|
///
|
|
/// Any errors starting or running the process are reported through [onExit].
|
|
class Safari extends Browser {
|
|
@override
|
|
final name = 'Safari';
|
|
|
|
static String version;
|
|
|
|
static bool isMobileBrowser;
|
|
|
|
/// Starts a new instance of Safari open to the given [url], which may be a
|
|
/// [Uri] or a [String].
|
|
factory Safari(Uri url, {bool debug = false}) {
|
|
version = SafariArgParser.instance.version;
|
|
isMobileBrowser = SafariArgParser.instance.isMobileBrowser;
|
|
assert(version != null);
|
|
return Safari._(() async {
|
|
if (isMobileBrowser) {
|
|
// iOS-Safari
|
|
// Uses `xcrun simctl`. It is a command line utility to control the
|
|
// Simulator. For more details on interacting with the simulator:
|
|
// https://developer.apple.com/library/archive/documentation/IDEs/Conceptual/iOS_Simulator_Guide/InteractingwiththeiOSSimulator/InteractingwiththeiOSSimulator.html
|
|
var process = await Process.start('xcrun', [
|
|
'simctl',
|
|
'openurl', // Opens the url on Safari installed on the simulator.
|
|
'booted', // The simulator is already booted.
|
|
'${url.toString()}'
|
|
]);
|
|
|
|
return process;
|
|
} else {
|
|
// Desktop-Safari
|
|
// TODO(nurhan): Configure info log for LUCI.
|
|
final BrowserInstallation installation = await getOrInstallSafari(
|
|
version,
|
|
infoLog: DevNull(),
|
|
);
|
|
|
|
// In the macOS Catalina opening Safari browser with a file brings
|
|
// a popup which halts the test.
|
|
// The following list of arguments needs to be provided to the `open`
|
|
// command to open Safari for a given URL. In summary, `open` tool opens
|
|
// a new Safari browser (even if one is already open), opens it with no
|
|
// persistent state and wait until it opens.
|
|
// The details copied from `man open` on macOS.
|
|
// TODO(nurhan): https://github.com/flutter/flutter/issues/50809
|
|
var process = await Process.start(installation.executable, [
|
|
// These are flags for `open` command line tool.
|
|
'-F', // Open a fresh Safari with no persistant state.
|
|
'-W', // Wait until the Safari opens.
|
|
'-n', // Open a new instance of the Safari even another one is open.
|
|
'-b', // Specifies the bundle identifier for the application to use.
|
|
'com.apple.Safari', // Bundle identifier for Safari.
|
|
'${url.toString()}'
|
|
]);
|
|
|
|
return process;
|
|
}
|
|
});
|
|
}
|
|
|
|
Safari._(Future<Process> startBrowser()) : super(startBrowser);
|
|
}
|