remove more (simple) usage of package:usage (#162354)
Towards https://github.com/flutter/flutter/issues/150575. Tries to remove as much `Usage` as possible while avoiding more complicated bits that require more scrutiny to make sure we aren't losing test coverage or otherwise regressing. Said another way, almost the entire diff is just deleting code to send GA3 events, and the corresponding GA4 code can be found right next to it—making it easy to verify we aren't losing events/tests. <details> <summary> Pre-launch checklist </summary> - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. </details> <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This commit is contained in:
parent
1eecbf1256
commit
bc7703f886
@ -247,7 +247,6 @@ class BuildWebCommand extends BuildSubCommand {
|
|||||||
buildSystem: globals.buildSystem,
|
buildSystem: globals.buildSystem,
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
flutterVersion: globals.flutterVersion,
|
flutterVersion: globals.flutterVersion,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
);
|
);
|
||||||
await webBuilder.buildWeb(
|
await webBuilder.buildWeb(
|
||||||
|
@ -9,7 +9,6 @@ import '../base/common.dart';
|
|||||||
import '../convert.dart';
|
import '../convert.dart';
|
||||||
import '../features.dart';
|
import '../features.dart';
|
||||||
import '../globals.dart' as globals;
|
import '../globals.dart' as globals;
|
||||||
import '../reporting/reporting.dart';
|
|
||||||
import '../runner/flutter_command.dart';
|
import '../runner/flutter_command.dart';
|
||||||
import '../runner/flutter_command_runner.dart';
|
import '../runner/flutter_command_runner.dart';
|
||||||
|
|
||||||
@ -137,22 +136,8 @@ class ConfigCommand extends FlutterCommand {
|
|||||||
|
|
||||||
if (argResults!.wasParsed('analytics')) {
|
if (argResults!.wasParsed('analytics')) {
|
||||||
final bool value = boolArg('analytics');
|
final bool value = boolArg('analytics');
|
||||||
// The tool sends the analytics event *before* toggling the flag
|
|
||||||
// intentionally to be sure that opt-out events are sent correctly.
|
|
||||||
AnalyticsConfigEvent(enabled: value).send();
|
|
||||||
if (!value) {
|
|
||||||
// Normally, the tool waits for the analytics to all send before the
|
|
||||||
// tool exits, but only when analytics are enabled. When reporting that
|
|
||||||
// analytics have been disable, the wait must be done here instead.
|
|
||||||
await globals.flutterUsage.ensureAnalyticsSent();
|
|
||||||
}
|
|
||||||
globals.flutterUsage.enabled = value;
|
|
||||||
globals.printStatus('Analytics reporting ${value ? 'enabled' : 'disabled'}.');
|
globals.printStatus('Analytics reporting ${value ? 'enabled' : 'disabled'}.');
|
||||||
|
|
||||||
// TODO(eliasyishak): Set the telemetry for the unified_analytics
|
|
||||||
// package as well, the above will be removed once we have
|
|
||||||
// fully transitioned to using the new package,
|
|
||||||
// https://github.com/flutter/flutter/issues/128251
|
|
||||||
await globals.analytics.setTelemetry(value);
|
await globals.analytics.setTelemetry(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -273,9 +258,7 @@ class ConfigCommand extends FlutterCommand {
|
|||||||
|
|
||||||
/// List the status of the analytics reporting.
|
/// List the status of the analytics reporting.
|
||||||
String get analyticsUsage {
|
String get analyticsUsage {
|
||||||
final bool analyticsEnabled =
|
return 'Analytics reporting is currently ${globals.analytics.telemetryEnabled ? 'enabled' : 'disabled'}.';
|
||||||
globals.flutterUsage.enabled && !globals.flutterUsage.suppressAnalytics;
|
|
||||||
return 'Analytics reporting is currently ${analyticsEnabled ? 'enabled' : 'disabled'}.';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Raising the reload tip for setting changes.
|
/// Raising the reload tip for setting changes.
|
||||||
|
@ -709,7 +709,6 @@ class AppDomain extends Domain {
|
|||||||
stayResident: true,
|
stayResident: true,
|
||||||
urlTunneller: options.webEnableExposeUrl! ? daemon.daemonDomain.exposeUrl : null,
|
urlTunneller: options.webEnableExposeUrl! ? daemon.daemonDomain.exposeUrl : null,
|
||||||
machine: machine,
|
machine: machine,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
logger: globals.logger,
|
logger: globals.logger,
|
||||||
|
@ -348,7 +348,6 @@ class PackagesGetCommand extends FlutterCommand {
|
|||||||
touchesPackageConfig: !(isHelp || dryRun),
|
touchesPackageConfig: !(isHelp || dryRun),
|
||||||
);
|
);
|
||||||
final Duration elapsedDuration = timer.elapsed;
|
final Duration elapsedDuration = timer.elapsed;
|
||||||
globals.flutterUsage.sendTiming('pub', 'get', elapsedDuration, label: 'success');
|
|
||||||
analytics.send(
|
analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'pub',
|
workflow: 'pub',
|
||||||
@ -361,7 +360,6 @@ class PackagesGetCommand extends FlutterCommand {
|
|||||||
} catch (_) {
|
} catch (_) {
|
||||||
// ignore: avoid_catches_without_on_clauses
|
// ignore: avoid_catches_without_on_clauses
|
||||||
final Duration elapsedDuration = timer.elapsed;
|
final Duration elapsedDuration = timer.elapsed;
|
||||||
globals.flutterUsage.sendTiming('pub', 'get', elapsedDuration, label: 'failure');
|
|
||||||
analytics.send(
|
analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'pub',
|
workflow: 'pub',
|
||||||
|
@ -761,7 +761,6 @@ class RunCommand extends RunCommandBase {
|
|||||||
debuggingOptions: await createDebuggingOptions(webMode),
|
debuggingOptions: await createDebuggingOptions(webMode),
|
||||||
stayResident: stayResident,
|
stayResident: stayResident,
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
logger: globals.logger,
|
logger: globals.logger,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
|
@ -167,7 +167,6 @@ Future<T> runInContext<T>(FutureOr<T> Function() runner, {Map<Type, Generator>?
|
|||||||
logger: globals.logger,
|
logger: globals.logger,
|
||||||
platform: globals.platform,
|
platform: globals.platform,
|
||||||
xcodeProjectInterpreter: globals.xcodeProjectInterpreter!,
|
xcodeProjectInterpreter: globals.xcodeProjectInterpreter!,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
),
|
),
|
||||||
CocoaPodsValidator: () => CocoaPodsValidator(globals.cocoaPods!, globals.userMessages),
|
CocoaPodsValidator: () => CocoaPodsValidator(globals.cocoaPods!, globals.userMessages),
|
||||||
@ -289,11 +288,7 @@ Future<T> runInContext<T>(FutureOr<T> Function() runner, {Map<Type, Generator>?
|
|||||||
),
|
),
|
||||||
MacOSWorkflow: () => MacOSWorkflow(featureFlags: featureFlags, platform: globals.platform),
|
MacOSWorkflow: () => MacOSWorkflow(featureFlags: featureFlags, platform: globals.platform),
|
||||||
MDnsVmServiceDiscovery:
|
MDnsVmServiceDiscovery:
|
||||||
() => MDnsVmServiceDiscovery(
|
() => MDnsVmServiceDiscovery(logger: globals.logger, analytics: globals.analytics),
|
||||||
logger: globals.logger,
|
|
||||||
flutterUsage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
|
||||||
),
|
|
||||||
OperatingSystemUtils:
|
OperatingSystemUtils:
|
||||||
() => OperatingSystemUtils(
|
() => OperatingSystemUtils(
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
@ -384,7 +379,6 @@ Future<T> runInContext<T>(FutureOr<T> Function() runner, {Map<Type, Generator>?
|
|||||||
processManager: globals.processManager,
|
processManager: globals.processManager,
|
||||||
platform: globals.platform,
|
platform: globals.platform,
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
@ -97,7 +97,6 @@ class WebDriverService extends DriverService {
|
|||||||
stayResident: true,
|
stayResident: true,
|
||||||
flutterProject: FlutterProject.current(),
|
flutterProject: FlutterProject.current(),
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
logger: _logger,
|
logger: _logger,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
|
@ -30,7 +30,6 @@ class XcodeProjectInterpreter {
|
|||||||
required ProcessManager processManager,
|
required ProcessManager processManager,
|
||||||
required Logger logger,
|
required Logger logger,
|
||||||
required FileSystem fileSystem,
|
required FileSystem fileSystem,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
}) {
|
}) {
|
||||||
return XcodeProjectInterpreter._(
|
return XcodeProjectInterpreter._(
|
||||||
@ -38,7 +37,6 @@ class XcodeProjectInterpreter {
|
|||||||
processManager: processManager,
|
processManager: processManager,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
usage: usage,
|
|
||||||
analytics: analytics,
|
analytics: analytics,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -48,7 +46,6 @@ class XcodeProjectInterpreter {
|
|||||||
required ProcessManager processManager,
|
required ProcessManager processManager,
|
||||||
required Logger logger,
|
required Logger logger,
|
||||||
required FileSystem fileSystem,
|
required FileSystem fileSystem,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
Version? version,
|
Version? version,
|
||||||
String? build,
|
String? build,
|
||||||
@ -65,7 +62,6 @@ class XcodeProjectInterpreter {
|
|||||||
_version = version,
|
_version = version,
|
||||||
_build = build,
|
_build = build,
|
||||||
_versionText = version?.toString(),
|
_versionText = version?.toString(),
|
||||||
_usage = usage,
|
|
||||||
_analytics = analytics;
|
_analytics = analytics;
|
||||||
|
|
||||||
/// Create an [XcodeProjectInterpreter] for testing.
|
/// Create an [XcodeProjectInterpreter] for testing.
|
||||||
@ -88,7 +84,6 @@ class XcodeProjectInterpreter {
|
|||||||
fileSystem: MemoryFileSystem.test(),
|
fileSystem: MemoryFileSystem.test(),
|
||||||
platform: platform,
|
platform: platform,
|
||||||
processManager: processManager,
|
processManager: processManager,
|
||||||
usage: TestUsage(),
|
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
version: version,
|
version: version,
|
||||||
build: build,
|
build: build,
|
||||||
@ -101,7 +96,6 @@ class XcodeProjectInterpreter {
|
|||||||
final ProcessUtils _processUtils;
|
final ProcessUtils _processUtils;
|
||||||
final OperatingSystemUtils _operatingSystemUtils;
|
final OperatingSystemUtils _operatingSystemUtils;
|
||||||
final Logger _logger;
|
final Logger _logger;
|
||||||
final Usage _usage;
|
|
||||||
final Analytics _analytics;
|
final Analytics _analytics;
|
||||||
static final RegExp _versionRegex = RegExp(r'Xcode ([0-9.]+).*Build version (\w+)');
|
static final RegExp _versionRegex = RegExp(r'Xcode ([0-9.]+).*Build version (\w+)');
|
||||||
|
|
||||||
@ -243,12 +237,6 @@ class XcodeProjectInterpreter {
|
|||||||
XcodeSdk.IPhoneOS || XcodeSdk.IPhoneSimulator => 'ios',
|
XcodeSdk.IPhoneOS || XcodeSdk.IPhoneSimulator => 'ios',
|
||||||
XcodeSdk.WatchOS || XcodeSdk.WatchSimulator => 'watchos',
|
XcodeSdk.WatchOS || XcodeSdk.WatchSimulator => 'watchos',
|
||||||
};
|
};
|
||||||
BuildEvent(
|
|
||||||
'xcode-show-build-settings-timeout',
|
|
||||||
type: eventType,
|
|
||||||
command: showBuildSettingsCommand.join(' '),
|
|
||||||
flutterUsage: _usage,
|
|
||||||
).send();
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.flutterBuildInfo(
|
Event.flutterBuildInfo(
|
||||||
label: 'xcode-show-build-settings-timeout',
|
label: 'xcode-show-build-settings-timeout',
|
||||||
@ -306,12 +294,6 @@ class XcodeProjectInterpreter {
|
|||||||
return result.stdout.trim();
|
return result.stdout.trim();
|
||||||
} on Exception catch (error) {
|
} on Exception catch (error) {
|
||||||
if (error is ProcessException && error.toString().contains('timed out')) {
|
if (error is ProcessException && error.toString().contains('timed out')) {
|
||||||
BuildEvent(
|
|
||||||
'xcode-show-build-settings-timeout',
|
|
||||||
type: 'ios',
|
|
||||||
command: showBuildSettingsCommand.join(' '),
|
|
||||||
flutterUsage: _usage,
|
|
||||||
).send();
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.flutterBuildInfo(
|
Event.flutterBuildInfo(
|
||||||
label: 'xcode-show-build-settings-timeout',
|
label: 'xcode-show-build-settings-timeout',
|
||||||
|
@ -54,7 +54,6 @@ class DwdsWebRunnerFactory extends WebRunnerFactory {
|
|||||||
required Logger logger,
|
required Logger logger,
|
||||||
required FileSystem fileSystem,
|
required FileSystem fileSystem,
|
||||||
required SystemClock systemClock,
|
required SystemClock systemClock,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
bool machine = false,
|
bool machine = false,
|
||||||
}) {
|
}) {
|
||||||
@ -66,7 +65,6 @@ class DwdsWebRunnerFactory extends WebRunnerFactory {
|
|||||||
stayResident: stayResident,
|
stayResident: stayResident,
|
||||||
urlTunneller: urlTunneller,
|
urlTunneller: urlTunneller,
|
||||||
machine: machine,
|
machine: machine,
|
||||||
usage: usage,
|
|
||||||
analytics: analytics,
|
analytics: analytics,
|
||||||
systemClock: systemClock,
|
systemClock: systemClock,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
@ -91,7 +89,6 @@ class ResidentWebRunner extends ResidentRunner {
|
|||||||
required FileSystem fileSystem,
|
required FileSystem fileSystem,
|
||||||
required Logger logger,
|
required Logger logger,
|
||||||
required SystemClock systemClock,
|
required SystemClock systemClock,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
UrlTunneller? urlTunneller,
|
UrlTunneller? urlTunneller,
|
||||||
// TODO(bkonyi): remove when ready to serve DevTools from DDS.
|
// TODO(bkonyi): remove when ready to serve DevTools from DDS.
|
||||||
@ -99,7 +96,6 @@ class ResidentWebRunner extends ResidentRunner {
|
|||||||
}) : _fileSystem = fileSystem,
|
}) : _fileSystem = fileSystem,
|
||||||
_logger = logger,
|
_logger = logger,
|
||||||
_systemClock = systemClock,
|
_systemClock = systemClock,
|
||||||
_usage = usage,
|
|
||||||
_analytics = analytics,
|
_analytics = analytics,
|
||||||
_urlTunneller = urlTunneller,
|
_urlTunneller = urlTunneller,
|
||||||
super(
|
super(
|
||||||
@ -114,7 +110,6 @@ class ResidentWebRunner extends ResidentRunner {
|
|||||||
final FileSystem _fileSystem;
|
final FileSystem _fileSystem;
|
||||||
final Logger _logger;
|
final Logger _logger;
|
||||||
final SystemClock _systemClock;
|
final SystemClock _systemClock;
|
||||||
final Usage _usage;
|
|
||||||
final Analytics _analytics;
|
final Analytics _analytics;
|
||||||
final UrlTunneller? _urlTunneller;
|
final UrlTunneller? _urlTunneller;
|
||||||
|
|
||||||
@ -342,7 +337,6 @@ Please provide a valid TCP port (an integer between 0 and 65535, inclusive).
|
|||||||
buildSystem: globals.buildSystem,
|
buildSystem: globals.buildSystem,
|
||||||
fileSystem: _fileSystem,
|
fileSystem: _fileSystem,
|
||||||
flutterVersion: globals.flutterVersion,
|
flutterVersion: globals.flutterVersion,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
);
|
);
|
||||||
await webBuilder.buildWeb(
|
await webBuilder.buildWeb(
|
||||||
@ -436,7 +430,6 @@ Please provide a valid TCP port (an integer between 0 and 65535, inclusive).
|
|||||||
buildSystem: globals.buildSystem,
|
buildSystem: globals.buildSystem,
|
||||||
fileSystem: _fileSystem,
|
fileSystem: _fileSystem,
|
||||||
flutterVersion: globals.flutterVersion,
|
flutterVersion: globals.flutterVersion,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
);
|
);
|
||||||
await webBuilder.buildWeb(
|
await webBuilder.buildWeb(
|
||||||
@ -480,7 +473,6 @@ Please provide a valid TCP port (an integer between 0 and 65535, inclusive).
|
|||||||
|
|
||||||
// Don't track restart times for dart2js builds or web-server devices.
|
// Don't track restart times for dart2js builds or web-server devices.
|
||||||
if (debuggingOptions.buildInfo.isDebug && deviceIsDebuggable) {
|
if (debuggingOptions.buildInfo.isDebug && deviceIsDebuggable) {
|
||||||
_usage.sendTiming('hot', 'web-incremental-restart', elapsed);
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'hot',
|
workflow: 'hot',
|
||||||
|
@ -185,7 +185,6 @@ Future<void> _runCmake(
|
|||||||
throwToolExit('Unable to generate build files');
|
throwToolExit('Unable to generate build files');
|
||||||
}
|
}
|
||||||
final Duration elapsedDuration = sw.elapsed;
|
final Duration elapsedDuration = sw.elapsed;
|
||||||
globals.flutterUsage.sendTiming('build', 'cmake-linux', elapsedDuration);
|
|
||||||
globals.analytics.send(
|
globals.analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'build',
|
workflow: 'build',
|
||||||
@ -216,7 +215,6 @@ Future<void> _runBuild(Directory buildDir) async {
|
|||||||
throwToolExit('Build process failed');
|
throwToolExit('Build process failed');
|
||||||
}
|
}
|
||||||
final Duration elapsedDuration = sw.elapsed;
|
final Duration elapsedDuration = sw.elapsed;
|
||||||
globals.flutterUsage.sendTiming('build', 'linux-ninja', elapsedDuration);
|
|
||||||
globals.analytics.send(
|
globals.analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'build',
|
workflow: 'build',
|
||||||
|
@ -85,7 +85,6 @@ Future<void> buildMacOS({
|
|||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
||||||
flutterProject.macos,
|
flutterProject.macos,
|
||||||
globals.logger,
|
globals.logger,
|
||||||
globals.flutterUsage,
|
|
||||||
globals.analytics,
|
globals.analytics,
|
||||||
),
|
),
|
||||||
MacOSDeploymentTargetMigration(flutterProject.macos, globals.logger),
|
MacOSDeploymentTargetMigration(flutterProject.macos, globals.logger),
|
||||||
@ -246,7 +245,6 @@ Future<void> buildMacOS({
|
|||||||
}
|
}
|
||||||
await _writeCodeSizeAnalysis(buildInfo, sizeAnalyzer);
|
await _writeCodeSizeAnalysis(buildInfo, sizeAnalyzer);
|
||||||
final Duration elapsedDuration = sw.elapsed;
|
final Duration elapsedDuration = sw.elapsed;
|
||||||
globals.flutterUsage.sendTiming('build', 'xcode-macos', elapsedDuration);
|
|
||||||
globals.analytics.send(
|
globals.analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'build',
|
workflow: 'build',
|
||||||
|
@ -22,7 +22,6 @@ import '../ios/xcodeproj.dart';
|
|||||||
import '../migrations/cocoapods_script_symlink.dart';
|
import '../migrations/cocoapods_script_symlink.dart';
|
||||||
import '../migrations/cocoapods_toolchain_directory_migration.dart';
|
import '../migrations/cocoapods_toolchain_directory_migration.dart';
|
||||||
import '../project.dart';
|
import '../project.dart';
|
||||||
import '../reporting/reporting.dart';
|
|
||||||
|
|
||||||
const String noCocoaPodsConsequence = '''
|
const String noCocoaPodsConsequence = '''
|
||||||
CocoaPods is a package manager for iOS or macOS platform code.
|
CocoaPods is a package manager for iOS or macOS platform code.
|
||||||
@ -100,13 +99,11 @@ class CocoaPods {
|
|||||||
required XcodeProjectInterpreter xcodeProjectInterpreter,
|
required XcodeProjectInterpreter xcodeProjectInterpreter,
|
||||||
required Logger logger,
|
required Logger logger,
|
||||||
required Platform platform,
|
required Platform platform,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
}) : _fileSystem = fileSystem,
|
}) : _fileSystem = fileSystem,
|
||||||
_processManager = processManager,
|
_processManager = processManager,
|
||||||
_xcodeProjectInterpreter = xcodeProjectInterpreter,
|
_xcodeProjectInterpreter = xcodeProjectInterpreter,
|
||||||
_logger = logger,
|
_logger = logger,
|
||||||
_usage = usage,
|
|
||||||
_analytics = analytics,
|
_analytics = analytics,
|
||||||
_processUtils = ProcessUtils(processManager: processManager, logger: logger),
|
_processUtils = ProcessUtils(processManager: processManager, logger: logger),
|
||||||
_operatingSystemUtils = OperatingSystemUtils(
|
_operatingSystemUtils = OperatingSystemUtils(
|
||||||
@ -122,7 +119,6 @@ class CocoaPods {
|
|||||||
final OperatingSystemUtils _operatingSystemUtils;
|
final OperatingSystemUtils _operatingSystemUtils;
|
||||||
final XcodeProjectInterpreter _xcodeProjectInterpreter;
|
final XcodeProjectInterpreter _xcodeProjectInterpreter;
|
||||||
final Logger _logger;
|
final Logger _logger;
|
||||||
final Usage _usage;
|
|
||||||
final Analytics _analytics;
|
final Analytics _analytics;
|
||||||
|
|
||||||
Future<String?>? _versionText;
|
Future<String?>? _versionText;
|
||||||
@ -403,7 +399,6 @@ class CocoaPods {
|
|||||||
} else if ((_isFfiX86Error(stdout) || _isFfiX86Error(stderr)) &&
|
} else if ((_isFfiX86Error(stdout) || _isFfiX86Error(stderr)) &&
|
||||||
_operatingSystemUtils.hostPlatform == HostPlatform.darwin_arm64) {
|
_operatingSystemUtils.hostPlatform == HostPlatform.darwin_arm64) {
|
||||||
// https://github.com/flutter/flutter/issues/70796
|
// https://github.com/flutter/flutter/issues/70796
|
||||||
UsageEvent('pod-install-failure', 'arm-ffi', flutterUsage: _usage).send();
|
|
||||||
_analytics.send(Event.appleUsageEvent(workflow: 'pod-install-failure', parameter: 'arm-ffi'));
|
_analytics.send(Event.appleUsageEvent(workflow: 'pod-install-failure', parameter: 'arm-ffi'));
|
||||||
_logger.printError(
|
_logger.printError(
|
||||||
'Error: To set up CocoaPods for ARM macOS, run:\n'
|
'Error: To set up CocoaPods for ARM macOS, run:\n'
|
||||||
|
@ -7,7 +7,6 @@ import 'package:unified_analytics/unified_analytics.dart';
|
|||||||
import '../../base/common.dart';
|
import '../../base/common.dart';
|
||||||
import '../../base/file_system.dart';
|
import '../../base/file_system.dart';
|
||||||
import '../../base/project_migrator.dart';
|
import '../../base/project_migrator.dart';
|
||||||
import '../../reporting/reporting.dart';
|
|
||||||
import '../../xcode_project.dart';
|
import '../../xcode_project.dart';
|
||||||
|
|
||||||
// Remove the linking and embedding logic from the Xcode project to give the tool more control over these.
|
// Remove the linking and embedding logic from the Xcode project to give the tool more control over these.
|
||||||
@ -15,14 +14,11 @@ class RemoveMacOSFrameworkLinkAndEmbeddingMigration extends ProjectMigrator {
|
|||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
||||||
MacOSProject project,
|
MacOSProject project,
|
||||||
super.logger,
|
super.logger,
|
||||||
Usage usage,
|
|
||||||
Analytics analytics,
|
Analytics analytics,
|
||||||
) : _xcodeProjectInfoFile = project.xcodeProjectInfoFile,
|
) : _xcodeProjectInfoFile = project.xcodeProjectInfoFile,
|
||||||
_usage = usage,
|
|
||||||
_analytics = analytics;
|
_analytics = analytics;
|
||||||
|
|
||||||
final File _xcodeProjectInfoFile;
|
final File _xcodeProjectInfoFile;
|
||||||
final Usage _usage;
|
|
||||||
final Analytics _analytics;
|
final Analytics _analytics;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -91,12 +87,6 @@ class RemoveMacOSFrameworkLinkAndEmbeddingMigration extends ProjectMigrator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (line.contains('/* App.framework ') || line.contains('/* FlutterMacOS.framework ')) {
|
if (line.contains('/* App.framework ') || line.contains('/* FlutterMacOS.framework ')) {
|
||||||
UsageEvent(
|
|
||||||
'macos-migration',
|
|
||||||
'remove-frameworks',
|
|
||||||
label: 'failure',
|
|
||||||
flutterUsage: _usage,
|
|
||||||
).send();
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.appleUsageEvent(
|
Event.appleUsageEvent(
|
||||||
workflow: 'macos-migration',
|
workflow: 'macos-migration',
|
||||||
|
@ -26,7 +26,6 @@ import '../ios/ios_deploy.dart';
|
|||||||
import '../ios/iproxy.dart';
|
import '../ios/iproxy.dart';
|
||||||
import '../ios/mac.dart';
|
import '../ios/mac.dart';
|
||||||
import '../ios/xcode_debug.dart';
|
import '../ios/xcode_debug.dart';
|
||||||
import '../reporting/reporting.dart';
|
|
||||||
import 'xcode.dart';
|
import 'xcode.dart';
|
||||||
|
|
||||||
class XCDeviceEventNotification {
|
class XCDeviceEventNotification {
|
||||||
@ -520,7 +519,6 @@ class XCDevice {
|
|||||||
final String? errorMessage = _parseErrorMessage(errorProperties);
|
final String? errorMessage = _parseErrorMessage(errorProperties);
|
||||||
if (errorMessage != null) {
|
if (errorMessage != null) {
|
||||||
if (errorMessage.contains('not paired')) {
|
if (errorMessage.contains('not paired')) {
|
||||||
UsageEvent('device', 'ios-trust-failure', flutterUsage: globals.flutterUsage).send();
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.appleUsageEvent(workflow: 'device', parameter: 'ios-trust-failure'),
|
Event.appleUsageEvent(workflow: 'device', parameter: 'ios-trust-failure'),
|
||||||
);
|
);
|
||||||
|
@ -16,7 +16,6 @@ import 'build_info.dart';
|
|||||||
import 'convert.dart';
|
import 'convert.dart';
|
||||||
import 'device.dart';
|
import 'device.dart';
|
||||||
import 'globals.dart' as globals;
|
import 'globals.dart' as globals;
|
||||||
import 'reporting/reporting.dart';
|
|
||||||
|
|
||||||
/// A wrapper around [MDnsClient] to find a Dart VM Service instance.
|
/// A wrapper around [MDnsClient] to find a Dart VM Service instance.
|
||||||
class MDnsVmServiceDiscovery {
|
class MDnsVmServiceDiscovery {
|
||||||
@ -27,12 +26,10 @@ class MDnsVmServiceDiscovery {
|
|||||||
MDnsClient? mdnsClient,
|
MDnsClient? mdnsClient,
|
||||||
MDnsClient? preliminaryMDnsClient,
|
MDnsClient? preliminaryMDnsClient,
|
||||||
required Logger logger,
|
required Logger logger,
|
||||||
required Usage flutterUsage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
}) : _client = mdnsClient ?? MDnsClient(),
|
}) : _client = mdnsClient ?? MDnsClient(),
|
||||||
_preliminaryClient = preliminaryMDnsClient,
|
_preliminaryClient = preliminaryMDnsClient,
|
||||||
_logger = logger,
|
_logger = logger,
|
||||||
_flutterUsage = flutterUsage,
|
|
||||||
_analytics = analytics;
|
_analytics = analytics;
|
||||||
|
|
||||||
final MDnsClient _client;
|
final MDnsClient _client;
|
||||||
@ -42,7 +39,6 @@ class MDnsVmServiceDiscovery {
|
|||||||
final MDnsClient? _preliminaryClient;
|
final MDnsClient? _preliminaryClient;
|
||||||
|
|
||||||
final Logger _logger;
|
final Logger _logger;
|
||||||
final Usage _flutterUsage;
|
|
||||||
final Analytics _analytics;
|
final Analytics _analytics;
|
||||||
|
|
||||||
@visibleForTesting
|
@visibleForTesting
|
||||||
@ -575,7 +571,6 @@ class MDnsVmServiceDiscovery {
|
|||||||
final TargetPlatform targetPlatform = await device.targetPlatform;
|
final TargetPlatform targetPlatform = await device.targetPlatform;
|
||||||
switch (targetPlatform) {
|
switch (targetPlatform) {
|
||||||
case TargetPlatform.ios:
|
case TargetPlatform.ios:
|
||||||
UsageEvent('ios-mdns', 'no-ipv4-link-local', flutterUsage: _flutterUsage).send();
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.appleUsageEvent(workflow: 'ios-mdns', parameter: 'no-ipv4-link-local'),
|
Event.appleUsageEvent(workflow: 'ios-mdns', parameter: 'no-ipv4-link-local'),
|
||||||
);
|
);
|
||||||
|
@ -716,7 +716,6 @@ class HotRunner extends ResidentRunner {
|
|||||||
|
|
||||||
// Send timing analytics.
|
// Send timing analytics.
|
||||||
final Duration elapsedDuration = restartTimer.elapsed;
|
final Duration elapsedDuration = restartTimer.elapsed;
|
||||||
globals.flutterUsage.sendTiming('hot', 'restart', elapsedDuration);
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'hot',
|
workflow: 'hot',
|
||||||
@ -1046,7 +1045,6 @@ class HotRunner extends ResidentRunner {
|
|||||||
sdkName,
|
sdkName,
|
||||||
emulator,
|
emulator,
|
||||||
reason,
|
reason,
|
||||||
globals.flutterUsage,
|
|
||||||
globals.analytics,
|
globals.analytics,
|
||||||
);
|
);
|
||||||
if (result.code != 0) {
|
if (result.code != 0) {
|
||||||
@ -1145,7 +1143,6 @@ class HotRunner extends ResidentRunner {
|
|||||||
if ((reassembleResult.reassembleViews.length == 1) &&
|
if ((reassembleResult.reassembleViews.length == 1) &&
|
||||||
!reassembleResult.failedReassemble &&
|
!reassembleResult.failedReassemble &&
|
||||||
shouldReportReloadTime) {
|
shouldReportReloadTime) {
|
||||||
globals.flutterUsage.sendTiming('hot', 'reload', reloadDuration);
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'hot',
|
workflow: 'hot',
|
||||||
@ -1298,7 +1295,6 @@ typedef ReloadSourcesHelper =
|
|||||||
String? sdkName,
|
String? sdkName,
|
||||||
bool? emulator,
|
bool? emulator,
|
||||||
String? reason,
|
String? reason,
|
||||||
Usage usage,
|
|
||||||
Analytics analytics,
|
Analytics analytics,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1312,7 +1308,6 @@ Future<OperationResult> defaultReloadSourcesHelper(
|
|||||||
String? sdkName,
|
String? sdkName,
|
||||||
bool? emulator,
|
bool? emulator,
|
||||||
String? reason,
|
String? reason,
|
||||||
Usage usage,
|
|
||||||
Analytics analytics,
|
Analytics analytics,
|
||||||
) async {
|
) async {
|
||||||
final Stopwatch vmReloadTimer = Stopwatch()..start();
|
final Stopwatch vmReloadTimer = Stopwatch()..start();
|
||||||
@ -1348,22 +1343,12 @@ Future<OperationResult> defaultReloadSourcesHelper(
|
|||||||
(await Future.wait(allReportsFutures)).whereType<DeviceReloadReport>();
|
(await Future.wait(allReportsFutures)).whereType<DeviceReloadReport>();
|
||||||
final vm_service.ReloadReport? reloadReport = reports.isEmpty ? null : reports.first.reports[0];
|
final vm_service.ReloadReport? reloadReport = reports.isEmpty ? null : reports.first.reports[0];
|
||||||
if (reloadReport == null || !HotRunner.validateReloadReport(reloadReport)) {
|
if (reloadReport == null || !HotRunner.validateReloadReport(reloadReport)) {
|
||||||
// Reload failed.
|
|
||||||
HotEvent(
|
|
||||||
'reload-reject',
|
|
||||||
targetPlatform: targetPlatform!,
|
|
||||||
sdkName: sdkName!,
|
|
||||||
emulator: emulator!,
|
|
||||||
fullRestart: false,
|
|
||||||
reason: reason,
|
|
||||||
usage: usage,
|
|
||||||
).send();
|
|
||||||
analytics.send(
|
analytics.send(
|
||||||
Event.hotRunnerInfo(
|
Event.hotRunnerInfo(
|
||||||
label: 'reload-reject',
|
label: 'reload-reject',
|
||||||
targetPlatform: targetPlatform,
|
targetPlatform: targetPlatform!,
|
||||||
sdkName: sdkName,
|
sdkName: sdkName!,
|
||||||
emulator: emulator,
|
emulator: emulator!,
|
||||||
fullRestart: false,
|
fullRestart: false,
|
||||||
reason: reason,
|
reason: reason,
|
||||||
),
|
),
|
||||||
|
@ -1805,14 +1805,6 @@ abstract class FlutterCommand extends Command<void> {
|
|||||||
final Duration elapsedDuration = (commandResult.endTimeOverride ?? endTime).difference(
|
final Duration elapsedDuration = (commandResult.endTimeOverride ?? endTime).difference(
|
||||||
startTime,
|
startTime,
|
||||||
);
|
);
|
||||||
globals.flutterUsage.sendTiming(
|
|
||||||
'flutter',
|
|
||||||
name,
|
|
||||||
elapsedDuration,
|
|
||||||
// Report in the form of `success-[parameter1-parameter2]`, all of which
|
|
||||||
// can be null if the command doesn't provide a FlutterCommandResult.
|
|
||||||
label: label == '' ? null : label,
|
|
||||||
);
|
|
||||||
analytics.send(
|
analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'flutter',
|
workflow: 'flutter',
|
||||||
|
@ -440,7 +440,6 @@ class FlutterCommandRunner extends CommandRunner<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((topLevelResults[FlutterGlobalOptions.kSuppressAnalyticsFlag] as bool?) ?? false) {
|
if ((topLevelResults[FlutterGlobalOptions.kSuppressAnalyticsFlag] as bool?) ?? false) {
|
||||||
globals.flutterUsage.suppressAnalytics = true;
|
|
||||||
globals.analytics.suppressTelemetry();
|
globals.analytics.suppressTelemetry();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -459,7 +458,6 @@ class FlutterCommandRunner extends CommandRunner<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((topLevelResults[FlutterGlobalOptions.kVersionFlag] as bool?) ?? false) {
|
if ((topLevelResults[FlutterGlobalOptions.kVersionFlag] as bool?) ?? false) {
|
||||||
globals.flutterUsage.sendCommand(FlutterGlobalOptions.kVersionFlag);
|
|
||||||
globals.analytics.send(
|
globals.analytics.send(
|
||||||
Event.flutterCommandResult(
|
Event.flutterCommandResult(
|
||||||
commandPath: 'version',
|
commandPath: 'version',
|
||||||
|
@ -19,7 +19,6 @@ import '../globals.dart' as globals;
|
|||||||
import '../platform_plugins.dart';
|
import '../platform_plugins.dart';
|
||||||
import '../plugins.dart';
|
import '../plugins.dart';
|
||||||
import '../project.dart';
|
import '../project.dart';
|
||||||
import '../reporting/reporting.dart';
|
|
||||||
import '../version.dart';
|
import '../version.dart';
|
||||||
import 'compiler_config.dart';
|
import 'compiler_config.dart';
|
||||||
import 'file_generators/flutter_service_worker_js.dart';
|
import 'file_generators/flutter_service_worker_js.dart';
|
||||||
@ -41,14 +40,12 @@ class WebBuilder {
|
|||||||
required Logger logger,
|
required Logger logger,
|
||||||
required ProcessManager processManager,
|
required ProcessManager processManager,
|
||||||
required BuildSystem buildSystem,
|
required BuildSystem buildSystem,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
required FlutterVersion flutterVersion,
|
required FlutterVersion flutterVersion,
|
||||||
required FileSystem fileSystem,
|
required FileSystem fileSystem,
|
||||||
}) : _logger = logger,
|
}) : _logger = logger,
|
||||||
_processManager = processManager,
|
_processManager = processManager,
|
||||||
_buildSystem = buildSystem,
|
_buildSystem = buildSystem,
|
||||||
_flutterUsage = usage,
|
|
||||||
_analytics = analytics,
|
_analytics = analytics,
|
||||||
_flutterVersion = flutterVersion,
|
_flutterVersion = flutterVersion,
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
@ -56,7 +53,6 @@ class WebBuilder {
|
|||||||
final Logger _logger;
|
final Logger _logger;
|
||||||
final ProcessManager _processManager;
|
final ProcessManager _processManager;
|
||||||
final BuildSystem _buildSystem;
|
final BuildSystem _buildSystem;
|
||||||
final Usage _flutterUsage;
|
|
||||||
final Analytics _analytics;
|
final Analytics _analytics;
|
||||||
final FlutterVersion _flutterVersion;
|
final FlutterVersion _flutterVersion;
|
||||||
final FileSystem _fileSystem;
|
final FileSystem _fileSystem;
|
||||||
@ -146,19 +142,12 @@ class WebBuilder {
|
|||||||
|
|
||||||
final String buildSettingsString = _buildEventAnalyticsSettings(configs: compilerConfigs);
|
final String buildSettingsString = _buildEventAnalyticsSettings(configs: compilerConfigs);
|
||||||
|
|
||||||
BuildEvent(
|
|
||||||
'web-compile',
|
|
||||||
type: 'web',
|
|
||||||
settings: buildSettingsString,
|
|
||||||
flutterUsage: _flutterUsage,
|
|
||||||
).send();
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.flutterBuildInfo(label: 'web-compile', buildType: 'web', settings: buildSettingsString),
|
Event.flutterBuildInfo(label: 'web-compile', buildType: 'web', settings: buildSettingsString),
|
||||||
);
|
);
|
||||||
|
|
||||||
final Duration elapsedDuration = sw.elapsed;
|
final Duration elapsedDuration = sw.elapsed;
|
||||||
final String variableName = compilerConfigs.length > 1 ? 'dual-compile' : 'dart2js';
|
final String variableName = compilerConfigs.length > 1 ? 'dual-compile' : 'dart2js';
|
||||||
_flutterUsage.sendTiming('build', variableName, elapsedDuration);
|
|
||||||
_analytics.send(
|
_analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'build',
|
workflow: 'build',
|
||||||
|
@ -11,7 +11,6 @@ import '../base/net.dart';
|
|||||||
import '../base/time.dart';
|
import '../base/time.dart';
|
||||||
import '../device.dart';
|
import '../device.dart';
|
||||||
import '../project.dart';
|
import '../project.dart';
|
||||||
import '../reporting/reporting.dart';
|
|
||||||
import '../resident_runner.dart';
|
import '../resident_runner.dart';
|
||||||
|
|
||||||
WebRunnerFactory? get webRunnerFactory => context.get<WebRunnerFactory>();
|
WebRunnerFactory? get webRunnerFactory => context.get<WebRunnerFactory>();
|
||||||
@ -31,7 +30,6 @@ abstract class WebRunnerFactory {
|
|||||||
required Logger logger,
|
required Logger logger,
|
||||||
required FileSystem fileSystem,
|
required FileSystem fileSystem,
|
||||||
required SystemClock systemClock,
|
required SystemClock systemClock,
|
||||||
required Usage usage,
|
|
||||||
required Analytics analytics,
|
required Analytics analytics,
|
||||||
bool machine = false,
|
bool machine = false,
|
||||||
});
|
});
|
||||||
|
@ -205,7 +205,6 @@ Future<void> _runCmakeGeneration({
|
|||||||
throwToolExit('Unable to generate build files');
|
throwToolExit('Unable to generate build files');
|
||||||
}
|
}
|
||||||
final Duration elapsedDuration = sw.elapsed;
|
final Duration elapsedDuration = sw.elapsed;
|
||||||
globals.flutterUsage.sendTiming('build', 'windows-cmake-generation', elapsedDuration);
|
|
||||||
globals.analytics.send(
|
globals.analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'build',
|
workflow: 'build',
|
||||||
@ -259,7 +258,6 @@ Future<void> _runBuild(
|
|||||||
throwToolExit('Build process failed.');
|
throwToolExit('Build process failed.');
|
||||||
}
|
}
|
||||||
final Duration elapsedDuration = sw.elapsed;
|
final Duration elapsedDuration = sw.elapsed;
|
||||||
globals.flutterUsage.sendTiming('build', 'windows-cmake-build', elapsedDuration);
|
|
||||||
globals.analytics.send(
|
globals.analytics.send(
|
||||||
Event.timing(
|
Event.timing(
|
||||||
workflow: 'build',
|
workflow: 'build',
|
||||||
|
@ -28,7 +28,6 @@ import 'package:flutter_tools/src/ios/devices.dart';
|
|||||||
import 'package:flutter_tools/src/macos/macos_ipad_device.dart';
|
import 'package:flutter_tools/src/macos/macos_ipad_device.dart';
|
||||||
import 'package:flutter_tools/src/mdns_discovery.dart';
|
import 'package:flutter_tools/src/mdns_discovery.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:flutter_tools/src/resident_runner.dart';
|
import 'package:flutter_tools/src/resident_runner.dart';
|
||||||
import 'package:flutter_tools/src/run_hot.dart';
|
import 'package:flutter_tools/src/run_hot.dart';
|
||||||
import 'package:multicast_dns/multicast_dns.dart';
|
import 'package:multicast_dns/multicast_dns.dart';
|
||||||
@ -179,7 +178,6 @@ void main() {
|
|||||||
<String, List<SrvResourceRecord>>{},
|
<String, List<SrvResourceRecord>>{},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -260,7 +258,6 @@ void main() {
|
|||||||
<String, List<SrvResourceRecord>>{},
|
<String, List<SrvResourceRecord>>{},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
Signals: () => FakeSignals(),
|
Signals: () => FakeSignals(),
|
||||||
@ -356,7 +353,6 @@ void main() {
|
|||||||
<String, List<SrvResourceRecord>>{},
|
<String, List<SrvResourceRecord>>{},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
ProcessManager: () => FakeProcessManager.empty(),
|
ProcessManager: () => FakeProcessManager.empty(),
|
||||||
@ -447,7 +443,6 @@ void main() {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -540,7 +535,6 @@ void main() {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -646,7 +640,6 @@ void main() {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -752,7 +745,6 @@ void main() {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
@ -1016,7 +1008,6 @@ void main() {
|
|||||||
<String, List<SrvResourceRecord>>{},
|
<String, List<SrvResourceRecord>>{},
|
||||||
),
|
),
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
@ -228,71 +228,38 @@ void main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
testUsingContext(
|
testUsingContext(
|
||||||
'no-analytics flag flips usage flag and sends event',
|
'analytics flag enables/disables analytics',
|
||||||
() async {
|
() async {
|
||||||
final ConfigCommand configCommand = ConfigCommand();
|
final ConfigCommand configCommand = ConfigCommand();
|
||||||
final CommandRunner<void> commandRunner = createTestCommandRunner(configCommand);
|
final CommandRunner<void> commandRunner = createTestCommandRunner(configCommand);
|
||||||
|
|
||||||
expect(testUsage.enabled, true);
|
expect(fakeAnalytics.telemetryEnabled, true);
|
||||||
|
|
||||||
await commandRunner.run(<String>['config', '--no-analytics']);
|
await commandRunner.run(<String>['config', '--no-analytics']);
|
||||||
|
expect(fakeAnalytics.telemetryEnabled, false);
|
||||||
expect(testUsage.enabled, false);
|
|
||||||
|
|
||||||
// Verify that we flushed the analytics queue.
|
|
||||||
expect(testUsage.ensureAnalyticsSentCalls, 1);
|
|
||||||
|
|
||||||
// Verify that we only send the analytics disable event, and no other
|
|
||||||
// info.
|
|
||||||
expect(
|
|
||||||
testUsage.events,
|
|
||||||
equals(<TestUsageEvent>[const TestUsageEvent('analytics', 'enabled', label: 'false')]),
|
|
||||||
);
|
|
||||||
expect(testUsage.commands, isEmpty);
|
|
||||||
expect(testUsage.timings, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{Usage: () => testUsage},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'analytics flag flips usage flag and sends event',
|
|
||||||
() async {
|
|
||||||
final ConfigCommand configCommand = ConfigCommand();
|
|
||||||
final CommandRunner<void> commandRunner = createTestCommandRunner(configCommand);
|
|
||||||
|
|
||||||
await commandRunner.run(<String>['config', '--analytics']);
|
await commandRunner.run(<String>['config', '--analytics']);
|
||||||
|
expect(fakeAnalytics.telemetryEnabled, true);
|
||||||
expect(testUsage.enabled, true);
|
|
||||||
|
|
||||||
// Verify that we only send the analytics enable event, and no other
|
|
||||||
// info.
|
|
||||||
expect(
|
|
||||||
testUsage.events,
|
|
||||||
equals(<TestUsageEvent>[const TestUsageEvent('analytics', 'enabled', label: 'true')]),
|
|
||||||
);
|
|
||||||
expect(testUsage.commands, isEmpty);
|
|
||||||
expect(testUsage.timings, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
|
||||||
},
|
},
|
||||||
overrides: <Type, Generator>{Usage: () => testUsage},
|
overrides: <Type, Generator>{Analytics: () => fakeAnalytics},
|
||||||
);
|
);
|
||||||
|
|
||||||
testUsingContext('analytics reported with help usages', () async {
|
testUsingContext('analytics reported with help usages', () async {
|
||||||
final ConfigCommand configCommand = ConfigCommand();
|
final ConfigCommand configCommand = ConfigCommand();
|
||||||
createTestCommandRunner(configCommand);
|
createTestCommandRunner(configCommand);
|
||||||
|
|
||||||
testUsage.suppressAnalytics = true;
|
await fakeAnalytics.setTelemetry(false);
|
||||||
expect(
|
expect(
|
||||||
configCommand.usage,
|
configCommand.usage,
|
||||||
containsIgnoringWhitespace('Analytics reporting is currently disabled'),
|
containsIgnoringWhitespace('Analytics reporting is currently disabled'),
|
||||||
);
|
);
|
||||||
|
|
||||||
testUsage.suppressAnalytics = false;
|
await fakeAnalytics.setTelemetry(true);
|
||||||
expect(
|
expect(
|
||||||
configCommand.usage,
|
configCommand.usage,
|
||||||
containsIgnoringWhitespace('Analytics reporting is currently enabled'),
|
containsIgnoringWhitespace('Analytics reporting is currently enabled'),
|
||||||
);
|
);
|
||||||
}, overrides: <Type, Generator>{Usage: () => testUsage});
|
}, overrides: <Type, Generator>{Analytics: () => fakeAnalytics});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,455 +0,0 @@
|
|||||||
// 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 'package:args/command_runner.dart';
|
|
||||||
import 'package:file/memory.dart';
|
|
||||||
import 'package:flutter_tools/src/android/android_studio.dart';
|
|
||||||
import 'package:flutter_tools/src/android/android_workflow.dart';
|
|
||||||
import 'package:flutter_tools/src/artifacts.dart';
|
|
||||||
import 'package:flutter_tools/src/base/config.dart';
|
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
|
||||||
import 'package:flutter_tools/src/base/io.dart';
|
|
||||||
import 'package:flutter_tools/src/base/logger.dart';
|
|
||||||
import 'package:flutter_tools/src/base/platform.dart';
|
|
||||||
import 'package:flutter_tools/src/base/process.dart';
|
|
||||||
import 'package:flutter_tools/src/base/time.dart';
|
|
||||||
import 'package:flutter_tools/src/build_system/build_system.dart';
|
|
||||||
import 'package:flutter_tools/src/cache.dart';
|
|
||||||
import 'package:flutter_tools/src/commands/build.dart';
|
|
||||||
import 'package:flutter_tools/src/commands/config.dart';
|
|
||||||
import 'package:flutter_tools/src/commands/doctor.dart';
|
|
||||||
import 'package:flutter_tools/src/doctor.dart';
|
|
||||||
import 'package:flutter_tools/src/doctor_validator.dart';
|
|
||||||
import 'package:flutter_tools/src/features.dart';
|
|
||||||
import 'package:flutter_tools/src/globals.dart' as globals;
|
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
|
||||||
import 'package:flutter_tools/src/version.dart';
|
|
||||||
import 'package:test/fake.dart';
|
|
||||||
import 'package:usage/usage_io.dart';
|
|
||||||
|
|
||||||
import '../src/common.dart';
|
|
||||||
import '../src/context.dart';
|
|
||||||
import '../src/fakes.dart';
|
|
||||||
import '../src/test_build_system.dart';
|
|
||||||
import '../src/test_flutter_command_runner.dart';
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
setUpAll(() {
|
|
||||||
Cache.disableLocking();
|
|
||||||
});
|
|
||||||
|
|
||||||
group('analytics', () {
|
|
||||||
late Directory tempDir;
|
|
||||||
late Config testConfig;
|
|
||||||
late FileSystem fs;
|
|
||||||
|
|
||||||
const String flutterRoot = '/path/to/flutter';
|
|
||||||
|
|
||||||
setUp(() {
|
|
||||||
Cache.flutterRoot = flutterRoot;
|
|
||||||
tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_analytics_test.');
|
|
||||||
testConfig = Config.test();
|
|
||||||
fs = MemoryFileSystem.test();
|
|
||||||
});
|
|
||||||
|
|
||||||
tearDown(() {
|
|
||||||
tryToDelete(tempDir);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Ensure we don't send anything when analytics is disabled.
|
|
||||||
testUsingContext(
|
|
||||||
"doesn't send when disabled",
|
|
||||||
() async {
|
|
||||||
int count = 0;
|
|
||||||
globals.flutterUsage.onSend.listen((Map<String, dynamic> data) => count++);
|
|
||||||
|
|
||||||
final FlutterCommand command = FakeFlutterCommand();
|
|
||||||
final CommandRunner<void> runner = createTestCommandRunner(command);
|
|
||||||
|
|
||||||
globals.flutterUsage.enabled = false;
|
|
||||||
await runner.run(<String>['fake']);
|
|
||||||
expect(count, 0);
|
|
||||||
|
|
||||||
globals.flutterUsage.enabled = true;
|
|
||||||
await runner.run(<String>['fake']);
|
|
||||||
// LogToFileAnalytics isFirstRun is hardcoded to false
|
|
||||||
// so this usage will never act like the first run
|
|
||||||
// (which would not send usage).
|
|
||||||
expect(count, 4);
|
|
||||||
|
|
||||||
count = 0;
|
|
||||||
globals.flutterUsage.enabled = false;
|
|
||||||
await runner.run(<String>['fake']);
|
|
||||||
|
|
||||||
expect(count, 0);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
FlutterVersion: () => FakeFlutterVersion(),
|
|
||||||
Usage:
|
|
||||||
() => Usage(
|
|
||||||
configDirOverride: tempDir.path,
|
|
||||||
logFile: tempDir.childFile('analytics.log').path,
|
|
||||||
runningOnBot: true,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
// Ensure we don't send for the 'flutter config' command.
|
|
||||||
testUsingContext(
|
|
||||||
"config doesn't send",
|
|
||||||
() async {
|
|
||||||
int count = 0;
|
|
||||||
globals.flutterUsage.onSend.listen((Map<String, dynamic> data) => count++);
|
|
||||||
|
|
||||||
globals.flutterUsage.enabled = false;
|
|
||||||
final ConfigCommand command = ConfigCommand();
|
|
||||||
final CommandRunner<void> runner = createTestCommandRunner(command);
|
|
||||||
await runner.run(<String>['config']);
|
|
||||||
expect(count, 0);
|
|
||||||
|
|
||||||
globals.flutterUsage.enabled = true;
|
|
||||||
await runner.run(<String>['config']);
|
|
||||||
|
|
||||||
expect(count, 0);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
FlutterVersion: () => FakeFlutterVersion(),
|
|
||||||
Usage:
|
|
||||||
() => Usage(
|
|
||||||
configDirOverride: tempDir.path,
|
|
||||||
logFile: tempDir.childFile('analytics.log').path,
|
|
||||||
runningOnBot: true,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'Usage records one feature in experiment setting',
|
|
||||||
() async {
|
|
||||||
testConfig.setValue(flutterWebFeature.configSetting!, true);
|
|
||||||
final Usage usage = Usage(runningOnBot: true);
|
|
||||||
usage.sendCommand('test');
|
|
||||||
|
|
||||||
final String featuresKey = CustomDimensionsEnum.enabledFlutterFeatures.cdKey;
|
|
||||||
|
|
||||||
expect(globals.fs.file('test').readAsStringSync(), contains('$featuresKey: enable-web'));
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
FlutterVersion: () => FakeFlutterVersion(),
|
|
||||||
Config: () => testConfig,
|
|
||||||
Platform:
|
|
||||||
() => FakePlatform(environment: <String, String>{'FLUTTER_ANALYTICS_LOG_FILE': 'test'}),
|
|
||||||
FileSystem: () => fs,
|
|
||||||
ProcessManager: () => FakeProcessManager.any(),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'Usage records multiple features in experiment setting',
|
|
||||||
() async {
|
|
||||||
testConfig.setValue(flutterWebFeature.configSetting!, true);
|
|
||||||
testConfig.setValue(flutterLinuxDesktopFeature.configSetting!, true);
|
|
||||||
testConfig.setValue(flutterMacOSDesktopFeature.configSetting!, true);
|
|
||||||
final Usage usage = Usage(runningOnBot: true);
|
|
||||||
usage.sendCommand('test');
|
|
||||||
|
|
||||||
final String featuresKey = CustomDimensionsEnum.enabledFlutterFeatures.cdKey;
|
|
||||||
|
|
||||||
expect(
|
|
||||||
globals.fs.file('test').readAsStringSync(),
|
|
||||||
contains('$featuresKey: enable-web,enable-linux-desktop,enable-macos-desktop'),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
FlutterVersion: () => FakeFlutterVersion(),
|
|
||||||
Config: () => testConfig,
|
|
||||||
Platform:
|
|
||||||
() => FakePlatform(environment: <String, String>{'FLUTTER_ANALYTICS_LOG_FILE': 'test'}),
|
|
||||||
FileSystem: () => fs,
|
|
||||||
ProcessManager: () => FakeProcessManager.any(),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
group('analytics with fakes', () {
|
|
||||||
late MemoryFileSystem memoryFileSystem;
|
|
||||||
late FakeStdio fakeStdio;
|
|
||||||
late TestUsage testUsage;
|
|
||||||
late FakeClock fakeClock;
|
|
||||||
late FakeDoctor doctor;
|
|
||||||
late FakeAndroidStudio androidStudio;
|
|
||||||
late ProcessManager processManager;
|
|
||||||
late BufferLogger logger;
|
|
||||||
late ProcessUtils processUtils;
|
|
||||||
|
|
||||||
setUp(() {
|
|
||||||
memoryFileSystem = MemoryFileSystem.test();
|
|
||||||
fakeStdio = FakeStdio();
|
|
||||||
testUsage = TestUsage();
|
|
||||||
fakeClock = FakeClock();
|
|
||||||
doctor = FakeDoctor();
|
|
||||||
androidStudio = FakeAndroidStudio();
|
|
||||||
processManager = FakeProcessManager.empty();
|
|
||||||
logger = BufferLogger.test();
|
|
||||||
processUtils = ProcessUtils(logger: logger, processManager: processManager);
|
|
||||||
});
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'flutter commands send timing events',
|
|
||||||
() async {
|
|
||||||
fakeClock.times = <int>[1000, 2000];
|
|
||||||
doctor.diagnoseSucceeds = true;
|
|
||||||
final DoctorCommand command = DoctorCommand();
|
|
||||||
final CommandRunner<void> runner = createTestCommandRunner(command);
|
|
||||||
await runner.run(<String>['doctor']);
|
|
||||||
|
|
||||||
expect(
|
|
||||||
testUsage.timings,
|
|
||||||
contains(
|
|
||||||
const TestTimingEvent(
|
|
||||||
'flutter',
|
|
||||||
'doctor',
|
|
||||||
Duration(milliseconds: 1000),
|
|
||||||
label: 'success',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
AndroidStudio: () => androidStudio,
|
|
||||||
SystemClock: () => fakeClock,
|
|
||||||
Doctor: () => doctor,
|
|
||||||
Usage: () => testUsage,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'doctor fail sends warning',
|
|
||||||
() async {
|
|
||||||
fakeClock.times = <int>[1000, 2000];
|
|
||||||
doctor.diagnoseSucceeds = false;
|
|
||||||
final DoctorCommand command = DoctorCommand();
|
|
||||||
final CommandRunner<void> runner = createTestCommandRunner(command);
|
|
||||||
await runner.run(<String>['doctor']);
|
|
||||||
|
|
||||||
expect(
|
|
||||||
testUsage.timings,
|
|
||||||
contains(
|
|
||||||
const TestTimingEvent(
|
|
||||||
'flutter',
|
|
||||||
'doctor',
|
|
||||||
Duration(milliseconds: 1000),
|
|
||||||
label: 'warning',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
AndroidStudio: () => androidStudio,
|
|
||||||
SystemClock: () => fakeClock,
|
|
||||||
Doctor: () => doctor,
|
|
||||||
Usage: () => testUsage,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext('single command usage path', () async {
|
|
||||||
final FlutterCommand doctorCommand = DoctorCommand();
|
|
||||||
|
|
||||||
expect(await doctorCommand.usagePath, 'doctor');
|
|
||||||
}, overrides: <Type, Generator>{Usage: () => testUsage});
|
|
||||||
|
|
||||||
testUsingContext('compound command usage path', () async {
|
|
||||||
final BuildCommand buildCommand = BuildCommand(
|
|
||||||
artifacts: Artifacts.test(fileSystem: memoryFileSystem),
|
|
||||||
androidSdk: FakeAndroidSdk(),
|
|
||||||
buildSystem: TestBuildSystem.all(BuildResult(success: true)),
|
|
||||||
fileSystem: memoryFileSystem,
|
|
||||||
logger: logger,
|
|
||||||
processUtils: processUtils,
|
|
||||||
osUtils: FakeOperatingSystemUtils(),
|
|
||||||
);
|
|
||||||
final FlutterCommand buildApkCommand = buildCommand.subcommands['apk']! as FlutterCommand;
|
|
||||||
|
|
||||||
expect(await buildApkCommand.usagePath, 'build/apk');
|
|
||||||
});
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'command sends localtime',
|
|
||||||
() async {
|
|
||||||
const int kMillis = 1000;
|
|
||||||
fakeClock.times = <int>[kMillis];
|
|
||||||
// Since FLUTTER_ANALYTICS_LOG_FILE is set in the environment, analytics
|
|
||||||
// will be written to a file.
|
|
||||||
final Usage usage = Usage(versionOverride: 'test', runningOnBot: true);
|
|
||||||
usage.suppressAnalytics = false;
|
|
||||||
usage.enabled = true;
|
|
||||||
|
|
||||||
usage.sendCommand('test');
|
|
||||||
|
|
||||||
final String log = globals.fs.file('analytics.log').readAsStringSync();
|
|
||||||
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(kMillis);
|
|
||||||
|
|
||||||
expect(log.contains(formatDateTime(dateTime)), isTrue);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
FileSystem: () => memoryFileSystem,
|
|
||||||
ProcessManager: () => processManager,
|
|
||||||
SystemClock: () => fakeClock,
|
|
||||||
Platform:
|
|
||||||
() => FakePlatform(
|
|
||||||
environment: <String, String>{'FLUTTER_ANALYTICS_LOG_FILE': 'analytics.log'},
|
|
||||||
),
|
|
||||||
Stdio: () => fakeStdio,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'event sends localtime',
|
|
||||||
() async {
|
|
||||||
const int kMillis = 1000;
|
|
||||||
fakeClock.times = <int>[kMillis];
|
|
||||||
// Since FLUTTER_ANALYTICS_LOG_FILE is set in the environment, analytics
|
|
||||||
// will be written to a file.
|
|
||||||
final Usage usage = Usage(versionOverride: 'test', runningOnBot: true);
|
|
||||||
usage.suppressAnalytics = false;
|
|
||||||
usage.enabled = true;
|
|
||||||
|
|
||||||
usage.sendEvent('test', 'test');
|
|
||||||
|
|
||||||
final String log = globals.fs.file('analytics.log').readAsStringSync();
|
|
||||||
final DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(kMillis);
|
|
||||||
|
|
||||||
expect(log.contains(formatDateTime(dateTime)), isTrue);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
FileSystem: () => memoryFileSystem,
|
|
||||||
ProcessManager: () => processManager,
|
|
||||||
SystemClock: () => fakeClock,
|
|
||||||
Platform:
|
|
||||||
() => FakePlatform(
|
|
||||||
environment: <String, String>{'FLUTTER_ANALYTICS_LOG_FILE': 'analytics.log'},
|
|
||||||
),
|
|
||||||
Stdio: () => fakeStdio,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
group('analytics bots', () {
|
|
||||||
late Directory tempDir;
|
|
||||||
|
|
||||||
setUp(() {
|
|
||||||
tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_analytics_bots_test.');
|
|
||||||
});
|
|
||||||
|
|
||||||
tearDown(() {
|
|
||||||
tryToDelete(tempDir);
|
|
||||||
});
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
"don't send on bots with unknown version",
|
|
||||||
() async {
|
|
||||||
int count = 0;
|
|
||||||
globals.flutterUsage.onSend.listen((Map<String, dynamic> data) => count++);
|
|
||||||
await createTestCommandRunner().run(<String>['--version']);
|
|
||||||
|
|
||||||
expect(count, 0);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
Usage:
|
|
||||||
() => Usage(
|
|
||||||
settingsName: 'flutter_bot_test',
|
|
||||||
versionOverride: 'dev/unknown',
|
|
||||||
configDirOverride: tempDir.path,
|
|
||||||
runningOnBot: false,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
"don't send on bots even when opted in",
|
|
||||||
() async {
|
|
||||||
int count = 0;
|
|
||||||
globals.flutterUsage.onSend.listen((Map<String, dynamic> data) => count++);
|
|
||||||
globals.flutterUsage.enabled = true;
|
|
||||||
await createTestCommandRunner().run(<String>['--version']);
|
|
||||||
|
|
||||||
expect(count, 0);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
Usage:
|
|
||||||
() => Usage(
|
|
||||||
settingsName: 'flutter_bot_test',
|
|
||||||
versionOverride: 'dev/unknown',
|
|
||||||
configDirOverride: tempDir.path,
|
|
||||||
runningOnBot: false,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext('Uses AnalyticsMock when .flutter cannot be created', () async {
|
|
||||||
final Usage usage = Usage(
|
|
||||||
settingsName: 'flutter_bot_test',
|
|
||||||
versionOverride: 'dev/known',
|
|
||||||
configDirOverride: tempDir.path,
|
|
||||||
analyticsIOFactory: throwingAnalyticsIOFactory,
|
|
||||||
runningOnBot: false,
|
|
||||||
);
|
|
||||||
final AnalyticsMock analyticsMock = AnalyticsMock();
|
|
||||||
|
|
||||||
expect(usage.clientId, analyticsMock.clientId);
|
|
||||||
expect(usage.suppressAnalytics, isTrue);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Analytics throwingAnalyticsIOFactory(
|
|
||||||
String trackingId,
|
|
||||||
String applicationName,
|
|
||||||
String applicationVersion, {
|
|
||||||
String? analyticsUrl,
|
|
||||||
Directory? documentDirectory,
|
|
||||||
}) {
|
|
||||||
throw const FileSystemException('Could not create file');
|
|
||||||
}
|
|
||||||
|
|
||||||
class FakeFlutterCommand extends FlutterCommand {
|
|
||||||
@override
|
|
||||||
String get description => 'A fake command';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get name => 'fake';
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<FlutterCommandResult> runCommand() async {
|
|
||||||
return FlutterCommandResult.success();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FakeDoctor extends Fake implements Doctor {
|
|
||||||
bool diagnoseSucceeds = false;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<bool> diagnose({
|
|
||||||
bool androidLicenses = false,
|
|
||||||
bool verbose = true,
|
|
||||||
bool showColor = true,
|
|
||||||
AndroidLicenseValidator? androidLicenseValidator,
|
|
||||||
bool showPii = true,
|
|
||||||
List<ValidatorTask>? startedValidatorTasks,
|
|
||||||
bool sendEvent = true,
|
|
||||||
FlutterVersion? version,
|
|
||||||
}) async {
|
|
||||||
return diagnoseSucceeds;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FakeClock extends Fake implements SystemClock {
|
|
||||||
List<int> times = <int>[];
|
|
||||||
|
|
||||||
@override
|
|
||||||
DateTime now() {
|
|
||||||
return DateTime.fromMillisecondsSinceEpoch(times.removeAt(0));
|
|
||||||
}
|
|
||||||
}
|
|
@ -488,7 +488,6 @@ void main() {
|
|||||||
String? sdkName,
|
String? sdkName,
|
||||||
bool? emulator,
|
bool? emulator,
|
||||||
String? reason,
|
String? reason,
|
||||||
Usage usage,
|
|
||||||
Analytics? analytics,
|
Analytics? analytics,
|
||||||
) async {
|
) async {
|
||||||
firstReloadDetails['finalLibraryCount'] = 2;
|
firstReloadDetails['finalLibraryCount'] = 2;
|
||||||
|
@ -13,7 +13,6 @@ import 'package:flutter_tools/src/build_info.dart';
|
|||||||
import 'package:flutter_tools/src/ios/xcode_build_settings.dart';
|
import 'package:flutter_tools/src/ios/xcode_build_settings.dart';
|
||||||
import 'package:flutter_tools/src/ios/xcodeproj.dart';
|
import 'package:flutter_tools/src/ios/xcodeproj.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:unified_analytics/unified_analytics.dart';
|
import 'package:unified_analytics/unified_analytics.dart';
|
||||||
|
|
||||||
import '../../src/common.dart';
|
import '../../src/common.dart';
|
||||||
@ -61,7 +60,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
platform: platform,
|
platform: platform,
|
||||||
processManager: fakeProcessManager,
|
processManager: fakeProcessManager,
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@ -181,7 +179,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
platform: platform,
|
platform: platform,
|
||||||
processManager: fakeProcessManager,
|
processManager: fakeProcessManager,
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
fileSystem.file(xcodebuild).deleteSync();
|
fileSystem.file(xcodebuild).deleteSync();
|
||||||
@ -568,7 +565,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
platform: platform,
|
platform: platform,
|
||||||
processManager: fakeProcessManager,
|
processManager: fakeProcessManager,
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -598,7 +594,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
platform: platform,
|
platform: platform,
|
||||||
processManager: fakeProcessManager,
|
processManager: fakeProcessManager,
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -631,7 +626,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
platform: platform,
|
platform: platform,
|
||||||
processManager: fakeProcessManager,
|
processManager: fakeProcessManager,
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ import 'package:flutter_tools/src/flutter_plugins.dart';
|
|||||||
import 'package:flutter_tools/src/ios/xcodeproj.dart';
|
import 'package:flutter_tools/src/ios/xcodeproj.dart';
|
||||||
import 'package:flutter_tools/src/macos/cocoapods.dart';
|
import 'package:flutter_tools/src/macos/cocoapods.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:test/fake.dart';
|
import 'package:test/fake.dart';
|
||||||
import 'package:unified_analytics/unified_analytics.dart';
|
import 'package:unified_analytics/unified_analytics.dart';
|
||||||
|
|
||||||
@ -32,7 +31,6 @@ void main() {
|
|||||||
late FakeProcessManager fakeProcessManager;
|
late FakeProcessManager fakeProcessManager;
|
||||||
late CocoaPods cocoaPodsUnderTest;
|
late CocoaPods cocoaPodsUnderTest;
|
||||||
late BufferLogger logger;
|
late BufferLogger logger;
|
||||||
late TestUsage usage;
|
|
||||||
late FakeAnalytics fakeAnalytics;
|
late FakeAnalytics fakeAnalytics;
|
||||||
|
|
||||||
// TODO(matanlurey): Remove after `explicit-package-dependencies` is enabled by default.
|
// TODO(matanlurey): Remove after `explicit-package-dependencies` is enabled by default.
|
||||||
@ -74,7 +72,6 @@ void main() {
|
|||||||
fileSystem = MemoryFileSystem.test();
|
fileSystem = MemoryFileSystem.test();
|
||||||
fakeProcessManager = FakeProcessManager.empty();
|
fakeProcessManager = FakeProcessManager.empty();
|
||||||
logger = BufferLogger.test();
|
logger = BufferLogger.test();
|
||||||
usage = TestUsage();
|
|
||||||
fakeAnalytics = getInitializedFakeAnalyticsInstance(
|
fakeAnalytics = getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
@ -85,7 +82,6 @@ void main() {
|
|||||||
logger: logger,
|
logger: logger,
|
||||||
platform: FakePlatform(operatingSystem: 'macos'),
|
platform: FakePlatform(operatingSystem: 'macos'),
|
||||||
xcodeProjectInterpreter: FakeXcodeProjectInterpreter(),
|
xcodeProjectInterpreter: FakeXcodeProjectInterpreter(),
|
||||||
usage: usage,
|
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
);
|
);
|
||||||
fileSystem.file(
|
fileSystem.file(
|
||||||
@ -227,7 +223,6 @@ void main() {
|
|||||||
logger: logger,
|
logger: logger,
|
||||||
platform: FakePlatform(operatingSystem: 'macos'),
|
platform: FakePlatform(operatingSystem: 'macos'),
|
||||||
xcodeProjectInterpreter: fakeXcodeProjectInterpreter,
|
xcodeProjectInterpreter: fakeXcodeProjectInterpreter,
|
||||||
usage: usage,
|
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -269,7 +264,6 @@ void main() {
|
|||||||
logger: logger,
|
logger: logger,
|
||||||
platform: FakePlatform(operatingSystem: 'macos'),
|
platform: FakePlatform(operatingSystem: 'macos'),
|
||||||
xcodeProjectInterpreter: FakeXcodeProjectInterpreter(isInstalled: false),
|
xcodeProjectInterpreter: FakeXcodeProjectInterpreter(isInstalled: false),
|
||||||
usage: usage,
|
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -1261,7 +1255,6 @@ end''');
|
|||||||
);
|
);
|
||||||
expect(logger.errorText, contains('set up CocoaPods for ARM macOS'));
|
expect(logger.errorText, contains('set up CocoaPods for ARM macOS'));
|
||||||
expect(logger.errorText, contains('enable-libffi-alloc'));
|
expect(logger.errorText, contains('enable-libffi-alloc'));
|
||||||
expect(usage.events, contains(const TestUsageEvent('pod-install-failure', 'arm-ffi')));
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -1487,7 +1480,6 @@ end''');
|
|||||||
processManager: fakeProcessManager,
|
processManager: fakeProcessManager,
|
||||||
version: Version(14, 3, 0),
|
version: Version(14, 3, 0),
|
||||||
),
|
),
|
||||||
usage: usage,
|
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import 'package:flutter_tools/src/macos/migrations/nsapplicationmain_deprecation
|
|||||||
import 'package:flutter_tools/src/macos/migrations/remove_macos_framework_link_and_embedding_migration.dart';
|
import 'package:flutter_tools/src/macos/migrations/remove_macos_framework_link_and_embedding_migration.dart';
|
||||||
import 'package:flutter_tools/src/macos/migrations/secure_restorable_state_migration.dart';
|
import 'package:flutter_tools/src/macos/migrations/secure_restorable_state_migration.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:test/fake.dart';
|
import 'package:test/fake.dart';
|
||||||
import 'package:unified_analytics/unified_analytics.dart';
|
import 'package:unified_analytics/unified_analytics.dart';
|
||||||
|
|
||||||
@ -22,7 +21,6 @@ import '../../src/fakes.dart';
|
|||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
group('remove link and embed migration', () {
|
group('remove link and embed migration', () {
|
||||||
late TestUsage testUsage;
|
|
||||||
late FakeAnalytics fakeAnalytics;
|
late FakeAnalytics fakeAnalytics;
|
||||||
late MemoryFileSystem memoryFileSystem;
|
late MemoryFileSystem memoryFileSystem;
|
||||||
late BufferLogger testLogger;
|
late BufferLogger testLogger;
|
||||||
@ -30,7 +28,6 @@ void main() {
|
|||||||
late File xcodeProjectInfoFile;
|
late File xcodeProjectInfoFile;
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
testUsage = TestUsage();
|
|
||||||
memoryFileSystem = MemoryFileSystem.test();
|
memoryFileSystem = MemoryFileSystem.test();
|
||||||
fakeAnalytics = getInitializedFakeAnalyticsInstance(
|
fakeAnalytics = getInitializedFakeAnalyticsInstance(
|
||||||
fs: memoryFileSystem,
|
fs: memoryFileSystem,
|
||||||
@ -44,14 +41,8 @@ void main() {
|
|||||||
|
|
||||||
testWithoutContext('skipped if files are missing', () async {
|
testWithoutContext('skipped if files are missing', () async {
|
||||||
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(macOSProject, testLogger, fakeAnalytics);
|
||||||
macOSProject,
|
|
||||||
testLogger,
|
|
||||||
testUsage,
|
|
||||||
fakeAnalytics,
|
|
||||||
);
|
|
||||||
await macosProjectMigration.migrate();
|
await macosProjectMigration.migrate();
|
||||||
expect(testUsage.events, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
expect(fakeAnalytics.sentEvents, isEmpty);
|
||||||
|
|
||||||
expect(xcodeProjectInfoFile.existsSync(), isFalse);
|
expect(xcodeProjectInfoFile.existsSync(), isFalse);
|
||||||
@ -69,14 +60,8 @@ void main() {
|
|||||||
final DateTime projectLastModified = xcodeProjectInfoFile.lastModifiedSync();
|
final DateTime projectLastModified = xcodeProjectInfoFile.lastModifiedSync();
|
||||||
|
|
||||||
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(macOSProject, testLogger, fakeAnalytics);
|
||||||
macOSProject,
|
|
||||||
testLogger,
|
|
||||||
testUsage,
|
|
||||||
fakeAnalytics,
|
|
||||||
);
|
|
||||||
await macosProjectMigration.migrate();
|
await macosProjectMigration.migrate();
|
||||||
expect(testUsage.events, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
expect(fakeAnalytics.sentEvents, isEmpty);
|
||||||
|
|
||||||
expect(xcodeProjectInfoFile.lastModifiedSync(), projectLastModified);
|
expect(xcodeProjectInfoFile.lastModifiedSync(), projectLastModified);
|
||||||
@ -92,12 +77,7 @@ shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.
|
|||||||
xcodeProjectInfoFile.writeAsStringSync(contents);
|
xcodeProjectInfoFile.writeAsStringSync(contents);
|
||||||
|
|
||||||
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(macOSProject, testLogger, fakeAnalytics);
|
||||||
macOSProject,
|
|
||||||
testLogger,
|
|
||||||
testUsage,
|
|
||||||
fakeAnalytics,
|
|
||||||
);
|
|
||||||
await macosProjectMigration.migrate();
|
await macosProjectMigration.migrate();
|
||||||
expect(xcodeProjectInfoFile.readAsStringSync(), contents);
|
expect(xcodeProjectInfoFile.readAsStringSync(), contents);
|
||||||
expect(testLogger.statusText, isEmpty);
|
expect(testLogger.statusText, isEmpty);
|
||||||
@ -116,14 +96,8 @@ keep this 2
|
|||||||
''');
|
''');
|
||||||
|
|
||||||
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(macOSProject, testLogger, fakeAnalytics);
|
||||||
macOSProject,
|
|
||||||
testLogger,
|
|
||||||
testUsage,
|
|
||||||
fakeAnalytics,
|
|
||||||
);
|
|
||||||
await macosProjectMigration.migrate();
|
await macosProjectMigration.migrate();
|
||||||
expect(testUsage.events, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
expect(fakeAnalytics.sentEvents, isEmpty);
|
||||||
|
|
||||||
expect(xcodeProjectInfoFile.readAsStringSync(), r'''
|
expect(xcodeProjectInfoFile.readAsStringSync(), r'''
|
||||||
@ -140,21 +114,12 @@ keep this 2
|
|||||||
''');
|
''');
|
||||||
|
|
||||||
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(macOSProject, testLogger, fakeAnalytics);
|
||||||
macOSProject,
|
|
||||||
testLogger,
|
|
||||||
testUsage,
|
|
||||||
fakeAnalytics,
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
macosProjectMigration.migrate,
|
macosProjectMigration.migrate,
|
||||||
throwsToolExit(message: 'Your Xcode project requires migration'),
|
throwsToolExit(message: 'Your Xcode project requires migration'),
|
||||||
);
|
);
|
||||||
expect(
|
|
||||||
testUsage.events,
|
|
||||||
contains(const TestUsageEvent('macos-migration', 'remove-frameworks', label: 'failure')),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -173,20 +138,11 @@ keep this 2
|
|||||||
''');
|
''');
|
||||||
|
|
||||||
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
final RemoveMacOSFrameworkLinkAndEmbeddingMigration macosProjectMigration =
|
||||||
RemoveMacOSFrameworkLinkAndEmbeddingMigration(
|
RemoveMacOSFrameworkLinkAndEmbeddingMigration(macOSProject, testLogger, fakeAnalytics);
|
||||||
macOSProject,
|
|
||||||
testLogger,
|
|
||||||
testUsage,
|
|
||||||
fakeAnalytics,
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
macosProjectMigration.migrate,
|
macosProjectMigration.migrate,
|
||||||
throwsToolExit(message: 'Your Xcode project requires migration'),
|
throwsToolExit(message: 'Your Xcode project requires migration'),
|
||||||
);
|
);
|
||||||
expect(
|
|
||||||
testUsage.events,
|
|
||||||
contains(const TestUsageEvent('macos-migration', 'remove-frameworks', label: 'failure')),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
|
@ -13,7 +13,6 @@ import 'package:flutter_tools/src/globals.dart' as globals;
|
|||||||
import 'package:flutter_tools/src/ios/devices.dart';
|
import 'package:flutter_tools/src/ios/devices.dart';
|
||||||
import 'package:flutter_tools/src/mdns_discovery.dart';
|
import 'package:flutter_tools/src/mdns_discovery.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:multicast_dns/multicast_dns.dart';
|
import 'package:multicast_dns/multicast_dns.dart';
|
||||||
import 'package:test/fake.dart';
|
import 'package:test/fake.dart';
|
||||||
import 'package:unified_analytics/unified_analytics.dart';
|
import 'package:unified_analytics/unified_analytics.dart';
|
||||||
@ -57,7 +56,6 @@ void main() {
|
|||||||
mdnsClient: emptyClient,
|
mdnsClient: emptyClient,
|
||||||
preliminaryMDnsClient: client,
|
preliminaryMDnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -88,7 +86,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -117,7 +114,6 @@ void main() {
|
|||||||
mdnsClient: emptyClient,
|
mdnsClient: emptyClient,
|
||||||
preliminaryMDnsClient: client,
|
preliminaryMDnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -141,7 +137,6 @@ void main() {
|
|||||||
mdnsClient: emptyClient,
|
mdnsClient: emptyClient,
|
||||||
preliminaryMDnsClient: client,
|
preliminaryMDnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -169,7 +164,6 @@ void main() {
|
|||||||
mdnsClient: emptyClient,
|
mdnsClient: emptyClient,
|
||||||
preliminaryMDnsClient: client,
|
preliminaryMDnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -181,7 +175,6 @@ void main() {
|
|||||||
mdnsClient: emptyClient,
|
mdnsClient: emptyClient,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -202,7 +195,6 @@ void main() {
|
|||||||
mdnsClient: emptyClient,
|
mdnsClient: emptyClient,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForAttach('', FakeIOSDevice());
|
final Uri? uri = await portDiscovery.getVMServiceUriForAttach('', FakeIOSDevice());
|
||||||
@ -229,7 +221,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final int? port = (await portDiscovery.queryForAttach())?.port;
|
final int? port = (await portDiscovery.queryForAttach())?.port;
|
||||||
@ -253,7 +244,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.queryForAttach();
|
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.queryForAttach();
|
||||||
@ -281,7 +271,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final int? port = (await portDiscovery.queryForAttach(applicationId: 'fiz'))?.port;
|
final int? port = (await portDiscovery.queryForAttach(applicationId: 'fiz'))?.port;
|
||||||
@ -310,7 +299,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final int? port = (await portDiscovery.queryForAttach(applicationId: 'bar'))?.port;
|
final int? port = (await portDiscovery.queryForAttach(applicationId: 'bar'))?.port;
|
||||||
@ -328,7 +316,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(() async => portDiscovery.queryForAttach(), throwsException);
|
expect(() async => portDiscovery.queryForAttach(), throwsException);
|
||||||
@ -349,7 +336,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForAttach(
|
final Uri? uri = await portDiscovery.getVMServiceUriForAttach(
|
||||||
@ -387,7 +373,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForAttach(
|
final Uri? uri = await portDiscovery.getVMServiceUriForAttach(
|
||||||
@ -425,7 +410,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForAttach(
|
final Uri? uri = await portDiscovery.getVMServiceUriForAttach(
|
||||||
@ -483,7 +467,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(
|
expect(
|
||||||
@ -516,7 +499,6 @@ void main() {
|
|||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
preliminaryMDnsClient: emptyClient,
|
preliminaryMDnsClient: emptyClient,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(
|
expect(
|
||||||
@ -536,7 +518,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -555,7 +536,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -578,7 +558,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -602,7 +581,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(
|
expect(
|
||||||
@ -627,7 +605,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -665,7 +642,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -702,7 +678,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForLaunch(
|
final Uri? uri = await portDiscovery.getVMServiceUriForLaunch(
|
||||||
@ -740,7 +715,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForLaunch(
|
final Uri? uri = await portDiscovery.getVMServiceUriForLaunch(
|
||||||
@ -778,7 +752,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final Uri? uri = await portDiscovery.getVMServiceUriForLaunch(
|
final Uri? uri = await portDiscovery.getVMServiceUriForLaunch(
|
||||||
@ -836,7 +809,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(
|
expect(
|
||||||
@ -872,7 +844,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -906,7 +877,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(
|
expect(
|
||||||
@ -922,7 +892,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: FakeMDnsClient(<PtrResourceRecord>[], <String, List<SrvResourceRecord>>{}),
|
mdnsClient: FakeMDnsClient(<PtrResourceRecord>[], <String, List<SrvResourceRecord>>{}),
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -933,7 +902,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: FakeMDnsClient(<PtrResourceRecord>[], <String, List<SrvResourceRecord>>{}),
|
mdnsClient: FakeMDnsClient(<PtrResourceRecord>[], <String, List<SrvResourceRecord>>{}),
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
expect(portDiscovery.deviceNameMatchesTargetName('My phone', 'My-Phone-2.local'), isFalse);
|
expect(portDiscovery.deviceNameMatchesTargetName('My phone', 'My-Phone-2.local'), isFalse);
|
||||||
@ -986,7 +954,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
||||||
@ -1048,7 +1015,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
||||||
@ -1087,7 +1053,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
||||||
@ -1132,7 +1097,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
||||||
@ -1179,7 +1143,6 @@ void main() {
|
|||||||
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
final MDnsVmServiceDiscovery portDiscovery = MDnsVmServiceDiscovery(
|
||||||
mdnsClient: client,
|
mdnsClient: client,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
flutterUsage: TestUsage(),
|
|
||||||
analytics: const NoOpAnalytics(),
|
analytics: const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
final MDnsVmServiceDiscoveryResult? result = await portDiscovery.firstMatchingVmService(
|
||||||
|
@ -313,21 +313,6 @@ void main() {
|
|||||||
final OperationResult result = await residentRunner.restart();
|
final OperationResult result = await residentRunner.restart();
|
||||||
expect(result.fatal, true);
|
expect(result.fatal, true);
|
||||||
expect(result.code, 1);
|
expect(result.code, 1);
|
||||||
expect(
|
|
||||||
(globals.flutterUsage as TestUsage).events,
|
|
||||||
contains(
|
|
||||||
TestUsageEvent(
|
|
||||||
'hot',
|
|
||||||
'exception',
|
|
||||||
parameters: CustomDimensions(
|
|
||||||
hotEventTargetPlatform: getNameForTargetPlatform(TargetPlatform.android_arm),
|
|
||||||
hotEventSdkName: 'Android',
|
|
||||||
hotEventEmulator: false,
|
|
||||||
hotEventFullRestart: false,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
(globals.analytics as FakeAnalytics).sentEvents,
|
(globals.analytics as FakeAnalytics).sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -398,21 +383,6 @@ void main() {
|
|||||||
contains('Unable to hot reload application due to an unrecoverable error'),
|
contains('Unable to hot reload application due to an unrecoverable error'),
|
||||||
);
|
);
|
||||||
|
|
||||||
expect(
|
|
||||||
(globals.flutterUsage as TestUsage).events,
|
|
||||||
contains(
|
|
||||||
TestUsageEvent(
|
|
||||||
'hot',
|
|
||||||
'reload-barred',
|
|
||||||
parameters: CustomDimensions(
|
|
||||||
hotEventTargetPlatform: getNameForTargetPlatform(TargetPlatform.android_arm),
|
|
||||||
hotEventSdkName: 'Android',
|
|
||||||
hotEventEmulator: false,
|
|
||||||
hotEventFullRestart: false,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -467,21 +437,6 @@ void main() {
|
|||||||
expect(result.fatal, true);
|
expect(result.fatal, true);
|
||||||
expect(result.code, 1);
|
expect(result.code, 1);
|
||||||
|
|
||||||
expect(
|
|
||||||
(globals.flutterUsage as TestUsage).events,
|
|
||||||
contains(
|
|
||||||
TestUsageEvent(
|
|
||||||
'hot',
|
|
||||||
'exception',
|
|
||||||
parameters: CustomDimensions(
|
|
||||||
hotEventTargetPlatform: getNameForTargetPlatform(TargetPlatform.android_arm),
|
|
||||||
hotEventSdkName: 'Android',
|
|
||||||
hotEventEmulator: false,
|
|
||||||
hotEventFullRestart: false,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -725,19 +680,11 @@ void main() {
|
|||||||
expect(result.fatal, false);
|
expect(result.fatal, false);
|
||||||
expect(result.code, 0);
|
expect(result.code, 0);
|
||||||
|
|
||||||
final TestUsageEvent event = (globals.flutterUsage as TestUsage).events.first;
|
final Event event = fakeAnalytics.sentEvents.first;
|
||||||
expect(event.category, 'hot');
|
expect(event.eventName.label, 'hot_runner_info');
|
||||||
expect(event.parameter, 'reload');
|
expect(event.eventData['label'], 'reload');
|
||||||
expect(
|
expect(
|
||||||
event.parameters?.hotEventTargetPlatform,
|
event.eventData['targetPlatform'],
|
||||||
getNameForTargetPlatform(TargetPlatform.android_arm),
|
|
||||||
);
|
|
||||||
|
|
||||||
final Event newEvent = fakeAnalytics.sentEvents.first;
|
|
||||||
expect(newEvent.eventName.label, 'hot_runner_info');
|
|
||||||
expect(newEvent.eventData['label'], 'reload');
|
|
||||||
expect(
|
|
||||||
newEvent.eventData['targetPlatform'],
|
|
||||||
getNameForTargetPlatform(TargetPlatform.android_arm),
|
getNameForTargetPlatform(TargetPlatform.android_arm),
|
||||||
);
|
);
|
||||||
}, overrides: <Type, Generator>{Usage: () => TestUsage()}),
|
}, overrides: <Type, Generator>{Usage: () => TestUsage()}),
|
||||||
@ -876,24 +823,14 @@ void main() {
|
|||||||
expect(result.fatal, false);
|
expect(result.fatal, false);
|
||||||
expect(result.code, 0);
|
expect(result.code, 0);
|
||||||
|
|
||||||
final TestUsageEvent event = (globals.flutterUsage as TestUsage).events.first;
|
|
||||||
expect(event.category, 'hot');
|
|
||||||
expect(event.parameter, 'restart');
|
|
||||||
expect(
|
|
||||||
event.parameters?.hotEventTargetPlatform,
|
|
||||||
getNameForTargetPlatform(TargetPlatform.android_arm),
|
|
||||||
);
|
|
||||||
expect(fakeVmServiceHost?.hasRemainingExpectations, false);
|
expect(fakeVmServiceHost?.hasRemainingExpectations, false);
|
||||||
|
|
||||||
// Parse out the event of interest since we may have timing events with
|
final List<Event> hotRunnerInfoEvents =
|
||||||
// the new analytics package
|
|
||||||
final List<Event> newEventList =
|
|
||||||
fakeAnalytics.sentEvents
|
fakeAnalytics.sentEvents
|
||||||
.where((Event e) => e.eventName.label == 'hot_runner_info')
|
.where((Event e) => e.eventName.label == 'hot_runner_info')
|
||||||
.toList();
|
.toList();
|
||||||
expect(newEventList, hasLength(1));
|
expect(hotRunnerInfoEvents, hasLength(1));
|
||||||
final Event newEvent = newEventList.first;
|
final Event newEvent = hotRunnerInfoEvents.first;
|
||||||
expect(newEvent.eventName.label, 'hot_runner_info');
|
|
||||||
expect(newEvent.eventData['label'], 'restart');
|
expect(newEvent.eventData['label'], 'restart');
|
||||||
expect(
|
expect(
|
||||||
newEvent.eventData['targetPlatform'],
|
newEvent.eventData['targetPlatform'],
|
||||||
@ -1092,21 +1029,6 @@ void main() {
|
|||||||
expect(result.fatal, true);
|
expect(result.fatal, true);
|
||||||
expect(result.code, 1);
|
expect(result.code, 1);
|
||||||
|
|
||||||
expect(
|
|
||||||
(globals.flutterUsage as TestUsage).events,
|
|
||||||
contains(
|
|
||||||
TestUsageEvent(
|
|
||||||
'hot',
|
|
||||||
'exception',
|
|
||||||
parameters: CustomDimensions(
|
|
||||||
hotEventTargetPlatform: getNameForTargetPlatform(TargetPlatform.android_arm),
|
|
||||||
hotEventSdkName: 'Android',
|
|
||||||
hotEventEmulator: false,
|
|
||||||
hotEventFullRestart: true,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
|
@ -18,7 +18,6 @@ import 'package:flutter_tools/src/features.dart';
|
|||||||
import 'package:flutter_tools/src/isolated/devfs_web.dart';
|
import 'package:flutter_tools/src/isolated/devfs_web.dart';
|
||||||
import 'package:flutter_tools/src/isolated/resident_web_runner.dart';
|
import 'package:flutter_tools/src/isolated/resident_web_runner.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:flutter_tools/src/resident_runner.dart';
|
import 'package:flutter_tools/src/resident_runner.dart';
|
||||||
import 'package:flutter_tools/src/vmservice.dart';
|
import 'package:flutter_tools/src/vmservice.dart';
|
||||||
import 'package:test/fake.dart';
|
import 'package:test/fake.dart';
|
||||||
@ -64,7 +63,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: getInitializedFakeAnalyticsInstance(
|
analytics: getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
@ -99,7 +97,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: getInitializedFakeAnalyticsInstance(
|
analytics: getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
@ -130,7 +127,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: getInitializedFakeAnalyticsInstance(
|
analytics: getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
@ -160,7 +156,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: getInitializedFakeAnalyticsInstance(
|
analytics: getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
@ -194,7 +189,6 @@ void main() {
|
|||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
systemClock: SystemClock.fixed(DateTime(0, 0, 0)),
|
||||||
usage: TestUsage(),
|
|
||||||
analytics: getInitializedFakeAnalyticsInstance(
|
analytics: getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
|
@ -27,7 +27,6 @@ import 'package:flutter_tools/src/globals.dart' as globals;
|
|||||||
import 'package:flutter_tools/src/isolated/devfs_web.dart';
|
import 'package:flutter_tools/src/isolated/devfs_web.dart';
|
||||||
import 'package:flutter_tools/src/isolated/resident_web_runner.dart';
|
import 'package:flutter_tools/src/isolated/resident_web_runner.dart';
|
||||||
import 'package:flutter_tools/src/project.dart';
|
import 'package:flutter_tools/src/project.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:flutter_tools/src/resident_devtools_handler.dart';
|
import 'package:flutter_tools/src/resident_devtools_handler.dart';
|
||||||
import 'package:flutter_tools/src/resident_runner.dart';
|
import 'package:flutter_tools/src/resident_runner.dart';
|
||||||
import 'package:flutter_tools/src/vmservice.dart';
|
import 'package:flutter_tools/src/vmservice.dart';
|
||||||
@ -89,7 +88,6 @@ void main() {
|
|||||||
late FakeVmServiceHost fakeVmServiceHost;
|
late FakeVmServiceHost fakeVmServiceHost;
|
||||||
late MemoryFileSystem fileSystem;
|
late MemoryFileSystem fileSystem;
|
||||||
late ProcessManager processManager;
|
late ProcessManager processManager;
|
||||||
late TestUsage testUsage;
|
|
||||||
late FakeAnalytics fakeAnalytics;
|
late FakeAnalytics fakeAnalytics;
|
||||||
|
|
||||||
// TODO(matanlurey): Remove after `explicit-package-dependencies` is enabled by default.
|
// TODO(matanlurey): Remove after `explicit-package-dependencies` is enabled by default.
|
||||||
@ -99,7 +97,6 @@ void main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
testUsage = TestUsage();
|
|
||||||
fileSystem = MemoryFileSystem.test();
|
fileSystem = MemoryFileSystem.test();
|
||||||
processManager = FakeProcessManager.any();
|
processManager = FakeProcessManager.any();
|
||||||
debugConnection = FakeDebugConnection();
|
debugConnection = FakeDebugConnection();
|
||||||
@ -146,7 +143,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
);
|
);
|
||||||
@ -176,7 +172,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug, startPaused: true),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug, startPaused: true),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
);
|
);
|
||||||
@ -198,7 +193,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
);
|
);
|
||||||
@ -210,7 +204,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.profile),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.profile),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
);
|
);
|
||||||
@ -350,7 +343,6 @@ void main() {
|
|||||||
stayResident: false,
|
stayResident: false,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
devtoolsHandler: createNoOpHandler,
|
devtoolsHandler: createNoOpHandler,
|
||||||
@ -379,7 +371,6 @@ void main() {
|
|||||||
stayResident: false,
|
stayResident: false,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
devtoolsHandler: createNoOpHandler,
|
devtoolsHandler: createNoOpHandler,
|
||||||
@ -595,7 +586,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug, startPaused: true),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug, startPaused: true),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
devtoolsHandler: createNoOpHandler,
|
devtoolsHandler: createNoOpHandler,
|
||||||
@ -674,21 +664,6 @@ void main() {
|
|||||||
expect(result.code, 0);
|
expect(result.code, 0);
|
||||||
expect(webDevFS.mainUri.toString(), contains('entrypoint.dart'));
|
expect(webDevFS.mainUri.toString(), contains('entrypoint.dart'));
|
||||||
|
|
||||||
// ensure that analytics are sent.
|
|
||||||
expect(testUsage.events, <TestUsageEvent>[
|
|
||||||
TestUsageEvent(
|
|
||||||
'hot',
|
|
||||||
'restart',
|
|
||||||
parameters: CustomDimensions.fromMap(<String, String>{
|
|
||||||
'cd27': 'web-javascript',
|
|
||||||
'cd28': '',
|
|
||||||
'cd29': 'false',
|
|
||||||
'cd30': 'true',
|
|
||||||
'cd13': '0',
|
|
||||||
'cd48': 'false',
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -702,9 +677,6 @@ void main() {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
expect(testUsage.timings, const <TestTimingEvent>[
|
|
||||||
TestTimingEvent('hot', 'web-incremental-restart', Duration.zero),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -717,7 +689,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
overrides: <Type, Generator>{
|
overrides: <Type, Generator>{
|
||||||
Usage: () => testUsage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
@ -781,21 +752,6 @@ void main() {
|
|||||||
expect(logger.statusText, contains('Restarted application in'));
|
expect(logger.statusText, contains('Restarted application in'));
|
||||||
expect(result.code, 0);
|
expect(result.code, 0);
|
||||||
|
|
||||||
// ensure that analytics are sent.
|
|
||||||
expect(testUsage.events, <TestUsageEvent>[
|
|
||||||
TestUsageEvent(
|
|
||||||
'hot',
|
|
||||||
'restart',
|
|
||||||
parameters: CustomDimensions.fromMap(<String, String>{
|
|
||||||
'cd27': 'web-javascript',
|
|
||||||
'cd28': '',
|
|
||||||
'cd29': 'false',
|
|
||||||
'cd30': 'true',
|
|
||||||
'cd13': '0',
|
|
||||||
'cd48': 'false',
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -809,9 +765,6 @@ void main() {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
expect(testUsage.timings, const <TestTimingEvent>[
|
|
||||||
TestTimingEvent('hot', 'web-incremental-restart', Duration.zero),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -824,7 +777,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
overrides: <Type, Generator>{
|
overrides: <Type, Generator>{
|
||||||
Usage: () => testUsage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
@ -857,12 +809,9 @@ void main() {
|
|||||||
expect(result.code, 0);
|
expect(result.code, 0);
|
||||||
|
|
||||||
// web-server device does not send restart analytics
|
// web-server device does not send restart analytics
|
||||||
expect(testUsage.events, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
expect(fakeAnalytics.sentEvents, isEmpty);
|
||||||
expect(testUsage.timings, isEmpty);
|
|
||||||
},
|
},
|
||||||
overrides: <Type, Generator>{
|
overrides: <Type, Generator>{
|
||||||
Usage: () => testUsage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
@ -898,12 +847,9 @@ void main() {
|
|||||||
unawaited(residentWebRunner.run(connectionInfoCompleter: connectionInfoCompleter));
|
unawaited(residentWebRunner.run(connectionInfoCompleter: connectionInfoCompleter));
|
||||||
|
|
||||||
expect(await residentWebRunner.run(), 1);
|
expect(await residentWebRunner.run(), 1);
|
||||||
expect(testUsage.events, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
expect(fakeAnalytics.sentEvents, isEmpty);
|
||||||
expect(testUsage.timings, isEmpty);
|
|
||||||
},
|
},
|
||||||
overrides: <Type, Generator>{
|
overrides: <Type, Generator>{
|
||||||
Usage: () => testUsage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
@ -969,12 +915,9 @@ void main() {
|
|||||||
|
|
||||||
expect(result.code, 1);
|
expect(result.code, 1);
|
||||||
expect(result.message, contains('Failed to recompile application.'));
|
expect(result.message, contains('Failed to recompile application.'));
|
||||||
expect(testUsage.events, isEmpty);
|
|
||||||
expect(fakeAnalytics.sentEvents, isEmpty);
|
expect(fakeAnalytics.sentEvents, isEmpty);
|
||||||
expect(testUsage.timings, isEmpty);
|
|
||||||
},
|
},
|
||||||
overrides: <Type, Generator>{
|
overrides: <Type, Generator>{
|
||||||
Usage: () => testUsage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
FileSystem: () => fileSystem,
|
FileSystem: () => fileSystem,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
@ -1187,7 +1130,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
devtoolsHandler: createNoOpHandler,
|
devtoolsHandler: createNoOpHandler,
|
||||||
@ -1233,7 +1175,6 @@ void main() {
|
|||||||
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
debuggingOptions: DebuggingOptions.enabled(BuildInfo.debug),
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
devtoolsHandler: createNoOpHandler,
|
devtoolsHandler: createNoOpHandler,
|
||||||
@ -1276,7 +1217,6 @@ void main() {
|
|||||||
stayResident: false,
|
stayResident: false,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
logger: BufferLogger.test(),
|
logger: BufferLogger.test(),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: globals.systemClock,
|
systemClock: globals.systemClock,
|
||||||
devtoolsHandler: createNoOpHandler,
|
devtoolsHandler: createNoOpHandler,
|
||||||
@ -1568,7 +1508,6 @@ ResidentRunner setUpResidentRunner(
|
|||||||
flutterDevice,
|
flutterDevice,
|
||||||
flutterProject: FlutterProject.fromDirectoryTest(globals.fs.currentDirectory),
|
flutterProject: FlutterProject.fromDirectoryTest(globals.fs.currentDirectory),
|
||||||
debuggingOptions: debuggingOptions ?? DebuggingOptions.enabled(BuildInfo.debug),
|
debuggingOptions: debuggingOptions ?? DebuggingOptions.enabled(BuildInfo.debug),
|
||||||
usage: globals.flutterUsage,
|
|
||||||
analytics: globals.analytics,
|
analytics: globals.analytics,
|
||||||
systemClock: systemClock ?? SystemClock.fixed(DateTime.now()),
|
systemClock: systemClock ?? SystemClock.fixed(DateTime.now()),
|
||||||
fileSystem: globals.fs,
|
fileSystem: globals.fs,
|
||||||
|
@ -8,7 +8,6 @@ import 'package:flutter_tools/src/build_info.dart';
|
|||||||
import 'package:flutter_tools/src/compile.dart';
|
import 'package:flutter_tools/src/compile.dart';
|
||||||
import 'package:flutter_tools/src/devfs.dart';
|
import 'package:flutter_tools/src/devfs.dart';
|
||||||
import 'package:flutter_tools/src/device.dart';
|
import 'package:flutter_tools/src/device.dart';
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:flutter_tools/src/resident_devtools_handler.dart';
|
import 'package:flutter_tools/src/resident_devtools_handler.dart';
|
||||||
import 'package:flutter_tools/src/resident_runner.dart';
|
import 'package:flutter_tools/src/resident_runner.dart';
|
||||||
import 'package:flutter_tools/src/run_hot.dart';
|
import 'package:flutter_tools/src/run_hot.dart';
|
||||||
@ -32,7 +31,6 @@ void main() {
|
|||||||
'flutter-sdk',
|
'flutter-sdk',
|
||||||
false,
|
false,
|
||||||
'test-reason',
|
'test-reason',
|
||||||
TestUsage(),
|
|
||||||
const NoOpAnalytics(),
|
const NoOpAnalytics(),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -10,7 +10,6 @@ import 'package:flutter_tools/src/base/platform.dart';
|
|||||||
import 'package:flutter_tools/src/base/terminal.dart';
|
import 'package:flutter_tools/src/base/terminal.dart';
|
||||||
import 'package:flutter_tools/src/cache.dart';
|
import 'package:flutter_tools/src/cache.dart';
|
||||||
import 'package:flutter_tools/src/globals.dart' as globals;
|
import 'package:flutter_tools/src/globals.dart' as globals;
|
||||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
|
||||||
import 'package:flutter_tools/src/resident_runner.dart';
|
import 'package:flutter_tools/src/resident_runner.dart';
|
||||||
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
import 'package:flutter_tools/src/runner/flutter_command.dart';
|
||||||
import 'package:flutter_tools/src/runner/flutter_command_runner.dart';
|
import 'package:flutter_tools/src/runner/flutter_command_runner.dart';
|
||||||
@ -30,7 +29,6 @@ void main() {
|
|||||||
group('FlutterCommandRunner', () {
|
group('FlutterCommandRunner', () {
|
||||||
late MemoryFileSystem fileSystem;
|
late MemoryFileSystem fileSystem;
|
||||||
late Platform platform;
|
late Platform platform;
|
||||||
late TestUsage testUsage;
|
|
||||||
late FakeAnalytics fakeAnalytics;
|
late FakeAnalytics fakeAnalytics;
|
||||||
|
|
||||||
setUpAll(() {
|
setUpAll(() {
|
||||||
@ -42,7 +40,6 @@ void main() {
|
|||||||
fileSystem.directory(_kFlutterRoot).createSync(recursive: true);
|
fileSystem.directory(_kFlutterRoot).createSync(recursive: true);
|
||||||
fileSystem.directory(_kProjectRoot).createSync(recursive: true);
|
fileSystem.directory(_kProjectRoot).createSync(recursive: true);
|
||||||
fileSystem.currentDirectory = _kProjectRoot;
|
fileSystem.currentDirectory = _kProjectRoot;
|
||||||
testUsage = TestUsage();
|
|
||||||
fakeAnalytics = getInitializedFakeAnalyticsInstance(
|
fakeAnalytics = getInitializedFakeAnalyticsInstance(
|
||||||
fs: fileSystem,
|
fs: fileSystem,
|
||||||
fakeFlutterVersion: FakeFlutterVersion(),
|
fakeFlutterVersion: FakeFlutterVersion(),
|
||||||
@ -210,7 +207,6 @@ void main() {
|
|||||||
|
|
||||||
await runner.run(<String>['--version']);
|
await runner.run(<String>['--version']);
|
||||||
expect(version.didFetchTagsAndUpdate, true);
|
expect(version.didFetchTagsAndUpdate, true);
|
||||||
expect(testUsage.commands, contains(const TestUsageCommand('version')));
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -228,7 +224,6 @@ void main() {
|
|||||||
Platform: () => platform,
|
Platform: () => platform,
|
||||||
FlutterVersion: () => FakeFlutterVersion(),
|
FlutterVersion: () => FakeFlutterVersion(),
|
||||||
OutputPreferences: () => OutputPreferences.test(),
|
OutputPreferences: () => OutputPreferences.test(),
|
||||||
Usage: () => testUsage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
@ -19,14 +19,11 @@ import 'package:flutter_tools/src/base/user_messages.dart';
|
|||||||
import 'package:flutter_tools/src/build_info.dart';
|
import 'package:flutter_tools/src/build_info.dart';
|
||||||
import 'package:flutter_tools/src/cache.dart';
|
import 'package:flutter_tools/src/cache.dart';
|
||||||
import 'package:flutter_tools/src/commands/run.dart';
|
import 'package:flutter_tools/src/commands/run.dart';
|
||||||
import 'package:flutter_tools/src/dart/pub.dart';
|
|
||||||
import 'package:flutter_tools/src/device.dart';
|
import 'package:flutter_tools/src/device.dart';
|
||||||
import 'package:flutter_tools/src/features.dart';
|
|
||||||
import 'package:flutter_tools/src/globals.dart' as globals;
|
import 'package:flutter_tools/src/globals.dart' as globals;
|
||||||
import 'package:flutter_tools/src/pre_run_validator.dart';
|
import 'package:flutter_tools/src/pre_run_validator.dart';
|
||||||
import 'package:flutter_tools/src/project.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:meta/meta.dart';
|
||||||
import 'package:test/fake.dart';
|
import 'package:test/fake.dart';
|
||||||
import 'package:unified_analytics/testing.dart';
|
import 'package:unified_analytics/testing.dart';
|
||||||
import 'package:unified_analytics/unified_analytics.dart';
|
import 'package:unified_analytics/unified_analytics.dart';
|
||||||
@ -34,21 +31,13 @@ import 'package:unified_analytics/unified_analytics.dart';
|
|||||||
import '../../src/common.dart';
|
import '../../src/common.dart';
|
||||||
import '../../src/context.dart';
|
import '../../src/context.dart';
|
||||||
import '../../src/fake_devices.dart';
|
import '../../src/fake_devices.dart';
|
||||||
import '../../src/fake_pub_deps.dart';
|
|
||||||
import '../../src/fakes.dart';
|
import '../../src/fakes.dart';
|
||||||
import '../../src/test_flutter_command_runner.dart';
|
import '../../src/test_flutter_command_runner.dart';
|
||||||
import 'utils.dart';
|
import 'utils.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
// TODO(matanlurey): Remove after `explicit-package-dependencies` is enabled by default.
|
|
||||||
// See https://github.com/flutter/flutter/issues/160257 for details.
|
|
||||||
FeatureFlags enableExplicitPackageDependencies() {
|
|
||||||
return TestFeatureFlags(isExplicitPackageDependenciesEnabled: true);
|
|
||||||
}
|
|
||||||
|
|
||||||
group('Flutter Command', () {
|
group('Flutter Command', () {
|
||||||
late FakeCache cache;
|
late FakeCache cache;
|
||||||
late TestUsage usage;
|
|
||||||
late FakeAnalytics fakeAnalytics;
|
late FakeAnalytics fakeAnalytics;
|
||||||
late FakeClock clock;
|
late FakeClock clock;
|
||||||
late FakeProcessInfo processInfo;
|
late FakeProcessInfo processInfo;
|
||||||
@ -66,7 +55,6 @@ void main() {
|
|||||||
setUp(() {
|
setUp(() {
|
||||||
Cache.disableLocking();
|
Cache.disableLocking();
|
||||||
cache = FakeCache();
|
cache = FakeCache();
|
||||||
usage = TestUsage();
|
|
||||||
clock = FakeClock();
|
clock = FakeClock();
|
||||||
processInfo = FakeProcessInfo();
|
processInfo = FakeProcessInfo();
|
||||||
processInfo.maxRss = 10;
|
processInfo.maxRss = 10;
|
||||||
@ -237,6 +225,7 @@ void main() {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@isTest
|
||||||
void testUsingCommandContext(String testName, dynamic Function() testBody) {
|
void testUsingCommandContext(String testName, dynamic Function() testBody) {
|
||||||
testUsingContext(
|
testUsingContext(
|
||||||
testName,
|
testName,
|
||||||
@ -246,7 +235,6 @@ void main() {
|
|||||||
ProcessInfo: () => processInfo,
|
ProcessInfo: () => processInfo,
|
||||||
ProcessManager: () => processManager,
|
ProcessManager: () => processManager,
|
||||||
SystemClock: () => clock,
|
SystemClock: () => clock,
|
||||||
Usage: () => usage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -263,10 +251,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
await flutterCommand.run();
|
await flutterCommand.run();
|
||||||
|
|
||||||
expect(usage.events, <TestUsageEvent>[
|
|
||||||
const TestUsageEvent('tool-command-result', 'dummy', label: 'success'),
|
|
||||||
const TestUsageEvent('tool-command-max-rss', 'dummy', label: 'success', value: 10),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -291,10 +275,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
await flutterCommand.run();
|
await flutterCommand.run();
|
||||||
|
|
||||||
expect(usage.events, <TestUsageEvent>[
|
|
||||||
const TestUsageEvent('tool-command-result', 'dummy', label: 'warning'),
|
|
||||||
const TestUsageEvent('tool-command-max-rss', 'dummy', label: 'warning', value: 10),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -318,10 +298,6 @@ void main() {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
await expectLater(() => flutterCommand.run(), throwsToolExit());
|
await expectLater(() => flutterCommand.run(), throwsToolExit());
|
||||||
expect(usage.events, <TestUsageEvent>[
|
|
||||||
const TestUsageEvent('tool-command-result', 'dummy', label: 'fail'),
|
|
||||||
const TestUsageEvent('tool-command-max-rss', 'dummy', label: 'fail', value: 10),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -430,10 +406,6 @@ void main() {
|
|||||||
signalController.add(mockSignal);
|
signalController.add(mockSignal);
|
||||||
await completer.future;
|
await completer.future;
|
||||||
|
|
||||||
expect(usage.events, <TestUsageEvent>[
|
|
||||||
const TestUsageEvent('tool-command-result', 'dummy', label: 'killed'),
|
|
||||||
const TestUsageEvent('tool-command-max-rss', 'dummy', label: 'killed', value: 10),
|
|
||||||
]);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -456,7 +428,6 @@ void main() {
|
|||||||
exitSignals: <ProcessSignal>[signalUnderTest],
|
exitSignals: <ProcessSignal>[signalUnderTest],
|
||||||
),
|
),
|
||||||
SystemClock: () => clock,
|
SystemClock: () => clock,
|
||||||
Usage: () => usage,
|
|
||||||
Analytics: () => fakeAnalytics,
|
Analytics: () => fakeAnalytics,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@ -499,7 +470,6 @@ void main() {
|
|||||||
subForSigTerm: signalUnderTest,
|
subForSigTerm: signalUnderTest,
|
||||||
exitSignals: <ProcessSignal>[signalUnderTest],
|
exitSignals: <ProcessSignal>[signalUnderTest],
|
||||||
),
|
),
|
||||||
Usage: () => usage,
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@ -511,12 +481,6 @@ void main() {
|
|||||||
final DummyFlutterCommand flutterCommand = DummyFlutterCommand();
|
final DummyFlutterCommand flutterCommand = DummyFlutterCommand();
|
||||||
await flutterCommand.run();
|
await flutterCommand.run();
|
||||||
|
|
||||||
expect(
|
|
||||||
usage.timings,
|
|
||||||
contains(
|
|
||||||
const TestTimingEvent('flutter', 'dummy', Duration(milliseconds: 1000), label: 'fail'),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -537,8 +501,6 @@ void main() {
|
|||||||
final DummyFlutterCommand flutterCommand = DummyFlutterCommand(noUsagePath: true);
|
final DummyFlutterCommand flutterCommand = DummyFlutterCommand(noUsagePath: true);
|
||||||
await flutterCommand.run();
|
await flutterCommand.run();
|
||||||
|
|
||||||
expect(usage.timings, isEmpty);
|
|
||||||
// Iterate through and count all the [Event.timing] instances
|
|
||||||
int timingEventCounts = 0;
|
int timingEventCounts = 0;
|
||||||
for (final Event e in fakeAnalytics.sentEvents) {
|
for (final Event e in fakeAnalytics.sentEvents) {
|
||||||
if (e.eventName == DashEvent.timing) {
|
if (e.eventName == DashEvent.timing) {
|
||||||
@ -570,17 +532,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
await flutterCommand.run();
|
await flutterCommand.run();
|
||||||
|
|
||||||
expect(
|
|
||||||
usage.timings,
|
|
||||||
contains(
|
|
||||||
const TestTimingEvent(
|
|
||||||
'flutter',
|
|
||||||
'dummy',
|
|
||||||
Duration(milliseconds: 500),
|
|
||||||
label: 'success-blah1-blah2-blah3',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -605,12 +556,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
await expectLater(() => flutterCommand.run(), throwsToolExit());
|
await expectLater(() => flutterCommand.run(), throwsToolExit());
|
||||||
expect(
|
|
||||||
usage.timings,
|
|
||||||
contains(
|
|
||||||
const TestTimingEvent('flutter', 'dummy', Duration(milliseconds: 1000), label: 'fail'),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
contains(
|
contains(
|
||||||
@ -624,66 +569,6 @@ void main() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext(
|
|
||||||
'reports null safety analytics when reportNullSafety is true',
|
|
||||||
() async {
|
|
||||||
globals.fs.file('lib/main.dart')
|
|
||||||
..createSync(recursive: true)
|
|
||||||
..writeAsStringSync('// @dart=2.12');
|
|
||||||
globals.fs.file('pubspec.yaml').writeAsStringSync('name: example\n');
|
|
||||||
globals.fs.file('.dart_tool/package_config.json')
|
|
||||||
..createSync(recursive: true)
|
|
||||||
..writeAsStringSync(r'''
|
|
||||||
{
|
|
||||||
"configVersion": 2,
|
|
||||||
"packages": [
|
|
||||||
{
|
|
||||||
"name": "example",
|
|
||||||
"rootUri": "../",
|
|
||||||
"packageUri": "lib/",
|
|
||||||
"languageVersion": "2.12"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"generated": "2020-12-02T19:30:53.862346Z",
|
|
||||||
"generator": "pub",
|
|
||||||
"generatorVersion": "2.12.0-76.0.dev"
|
|
||||||
}
|
|
||||||
''');
|
|
||||||
final FakeReportingNullSafetyCommand command = FakeReportingNullSafetyCommand();
|
|
||||||
final CommandRunner<void> runner = createTestCommandRunner(command);
|
|
||||||
|
|
||||||
await runner.run(<String>['test']);
|
|
||||||
|
|
||||||
expect(
|
|
||||||
usage.events,
|
|
||||||
containsAll(<TestUsageEvent>[
|
|
||||||
const TestUsageEvent(
|
|
||||||
NullSafetyAnalysisEvent.kNullSafetyCategory,
|
|
||||||
'runtime-mode',
|
|
||||||
label: 'NullSafetyMode.sound',
|
|
||||||
),
|
|
||||||
TestUsageEvent(
|
|
||||||
NullSafetyAnalysisEvent.kNullSafetyCategory,
|
|
||||||
'stats',
|
|
||||||
parameters: CustomDimensions.fromMap(<String, String>{'cd49': '1', 'cd50': '1'}),
|
|
||||||
),
|
|
||||||
const TestUsageEvent(
|
|
||||||
NullSafetyAnalysisEvent.kNullSafetyCategory,
|
|
||||||
'language-version',
|
|
||||||
label: '2.12',
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
overrides: <Type, Generator>{
|
|
||||||
Pub: () => FakePub(),
|
|
||||||
Usage: () => usage,
|
|
||||||
FileSystem: () => fileSystem,
|
|
||||||
ProcessManager: () => FakeProcessManager.any(),
|
|
||||||
FeatureFlags: enableExplicitPackageDependencies,
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
testUsingContext(
|
testUsingContext(
|
||||||
'use packagesPath to generate BuildInfo',
|
'use packagesPath to generate BuildInfo',
|
||||||
() async {
|
() async {
|
||||||
@ -1518,32 +1403,6 @@ class FakeTargetCommand extends FlutterCommand {
|
|||||||
String get name => 'test';
|
String get name => 'test';
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakeReportingNullSafetyCommand extends FlutterCommand {
|
|
||||||
FakeReportingNullSafetyCommand() {
|
|
||||||
argParser.addFlag('debug');
|
|
||||||
argParser.addFlag('release');
|
|
||||||
argParser.addFlag('jit-release');
|
|
||||||
argParser.addFlag('profile');
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get description => 'test';
|
|
||||||
|
|
||||||
@override
|
|
||||||
String get name => 'test';
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool get shouldRunPub => true;
|
|
||||||
|
|
||||||
@override
|
|
||||||
bool get reportNullSafety => true;
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<FlutterCommandResult> runCommand() async {
|
|
||||||
return FlutterCommandResult.success();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FakeDdsCommand extends FlutterCommand {
|
class FakeDdsCommand extends FlutterCommand {
|
||||||
FakeDdsCommand() {
|
FakeDdsCommand() {
|
||||||
addDdsOptions(verboseHelp: false);
|
addDdsOptions(verboseHelp: false);
|
||||||
@ -1617,25 +1476,6 @@ class FakeClock extends Fake implements SystemClock {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakePub extends Fake implements Pub {
|
|
||||||
@override
|
|
||||||
Future<void> get({
|
|
||||||
required PubContext context,
|
|
||||||
required FlutterProject project,
|
|
||||||
bool upgrade = false,
|
|
||||||
bool offline = false,
|
|
||||||
String? flutterRootOverride,
|
|
||||||
bool checkUpToDate = false,
|
|
||||||
bool shouldSkipThirdPartyGenerator = true,
|
|
||||||
PubOutputMode outputMode = PubOutputMode.all,
|
|
||||||
}) async {}
|
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Map<String, Object?>> deps(FlutterProject project) {
|
|
||||||
return FakePubWithPrimedDeps().deps(project);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class _TestDeviceManager extends DeviceManager {
|
class _TestDeviceManager extends DeviceManager {
|
||||||
_TestDeviceManager({required super.logger});
|
_TestDeviceManager({required super.logger});
|
||||||
List<Device> devices = <Device>[];
|
List<Device> devices = <Device>[];
|
||||||
|
@ -80,7 +80,6 @@ void main() {
|
|||||||
logger: logger,
|
logger: logger,
|
||||||
processManager: FakeProcessManager.any(),
|
processManager: FakeProcessManager.any(),
|
||||||
buildSystem: buildSystem,
|
buildSystem: buildSystem,
|
||||||
usage: testUsage,
|
|
||||||
flutterVersion: flutterVersion,
|
flutterVersion: flutterVersion,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
@ -104,22 +103,6 @@ void main() {
|
|||||||
// Runs ScrubGeneratedPluginRegistrant migrator.
|
// Runs ScrubGeneratedPluginRegistrant migrator.
|
||||||
expect(logger.traceText, contains('generated_plugin_registrant.dart not found. Skipping.'));
|
expect(logger.traceText, contains('generated_plugin_registrant.dart not found. Skipping.'));
|
||||||
|
|
||||||
// Sends build config event
|
|
||||||
expect(
|
|
||||||
testUsage.events,
|
|
||||||
unorderedEquals(<TestUsageEvent>[
|
|
||||||
const TestUsageEvent(
|
|
||||||
'build',
|
|
||||||
'web',
|
|
||||||
label: 'web-compile',
|
|
||||||
parameters: CustomDimensions(
|
|
||||||
buildEventSettings:
|
|
||||||
'optimizationLevel: 0; web-renderer: skwasm,canvaskit; web-target: wasm,js;',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
);
|
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
fakeAnalytics.sentEvents,
|
fakeAnalytics.sentEvents,
|
||||||
containsAll(<Event>[
|
containsAll(<Event>[
|
||||||
@ -131,10 +114,6 @@ void main() {
|
|||||||
]),
|
]),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Sends timing event.
|
|
||||||
final TestTimingEvent timingEvent = testUsage.timings.single;
|
|
||||||
expect(timingEvent.category, 'build');
|
|
||||||
expect(timingEvent.variableName, 'dual-compile');
|
|
||||||
expect(
|
expect(
|
||||||
analyticsTimingEventExists(
|
analyticsTimingEventExists(
|
||||||
sentEvents: fakeAnalytics.sentEvents,
|
sentEvents: fakeAnalytics.sentEvents,
|
||||||
@ -171,7 +150,6 @@ void main() {
|
|||||||
logger: logger,
|
logger: logger,
|
||||||
processManager: FakeProcessManager.any(),
|
processManager: FakeProcessManager.any(),
|
||||||
buildSystem: buildSystem,
|
buildSystem: buildSystem,
|
||||||
usage: testUsage,
|
|
||||||
flutterVersion: flutterVersion,
|
flutterVersion: flutterVersion,
|
||||||
fileSystem: fileSystem,
|
fileSystem: fileSystem,
|
||||||
analytics: fakeAnalytics,
|
analytics: fakeAnalytics,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user