| // 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 'dart:async'; |
| import 'dart:ui' as ui; |
| |
| import 'package:flutter_driver/driver_extension.dart'; |
| |
| import 'windows.dart'; |
| |
| void drawHelloWorld() { |
| final ui.ParagraphStyle style = ui.ParagraphStyle(); |
| final ui.ParagraphBuilder paragraphBuilder = ui.ParagraphBuilder(style) |
| ..addText('Hello world'); |
| final ui.Paragraph paragraph = paragraphBuilder.build(); |
| |
| paragraph.layout(const ui.ParagraphConstraints(width: 100.0)); |
| |
| final ui.PictureRecorder recorder = ui.PictureRecorder(); |
| final ui.Canvas canvas = ui.Canvas(recorder); |
| |
| canvas.drawParagraph(paragraph, ui.Offset.zero); |
| |
| final ui.Picture picture = recorder.endRecording(); |
| final ui.SceneBuilder sceneBuilder = ui.SceneBuilder() |
| ..addPicture(ui.Offset.zero, picture) |
| ..pop(); |
| |
| ui.window.render(sceneBuilder.build()); |
| } |
| |
| void main() async { |
| // Create a completer to send the window visibility result back to the |
| // integration test. |
| final Completer<String> visibilityCompleter = Completer<String>(); |
| enableFlutterDriverExtension(handler: (String? message) async { |
| if (message == 'verifyWindowVisibility') { |
| return visibilityCompleter.future; |
| } else if (message == 'verifyTheme') { |
| final bool app = await isAppDarkModeEnabled(); |
| final bool system = await isSystemDarkModeEnabled(); |
| |
| return (app == system) |
| ? 'success' |
| : 'error: app dark mode ($app) does not match system dark mode ($system)'; |
| } |
| |
| throw 'Unrecognized message: $message'; |
| }); |
| |
| try { |
| if (await isWindowVisible()) { |
| throw 'Window should be hidden at startup'; |
| } |
| |
| bool firstFrame = true; |
| ui.PlatformDispatcher.instance.onBeginFrame = (Duration duration) async { |
| if (await isWindowVisible()) { |
| if (firstFrame) { |
| throw 'Window should be hidden on first frame'; |
| } |
| |
| if (!visibilityCompleter.isCompleted) { |
| visibilityCompleter.complete('success'); |
| } |
| } |
| |
| // Draw something to trigger the first frame callback that displays the |
| // window. |
| drawHelloWorld(); |
| firstFrame = false; |
| }; |
| |
| ui.PlatformDispatcher.instance.scheduleFrame(); |
| } catch (e) { |
| visibilityCompleter.completeError(e); |
| rethrow; |
| } |
| } |