Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
buenaflor committed Oct 17, 2024
1 parent 431cfe6 commit 1ef2ba9
Show file tree
Hide file tree
Showing 9 changed files with 130 additions and 13 deletions.
9 changes: 7 additions & 2 deletions .github/workflows/e2e_flutter.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,18 @@ jobs:
- name: Build App
if: env.SENTRY_AUTH_TOKEN_E2E != null
run: |
flutter build ios --debug --simulator --obfuscate --split-debug-info=./ --dart-define=SENTRY_AUTH_TOKEN_E2E=$SENTRY_AUTH_TOKEN_E2E
flutter build ios --debug --simulator
xcrun simctl install Booted build/ios/iphonesimulator/Runner.app
- name: Run Maestro
env:
MAESTRO_DRIVER_STARTUP_TIMEOUT: 1500000 # 25 min, CI can be slow at times
run: maestro test flow.yaml

- name: Store Maestro Logs
uses: actions/upload-artifact@v4
if: failure()
with:
name: maestro-logs-test
path: MaestroLogs
# analyze:
# uses: ./.github/workflows/analyze.yml
# with:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package io.sentry.samples.flutter_e2e

import android.os.Build
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.FlutterPlugin.FlutterPluginBinding
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result

class LaunchArgPlugin: ActivityAware, FlutterPlugin, MethodCallHandler {
private var channel: MethodChannel? = null

private val args: MutableList<String> = ArrayList()

override fun onAttachedToEngine(flutterPluginBinding: FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "launchargs")
channel!!.setMethodCallHandler(this)
}

override fun onAttachedToActivity(binding: ActivityPluginBinding) {
args.clear()

val activity = binding.activity
val intent = activity.intent
if (intent != null) {
val bundle = intent.extras
if (bundle != null) {
val keys = bundle.keySet()

for (key in keys) {
args.add("--$key")
args.add(bundle[key].toString())
}
}
}
}

override fun onDetachedFromActivityForConfigChanges() {
args.clear()
}

override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
val bundle = binding.activity.intent.extras
val keys = bundle!!.keySet()

args.clear()
for (key in keys) {
args.add("--$key")
args.add(bundle[key].toString())
}
}

override fun onDetachedFromActivity() {
args.clear()
}

override fun onMethodCall(call: MethodCall, result: Result) {
if (call.method == "getPlatformVersion") {
result.success("Android " + Build.VERSION.RELEASE)
} else if (call.method == "args") {
result.success(args)
} else {
result.notImplemented()
}
}

override fun onDetachedFromEngine(binding: FlutterPluginBinding) {
channel!!.setMethodCallHandler(null)
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
package io.sentry.samples.flutter_e2e

import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine

class MainActivity: FlutterActivity()
class MainActivity: FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
flutterEngine.plugins.add(LaunchArgPlugin())
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#Thu Oct 17 15:08:53 CEST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
2 changes: 1 addition & 1 deletion e2e_test/flutter/android/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ pluginManagement {

plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.1.0" apply false
id "com.android.application" version "8.3.2" apply false
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}

Expand Down
4 changes: 3 additions & 1 deletion e2e_test/flutter/flow.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
appId: io.sentry.samples.flutter_e2e
---
- launchApp
- launchApp:
arguments:
sentryAuthToken: "test"
- assertVisible: 'Capture exception'
- tapOn: "Capture exception"
- assertVisible: "Sending exception to Sentry..."
Expand Down
24 changes: 24 additions & 0 deletions e2e_test/flutter/lib/launch_args.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';

class LaunchArgs {
static const MethodChannel _channel = MethodChannel('launchargs');

/// Returns the list of command line arguments that were passed to the
/// application at start. This only supports Android and iOS currently. All
/// other platforms will result in an empty list being returned.
static Future<List<String>> get args async {
var args = <String>[];

if (!kIsWeb) {
if (Platform.isAndroid || Platform.isIOS) {
args = List<String>.from(await _channel.invokeMethod('args'));
}
}

return args;
}
}
19 changes: 12 additions & 7 deletions e2e_test/flutter/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:http/http.dart';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_e2e/launch_args.dart';
import 'package:http/http.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
// import 'package:launch_args/launch_args.dart';

const _org = 'sentry-sdks';
const _projectSlug = 'sentry-flutter';
const _exampleDsn =
'https://e85b375ffb9f43cf8bdf9787768149e0@o447951.ingest.sentry.io/5428562';
const _token =
String.fromEnvironment('SENTRY_AUTH_TOKEN_E2E', defaultValue: '');
// flutter build apk --dart-define=SENTRY_AUTH_TOKEN_E2E=$SENTRY_AUTH_TOKEN_E2E works
String? _token;

Future<void> main() async {
if (_token.trim().isEmpty) {
WidgetsFlutterBinding.ensureInitialized();

final args = await LaunchArgs.args;
_token = args[1];
if (_token!.trim().isEmpty) {
print('AUTH TOKEN is not set');
exit(1);
}
Expand Down
1 change: 1 addition & 0 deletions e2e_test/flutter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ dependencies:
sentry:
sentry_flutter:
cupertino_icons: ^1.0.8
# launch_args: ^2.0.5+1

dev_dependencies:
flutter_test:
Expand Down

0 comments on commit 1ef2ba9

Please sign in to comment.