blob: 7aa221b3e1ad7a7dbd0047cbea7ee83830785668 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'dart:io';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:url_launcher_platform_interface/url_launcher_platform_interface.dart';
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('canLaunch', (WidgetTester _) async {
final UrlLauncherPlatform launcher = UrlLauncherPlatform.instance;
expect(await launcher.canLaunch('randomstring'), false);
// Generally all devices should have some default browser.
expect(await launcher.canLaunch('http://flutter.dev'), true);
// sms:, tel:, and mailto: links may not be openable on every device, so
// aren't tested here.
});
testWidgets('launch and close', (WidgetTester _) async {
final UrlLauncherPlatform launcher = UrlLauncherPlatform.instance;
// Setup fake http server.
final HttpServer server = await HttpServer.bind(InternetAddress.anyIPv4, 0);
unawaited(server.forEach((HttpRequest request) {
if (request.uri.path == '/hello.txt') {
request.response.writeln('Hello, world.');
} else {
fail('unexpected request: ${request.method} ${request.uri}');
}
request.response.close();
}));
// Https to avoid cleartext warning on android.
final String prefixUrl = 'https://${server.address.address}:${server.port}';
final String primaryUrl = '$prefixUrl/hello.txt';
// Launch a url then close.
expect(
await launcher.launch(primaryUrl,
useSafariVC: true,
useWebView: true,
enableJavaScript: false,
enableDomStorage: false,
universalLinksOnly: false,
headers: <String, String>{}),
true);
await launcher.closeWebView();
// Delay required to catch android side crashes in onDestroy.
//
// If this test flakes with an android crash during this delay the test
// should be considered failing because this integration test can have a
// false positive pass if the test closes before an onDestroy crash.
// See https://github.com/flutter/flutter/issues/126460 for more info.
await Future<void>.delayed(const Duration(seconds: 5));
});
}