Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v9]: Replace custom Platform & PlatformChecker with package platform #2729

Draft
wants to merge 3 commits into
base: v9
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions dart/lib/src/load_dart_debug_images_integration.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
import 'dart:typed_data';

import 'package:meta/meta.dart';

import '../sentry.dart';
import 'event_processor.dart';
import 'hint.dart';
import 'hub.dart';
import 'integration.dart';
import 'protocol/debug_image.dart';
import 'protocol/debug_meta.dart';
import 'protocol/sentry_event.dart';
import 'protocol/sentry_level.dart';
import 'protocol/sentry_stack_trace.dart';
import 'sentry_options.dart';

class LoadDartDebugImagesIntegration extends Integration<SentryOptions> {
@override
Expand Down Expand Up @@ -87,7 +95,7 @@ class LoadImageIntegrationEventProcessor implements EventProcessor {

if (platform.isAndroid || platform.isWindows) {
type = 'elf';
debugId = _convertBuildIdToDebugId(stackTrace.buildId!, platform.endian);
debugId = _convertBuildIdToDebugId(stackTrace.buildId!, Endian.host);
if (platform.isAndroid) {
codeFile = 'libapp.so';
} else if (platform.isWindows) {
Expand Down
21 changes: 2 additions & 19 deletions dart/lib/src/platform/_io_platform.dart
Original file line number Diff line number Diff line change
@@ -1,20 +1,3 @@
import 'dart:io' as io show Platform;
import 'package:platform/platform.dart';

import 'platform.dart';

const Platform instance = IOPlatform();

/// [Platform] implementation that delegates directly to `dart:io`.
class IOPlatform extends Platform {
/// Creates a new [IOPlatform].
const IOPlatform();

@override
String get operatingSystem => io.Platform.operatingSystem;

@override
String get operatingSystemVersion => io.Platform.operatingSystemVersion;

@override
String get localHostname => io.Platform.localHostname;
}
const Platform instance = LocalPlatform();
51 changes: 49 additions & 2 deletions dart/lib/src/platform/_web_platform.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'package:platform/platform.dart';
import 'package:web/web.dart' as web;

import 'platform.dart';

const Platform instance = WebPlatform();

/// [Platform] implementation that delegates to `dart:web`.
Expand Down Expand Up @@ -48,4 +47,52 @@ class WebPlatform extends Platform {
}
return 'android';
}

@override
// TODO: implement environment
Map<String, String> get environment => throw UnimplementedError();

@override
// TODO: implement executable
String get executable => throw UnimplementedError();

@override
// TODO: implement executableArguments
List<String> get executableArguments => throw UnimplementedError();

@override
// TODO: implement localeName
String get localeName => throw UnimplementedError();

@override
// TODO: implement numberOfProcessors
int get numberOfProcessors => throw UnimplementedError();

@override
// TODO: implement packageConfig
String? get packageConfig => throw UnimplementedError();

@override
// TODO: implement pathSeparator
String get pathSeparator => throw UnimplementedError();

@override
// TODO: implement resolvedExecutable
String get resolvedExecutable => throw UnimplementedError();

@override
// TODO: implement script
Uri get script => throw UnimplementedError();

@override
// TODO: implement stdinSupportsAnsi
bool get stdinSupportsAnsi => throw UnimplementedError();

@override
// TODO: implement stdoutSupportsAnsi
bool get stdoutSupportsAnsi => throw UnimplementedError();

@override
// TODO: implement version
String get version => throw UnimplementedError();
}
37 changes: 1 addition & 36 deletions dart/lib/src/platform/platform.dart
Original file line number Diff line number Diff line change
@@ -1,41 +1,6 @@
import 'dart:typed_data';
import 'package:platform/platform.dart';

import '_io_platform.dart' if (dart.library.js_interop) '_web_platform.dart'
as platform;

const Platform instance = platform.instance;

abstract class Platform {
const Platform();

/// A string (`linux`, `macos`, `windows`, `android`, `ios`, or `fuchsia`)
/// representing the operating system.
String get operatingSystem;

/// A string representing the version of the operating system or platform.
String get operatingSystemVersion;

/// Get the local hostname for the system.
String get localHostname;

/// Endianness of this platform.
Endian get endian => Endian.host;

/// True if the operating system is Linux.
bool get isLinux => (operatingSystem == 'linux');

/// True if the operating system is OS X.
bool get isMacOS => (operatingSystem == 'macos');

/// True if the operating system is Windows.
bool get isWindows => (operatingSystem == 'windows');

/// True if the operating system is Android.
bool get isAndroid => (operatingSystem == 'android');

/// True if the operating system is iOS.
bool get isIOS => (operatingSystem == 'ios');

/// True if the operating system is Fuchsia
bool get isFuchsia => (operatingSystem == 'fuchsia');
}
6 changes: 3 additions & 3 deletions dart/lib/src/platform_checker.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import 'dart:async';

import 'platform/platform.dart';
import 'package:platform/platform.dart';
import 'platform/platform.dart' as pf;

/// Helper to check in which environment the library is running.
/// The environment checks (release/debug/profile) are mutually exclusive.
class PlatformChecker {
static const _jsUtil = 'dart.library.js_util';

PlatformChecker({
this.platform = instance,
this.platform = pf.instance,
bool? isWeb,
bool? isRootZone,
}) : isWeb = isWeb ?? _isWebWithWasmSupport(),
Expand Down
1 change: 1 addition & 0 deletions dart/lib/src/protocol/sdk_version.dart
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ class SdkVersion {
final json = AccessAwareMap(data);
final packagesJson = json['packages'] as List<dynamic>?;
final integrationsJson = json['integrations'] as List<dynamic>?;

return SdkVersion(
name: json['name'],
version: json['version'],
Expand Down
1 change: 1 addition & 0 deletions dart/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ dependencies:
uuid: '>=3.0.0 <5.0.0'
collection: ^1.16.0
web: ^1.1.0
platform: ^3.1.6

dev_dependencies:
build_runner: ^2.3.0
Expand Down
1 change: 1 addition & 0 deletions dart/test/example_web_compile_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ void main() {
}

/// Runs [command] with command's stdout and stderr being forwrarded to
///
/// test runner's respective streams. It buffers stdout and returns it.
///
/// Returns [_CommandResult] with exitCode and stdout as a single sting
Expand Down
41 changes: 12 additions & 29 deletions dart/test/mocks/mock_platform.dart
Original file line number Diff line number Diff line change
@@ -1,40 +1,23 @@
import 'dart:typed_data';
import 'package:platform/platform.dart';

import 'package:sentry/src/platform/platform.dart';

import 'no_such_method_provider.dart';

class MockPlatform extends Platform with NoSuchMethodProvider {
MockPlatform({String? os, Endian? endian})
: operatingSystem = os ?? '',
endian = endian ?? Endian.host;

factory MockPlatform.android() {
return MockPlatform(os: 'android');
extension MockPlatform on FakePlatform {
static Platform android() {
return FakePlatform(operatingSystem: 'android');
}

factory MockPlatform.iOS() {
return MockPlatform(os: 'ios');
static Platform iOS() {
return FakePlatform(operatingSystem: 'ios');
}

factory MockPlatform.macOS() {
return MockPlatform(os: 'macos');
static Platform macOS() {
return FakePlatform(operatingSystem: 'macos');
}

factory MockPlatform.linux() {
return MockPlatform(os: 'linux');
static Platform linux() {
return FakePlatform(operatingSystem: 'linux');
}

factory MockPlatform.windows() {
return MockPlatform(os: 'windows');
static Platform windows() {
return FakePlatform(operatingSystem: 'windows');
}

@override
final String operatingSystem;

@override
final Endian endian;

@override
String toString() => operatingSystem;
}
2 changes: 1 addition & 1 deletion dart/test/mocks/mock_platform_checker.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:sentry/src/platform/platform.dart';
import 'package:platform/platform.dart';
import 'package:sentry/src/platform_checker.dart';

import 'no_such_method_provider.dart';
Expand Down
1 change: 1 addition & 0 deletions flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ dev_dependencies:
ref: 6aa2c2642f507eab3df83373189170797a9fa5e7
jnigen: 0.14.0

platform: any
flutter:
plugin:
platforms:
Expand Down
53 changes: 18 additions & 35 deletions flutter/test/mocks.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:meta/meta.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:sentry/src/platform/platform.dart';
import 'package:sentry/src/sentry_tracer.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:sentry_flutter/src/frames_tracking/sentry_delayed_frames_tracker.dart';
import 'package:sentry_flutter/src/native/sentry_native_binding.dart';
import 'package:sentry_flutter/src/renderer/renderer.dart';
import 'package:sentry_flutter/src/web/sentry_js_binding.dart';
import 'package:platform/platform.dart';

import 'mocks.mocks.dart';
import 'no_such_method_provider.dart';
Expand Down Expand Up @@ -59,43 +59,26 @@ ISentrySpan startTransactionShim(
])
void main() {}

class MockPlatform with NoSuchMethodProvider implements Platform {
const MockPlatform(this.operatingSystem,
{this.operatingSystemVersion = '', this.localHostname = ''});

const MockPlatform.android() : this('android');
const MockPlatform.iOs() : this('ios');
const MockPlatform.macOs() : this('macos');
const MockPlatform.windows() : this('windows');
const MockPlatform.linux() : this('linux');
const MockPlatform.fuchsia() : this('fuchsia');

@override
final String operatingSystem;

@override
final String operatingSystemVersion;

@override
final String localHostname;

@override
bool get isLinux => (operatingSystem == 'linux');

@override
bool get isMacOS => (operatingSystem == 'macos');
extension MockPlatform on FakePlatform {
static Platform android() {
return FakePlatform(operatingSystem: 'android');
}

@override
bool get isWindows => (operatingSystem == 'windows');
static Platform iOS() {
return FakePlatform(operatingSystem: 'ios');
}

@override
bool get isAndroid => (operatingSystem == 'android');
static Platform macOS() {
return FakePlatform(operatingSystem: 'macos');
}

@override
bool get isIOS => (operatingSystem == 'ios');
static Platform linux() {
return FakePlatform(operatingSystem: 'linux');
}

@override
bool get isFuchsia => (operatingSystem == 'fuchsia');
static Platform windows() {
return FakePlatform(operatingSystem: 'windows');
}
}

class MockPlatformChecker with NoSuchMethodProvider implements PlatformChecker {
Expand All @@ -105,7 +88,7 @@ class MockPlatformChecker with NoSuchMethodProvider implements PlatformChecker {
this.hasNativeIntegration = false,
this.isRoot = true,
Platform? mockPlatform,
}) : _mockPlatform = mockPlatform ?? MockPlatform('');
}) : _mockPlatform = mockPlatform ?? FakePlatform(operatingSystem: '');

final MockPlatformCheckerBuildMode buildMode;
final bool isWebValue;
Expand Down
2 changes: 1 addition & 1 deletion flutter/test/profiling_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ void main() {
group('$SentryNativeProfilerFactory', () {
Hub hubWithSampleRate(double profilesSampleRate) {
final o = defaultTestOptions();
o.platformChecker = getPlatformChecker(platform: MockPlatform.iOs());
o.platformChecker = getPlatformChecker(platform: MockPlatform.iOS());
o.profilesSampleRate = profilesSampleRate;

final hub = MockHub();
Expand Down
2 changes: 1 addition & 1 deletion flutter/test/replay/replay_native_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void main() {

for (final mockPlatform in [
MockPlatform.android(),
MockPlatform.iOs(),
MockPlatform.iOS(),
]) {
group('$SentryNativeBinding (${mockPlatform.operatingSystem})', () {
late SentryNativeBinding sut;
Expand Down
Loading
Loading