From b020ac6fcbe641582d89b7836c5600690b3cd67d Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 27 Mar 2023 15:11:39 +0200 Subject: [PATCH 01/18] add SentryIOOverridesIntegration --- file/lib/sentry_file.dart | 1 + file/lib/src/sentry_io_overrides.dart | 23 +++++++++++++++++++ .../src/sentry_io_overrides_integration.dart | 22 ++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 file/lib/src/sentry_io_overrides.dart create mode 100644 file/lib/src/sentry_io_overrides_integration.dart diff --git a/file/lib/sentry_file.dart b/file/lib/sentry_file.dart index bd59fdea55..6b78ddc330 100644 --- a/file/lib/sentry_file.dart +++ b/file/lib/sentry_file.dart @@ -1,2 +1,3 @@ export 'src/sentry_file.dart'; export 'src/sentry_file_extension.dart'; +export 'src/sentry_io_overrides_integration.dart'; diff --git a/file/lib/src/sentry_io_overrides.dart b/file/lib/src/sentry_io_overrides.dart new file mode 100644 index 0000000000..15f9069229 --- /dev/null +++ b/file/lib/src/sentry_io_overrides.dart @@ -0,0 +1,23 @@ + +import 'dart:io'; +import 'package:sentry/sentry.dart'; + +import 'sentry_file.dart'; + +class SentryIoOverrides extends IOOverrides { + final Hub _hub; + final SentryOptions _options; + + SentryIoOverrides(this._hub, this._options); + + @override + File createFile(String path) { + if (_options.platformChecker.isWeb || !_options.isTracingEnabled()) { + return super.createFile(path); + } + return SentryFile( + super.createFile(path), + hub: _hub, + ); + } +} diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart new file mode 100644 index 0000000000..962a845940 --- /dev/null +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -0,0 +1,22 @@ +import 'dart:async'; +import 'dart:io'; + +import 'package:sentry/sentry.dart'; +import 'sentry_io_overrides.dart'; + +class SentryIOOverridesIntegration extends Integration { + + IOOverrides? _previousOverrides; + + @override + FutureOr call(Hub hub, SentryOptions options) { + _previousOverrides = IOOverrides.current; + IOOverrides.global = SentryIoOverrides(hub, options); + options.sdk.addIntegration('sentryIOOverridesIntegration'); + } + + @override + FutureOr close() { + IOOverrides.global = _previousOverrides; + } +} From 8c0e89dc04dc155bcee15a5c3e62b0924c06f982 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 28 Mar 2023 13:56:18 +0200 Subject: [PATCH 02/18] check tracing in integration --- file/lib/src/sentry_io_overrides.dart | 8 ++------ file/lib/src/sentry_io_overrides_integration.dart | 6 ++++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/file/lib/src/sentry_io_overrides.dart b/file/lib/src/sentry_io_overrides.dart index 15f9069229..e0fc69f9e5 100644 --- a/file/lib/src/sentry_io_overrides.dart +++ b/file/lib/src/sentry_io_overrides.dart @@ -4,17 +4,13 @@ import 'package:sentry/sentry.dart'; import 'sentry_file.dart'; -class SentryIoOverrides extends IOOverrides { +class SentryIOOverrides extends IOOverrides { final Hub _hub; - final SentryOptions _options; - SentryIoOverrides(this._hub, this._options); + SentryIOOverrides(this._hub); @override File createFile(String path) { - if (_options.platformChecker.isWeb || !_options.isTracingEnabled()) { - return super.createFile(path); - } return SentryFile( super.createFile(path), hub: _hub, diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index 962a845940..3ba32573c3 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -11,8 +11,10 @@ class SentryIOOverridesIntegration extends Integration { @override FutureOr call(Hub hub, SentryOptions options) { _previousOverrides = IOOverrides.current; - IOOverrides.global = SentryIoOverrides(hub, options); - options.sdk.addIntegration('sentryIOOverridesIntegration'); + if (options.isTracingEnabled()) { + IOOverrides.global = SentryIOOverrides(hub); + options.sdk.addIntegration('sentryIOOverridesIntegration'); + } } @override From 8d770ef68569e47e57da17c009da4c79594ec37e Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 28 Mar 2023 14:17:17 +0200 Subject: [PATCH 03/18] add tests --- file/lib/src/sentry_io_overrides.dart | 1 - .../src/sentry_io_overrides_integration.dart | 1 - .../sentry_io_overrides_integration_test.dart | 68 +++++++++++++++++++ 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 file/test/sentry_io_overrides_integration_test.dart diff --git a/file/lib/src/sentry_io_overrides.dart b/file/lib/src/sentry_io_overrides.dart index e0fc69f9e5..1fd9379058 100644 --- a/file/lib/src/sentry_io_overrides.dart +++ b/file/lib/src/sentry_io_overrides.dart @@ -1,4 +1,3 @@ - import 'dart:io'; import 'package:sentry/sentry.dart'; diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index 3ba32573c3..f19b6bcb2e 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -5,7 +5,6 @@ import 'package:sentry/sentry.dart'; import 'sentry_io_overrides.dart'; class SentryIOOverridesIntegration extends Integration { - IOOverrides? _previousOverrides; @override diff --git a/file/test/sentry_io_overrides_integration_test.dart b/file/test/sentry_io_overrides_integration_test.dart new file mode 100644 index 0000000000..719e7ddbe7 --- /dev/null +++ b/file/test/sentry_io_overrides_integration_test.dart @@ -0,0 +1,68 @@ +import 'dart:io'; + +import 'package:sentry/sentry.dart'; +import 'package:sentry_file/sentry_file.dart'; +import 'package:sentry_file/src/sentry_io_overrides.dart'; +import 'package:test/expect.dart'; +import 'package:test/scaffolding.dart'; + +import 'mock_sentry_client.dart'; + +void main() { + late IOOverrides? current; + late Fixture fixture; + + setUp(() { + current = IOOverrides.current; + fixture = Fixture(); + }); + + tearDown(() { + IOOverrides.global = current; + }); + + test('adding integration installs io overrides', () { + fixture.options.tracesSampleRate = 1.0; + + final sut = fixture.getSut(); + sut.call(fixture.hub, fixture.options); + + expect( + fixture.options.sdk.integrations.contains('sentryIOOverridesIntegration'), + isTrue, + ); + expect(IOOverrides.current is SentryIOOverrides, isTrue); + }); + + test('not installed when tracing disabled', () { + final sut = fixture.getSut(); + sut.call(fixture.hub, fixture.options); + + expect( + fixture.options.sdk.integrations.contains('sentryIOOverridesIntegration'), + isFalse, + ); + expect(IOOverrides.current is SentryIOOverrides, isFalse); + }); + + test('global overrides restored', () { + final previous = IOOverrides.current; + + fixture.options.tracesSampleRate = 1.0; + + final sut = fixture.getSut(); + sut.call(fixture.hub, fixture.options); + sut.close(); + + expect(IOOverrides.current, previous); + }); +} + +class Fixture { + final options = SentryOptions(dsn: fakeDsn); + late final hub = Hub(options); + + SentryIOOverridesIntegration getSut() { + return SentryIOOverridesIntegration(); + } +} From f15574e523b05395bbfefff40936e71b35bd7eba Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 28 Mar 2023 14:36:46 +0200 Subject: [PATCH 04/18] add documentation --- file/lib/src/sentry_io_overrides_integration.dart | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index f19b6bcb2e..9e6adbaf2a 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -4,13 +4,19 @@ import 'dart:io'; import 'package:sentry/sentry.dart'; import 'sentry_io_overrides.dart'; +/// When installed, every new file will be created as [SentryFile]. +/// When installed, operations will use [SentryFile] instead of dart:io's [File] +/// implementation whenever [File] is used. +/// +/// Must be called outside the RunZoneGuardedIntegration. +/// Otherwise the FileOverrides aren't attached to the root zone. class SentryIOOverridesIntegration extends Integration { IOOverrides? _previousOverrides; @override FutureOr call(Hub hub, SentryOptions options) { - _previousOverrides = IOOverrides.current; if (options.isTracingEnabled()) { + _previousOverrides = IOOverrides.current; IOOverrides.global = SentryIOOverrides(hub); options.sdk.addIntegration('sentryIOOverridesIntegration'); } From d7e23f1424aa866f8974d2e96f6d2b2ca3c7bde0 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 28 Mar 2023 14:39:29 +0200 Subject: [PATCH 05/18] add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6d149849d..5ed4764d42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Features - SentryUserInteractionWidget: add support for PopupMenuButton and PopupMenuItem ([#1361](https://github.com/getsentry/sentry-dart/pull/1361)) +- SentryIOOverridesIntegration ([#1362](https://github.com/getsentry/sentry-dart/pull/1362)) ### Fixes From b8b40fbe7a21ae91df3cc57aa0401548fd80e3c6 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Tue, 28 Mar 2023 14:44:05 +0200 Subject: [PATCH 06/18] only restore if tracing is enabled --- file/lib/src/sentry_io_overrides_integration.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index 9e6adbaf2a..151802a4a6 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -12,9 +12,10 @@ import 'sentry_io_overrides.dart'; /// Otherwise the FileOverrides aren't attached to the root zone. class SentryIOOverridesIntegration extends Integration { IOOverrides? _previousOverrides; - + SentryOptions? _options; @override FutureOr call(Hub hub, SentryOptions options) { + _options = options; if (options.isTracingEnabled()) { _previousOverrides = IOOverrides.current; IOOverrides.global = SentryIOOverrides(hub); @@ -24,6 +25,8 @@ class SentryIOOverridesIntegration extends Integration { @override FutureOr close() { - IOOverrides.global = _previousOverrides; + if (_options?.isTracingEnabled() ?? false) { + IOOverrides.global = _previousOverrides; + } } } From cd289c9bc9c71e2167a8a5bfb8df39b1d27b6a75 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 3 Apr 2023 12:11:40 +0200 Subject: [PATCH 07/18] remove incorrect comment --- file/lib/src/sentry_io_overrides_integration.dart | 3 --- 1 file changed, 3 deletions(-) diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index 151802a4a6..114dc5a225 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -7,9 +7,6 @@ import 'sentry_io_overrides.dart'; /// When installed, every new file will be created as [SentryFile]. /// When installed, operations will use [SentryFile] instead of dart:io's [File] /// implementation whenever [File] is used. -/// -/// Must be called outside the RunZoneGuardedIntegration. -/// Otherwise the FileOverrides aren't attached to the root zone. class SentryIOOverridesIntegration extends Integration { IOOverrides? _previousOverrides; SentryOptions? _options; From ad5f429707584ce9d5ceb0ca7870695d3a8752b0 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 3 Apr 2023 13:46:01 +0200 Subject: [PATCH 08/18] persist if integration was installed --- file/lib/src/sentry_io_overrides_integration.dart | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index 114dc5a225..be73f2587a 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -9,12 +9,13 @@ import 'sentry_io_overrides.dart'; /// implementation whenever [File] is used. class SentryIOOverridesIntegration extends Integration { IOOverrides? _previousOverrides; - SentryOptions? _options; + bool _installed = false; + @override FutureOr call(Hub hub, SentryOptions options) { - _options = options; if (options.isTracingEnabled()) { _previousOverrides = IOOverrides.current; + _installed = true; IOOverrides.global = SentryIOOverrides(hub); options.sdk.addIntegration('sentryIOOverridesIntegration'); } @@ -22,7 +23,7 @@ class SentryIOOverridesIntegration extends Integration { @override FutureOr close() { - if (_options?.isTracingEnabled() ?? false) { + if (_installed) { IOOverrides.global = _previousOverrides; } } From 4e991d4d72c5cf745857e5fc1b51306c7ed84ca4 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 3 Apr 2023 13:50:06 +0200 Subject: [PATCH 09/18] update changelog --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f9f384faf..706659b7b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Features + +- SentryIOOverridesIntegration ([#1362](https://github.com/getsentry/sentry-dart/pull/1362)) + ### Fixes - Fix Dart web builds breaking due to `dart:io` imports when using `SentryIsolate` or `SentryIsolateExtension` ([#1371](https://github.com/getsentry/sentry-dart/pull/1371)) @@ -12,7 +16,6 @@ ### Features - SentryUserInteractionWidget: add support for PopupMenuButton and PopupMenuItem ([#1361](https://github.com/getsentry/sentry-dart/pull/1361)) -- SentryIOOverridesIntegration ([#1362](https://github.com/getsentry/sentry-dart/pull/1362)) ### Fixes From 913299717eb5e3e6658a2b3d58741e7e7feead04 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 17 Apr 2023 09:57:13 +0200 Subject: [PATCH 10/18] make sure created file is sentryfile after installing integration --- file/test/sentry_io_overrides_integration_test.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/file/test/sentry_io_overrides_integration_test.dart b/file/test/sentry_io_overrides_integration_test.dart index 719e7ddbe7..4ae8f724de 100644 --- a/file/test/sentry_io_overrides_integration_test.dart +++ b/file/test/sentry_io_overrides_integration_test.dart @@ -56,6 +56,16 @@ void main() { expect(IOOverrides.current, previous); }); + + test('files created are sentry file after adding integration', () { + fixture.options.tracesSampleRate = 1.0; + + final sut = fixture.getSut(); + sut.call(fixture.hub, fixture.options); + + final file = File("/home"); + expect(file is SentryFile, true); + }); } class Fixture { From a41db5c217025df09d49de2df8ec1dc0fe234683 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 17 Apr 2023 09:59:19 +0200 Subject: [PATCH 11/18] export io_overrides --- file/lib/sentry_file.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/file/lib/sentry_file.dart b/file/lib/sentry_file.dart index 6b78ddc330..a7d23de901 100644 --- a/file/lib/sentry_file.dart +++ b/file/lib/sentry_file.dart @@ -1,3 +1,4 @@ export 'src/sentry_file.dart'; export 'src/sentry_file_extension.dart'; export 'src/sentry_io_overrides_integration.dart'; +export 'src/sentry_io_overrides.dart'; \ No newline at end of file From ceee69017915dac83fa1f6226db1e45b34969410 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 17 Apr 2023 10:07:20 +0200 Subject: [PATCH 12/18] add documentation --- file/lib/src/sentry_io_overrides.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/file/lib/src/sentry_io_overrides.dart b/file/lib/src/sentry_io_overrides.dart index 1fd9379058..7901ff0a2a 100644 --- a/file/lib/src/sentry_io_overrides.dart +++ b/file/lib/src/sentry_io_overrides.dart @@ -1,8 +1,12 @@ import 'dart:io'; import 'package:sentry/sentry.dart'; +import '../sentry_file.dart'; import 'sentry_file.dart'; +/// If set to [IOOverrides.global], newly created [File] instances will be of +/// type [SentryFile]. +/// Enable by adding [SentryIOOverridesIntegration] to [SentryOptions]. class SentryIOOverrides extends IOOverrides { final Hub _hub; From c1f860ab47f285cae8877bf8dd1302675c52f8b2 Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 17 Apr 2023 10:09:43 +0200 Subject: [PATCH 13/18] fix changelog entry --- CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d8fdb1d20..7d7b840aab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Features + +- SentryIOOverridesIntegration ([#1362](https://github.com/getsentry/sentry-dart/pull/1362)) + ## 7.4.2 ### Fixes @@ -8,10 +14,6 @@ ## 7.4.1 -### Features - -- SentryIOOverridesIntegration ([#1362](https://github.com/getsentry/sentry-dart/pull/1362)) - ### Fixes - Fix Dart web builds breaking due to `dart:io` imports when using `SentryIsolate` or `SentryIsolateExtension` ([#1371](https://github.com/getsentry/sentry-dart/pull/1371)) From 66fe8482c57a88e09eea530ba9ac7ba82409858b Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 17 Apr 2023 10:23:40 +0200 Subject: [PATCH 14/18] format --- file/lib/sentry_file.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/file/lib/sentry_file.dart b/file/lib/sentry_file.dart index a7d23de901..e5edf1c54a 100644 --- a/file/lib/sentry_file.dart +++ b/file/lib/sentry_file.dart @@ -1,4 +1,4 @@ export 'src/sentry_file.dart'; export 'src/sentry_file_extension.dart'; export 'src/sentry_io_overrides_integration.dart'; -export 'src/sentry_io_overrides.dart'; \ No newline at end of file +export 'src/sentry_io_overrides.dart'; From 36a1a77985aac65b4f061bcb2a85b494a247fe0f Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 17 Apr 2023 10:26:14 +0200 Subject: [PATCH 15/18] document restore behaviour --- file/lib/src/sentry_io_overrides_integration.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index be73f2587a..662246020d 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -7,6 +7,9 @@ import 'sentry_io_overrides.dart'; /// When installed, every new file will be created as [SentryFile]. /// When installed, operations will use [SentryFile] instead of dart:io's [File] /// implementation whenever [File] is used. +/// +/// When closed, the [IOOverrides.current] value before this integration was +/// added will be assigned to [IOOverrides.global]. class SentryIOOverridesIntegration extends Integration { IOOverrides? _previousOverrides; bool _installed = false; From 519e87554964e130b1efd90428d57bbadae38f78 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Thu, 20 Apr 2023 13:55:58 +0200 Subject: [PATCH 16/18] fix --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index abfcedd118..a5cbe2010b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Features - SentryIOOverridesIntegration ([#1362](https://github.com/getsentry/sentry-dart/pull/1362)) + ### Fixes - Do not report only async gap frames for logging calls ([#1398](https://github.com/getsentry/sentry-dart/pull/1398)) From 12a9c26e80ea86d37a2a411f4f80ff76ad0bbc3c Mon Sep 17 00:00:00 2001 From: Denis Andrasec Date: Mon, 24 Apr 2023 16:20:56 +0200 Subject: [PATCH 17/18] reset properties when integration is closed --- file/lib/src/sentry_io_overrides_integration.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/file/lib/src/sentry_io_overrides_integration.dart b/file/lib/src/sentry_io_overrides_integration.dart index 662246020d..dc22763a57 100644 --- a/file/lib/src/sentry_io_overrides_integration.dart +++ b/file/lib/src/sentry_io_overrides_integration.dart @@ -28,6 +28,8 @@ class SentryIOOverridesIntegration extends Integration { FutureOr close() { if (_installed) { IOOverrides.global = _previousOverrides; + _previousOverrides = null; + _installed = false; } } } From 56d17366e5bd5f878347450a02e7b174d2640270 Mon Sep 17 00:00:00 2001 From: Manoel Aranda Neto Date: Mon, 24 Apr 2023 16:56:07 +0200 Subject: [PATCH 18/18] lint --- file/lib/src/sentry_io_overrides.dart | 1 - file/test/sentry_io_overrides_integration_test.dart | 1 - 2 files changed, 2 deletions(-) diff --git a/file/lib/src/sentry_io_overrides.dart b/file/lib/src/sentry_io_overrides.dart index 7901ff0a2a..9b6231017e 100644 --- a/file/lib/src/sentry_io_overrides.dart +++ b/file/lib/src/sentry_io_overrides.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:sentry/sentry.dart'; import '../sentry_file.dart'; -import 'sentry_file.dart'; /// If set to [IOOverrides.global], newly created [File] instances will be of /// type [SentryFile]. diff --git a/file/test/sentry_io_overrides_integration_test.dart b/file/test/sentry_io_overrides_integration_test.dart index 4ae8f724de..86d5f25d74 100644 --- a/file/test/sentry_io_overrides_integration_test.dart +++ b/file/test/sentry_io_overrides_integration_test.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:sentry/sentry.dart'; import 'package:sentry_file/sentry_file.dart'; -import 'package:sentry_file/src/sentry_io_overrides.dart'; import 'package:test/expect.dart'; import 'package:test/scaffolding.dart';