From f3717d70d7d2660ed830835c8ee33a01af71ce08 Mon Sep 17 00:00:00 2001 From: stuartmorgan Date: Wed, 6 Jul 2022 10:21:07 -0400 Subject: [PATCH] Enable Windows platform_channel test (#106973) --- .ci.yaml | 1 - examples/platform_channel/lib/main.dart | 8 ++++++-- .../test_driver/button_tap_test.dart | 6 +++++- .../windows/runner/flutter_window.cpp | 19 ++++++++++++++----- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index e39008cbf46..71bad5f9abc 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -3994,7 +3994,6 @@ targets: ["devicelab", "hostonly"] task_name: platform_channel_sample_test_windows scheduler: luci - bringup: true - name: Windows plugin_dependencies_test recipe: devicelab/devicelab_drone diff --git a/examples/platform_channel/lib/main.dart b/examples/platform_channel/lib/main.dart index ada6ab5b592..ede86a0f1b9 100644 --- a/examples/platform_channel/lib/main.dart +++ b/examples/platform_channel/lib/main.dart @@ -28,8 +28,12 @@ class _PlatformChannelState extends State { try { final int? result = await methodChannel.invokeMethod('getBatteryLevel'); batteryLevel = 'Battery level: $result%.'; - } on PlatformException { - batteryLevel = 'Failed to get battery level.'; + } on PlatformException catch (e) { + if (e.code == 'NO_BATTERY') { + batteryLevel = 'No battery.'; + } else { + batteryLevel = 'Failed to get battery level.'; + } } setState(() { _batteryLevel = batteryLevel; diff --git a/examples/platform_channel/test_driver/button_tap_test.dart b/examples/platform_channel/test_driver/button_tap_test.dart index 53d4c997d18..be36536c563 100644 --- a/examples/platform_channel/test_driver/button_tap_test.dart +++ b/examples/platform_channel/test_driver/button_tap_test.dart @@ -31,7 +31,11 @@ void main() { batteryLevel = await driver.getText(batteryLevelLabel); } - expect(batteryLevel.contains('%'), isTrue); + // Allow either a battery percentage or "No battery" since it will vary + // by device; either indicates that a known response came from the host + // implementation. + expect(batteryLevel.contains('%') || batteryLevel.contains('No battery'), + isTrue); }); }); } diff --git a/examples/platform_channel/windows/runner/flutter_window.cpp b/examples/platform_channel/windows/runner/flutter_window.cpp index cba9c41aead..3dec3e82d70 100644 --- a/examples/platform_channel/windows/runner/flutter_window.cpp +++ b/examples/platform_channel/windows/runner/flutter_window.cpp @@ -16,10 +16,17 @@ #include "flutter/generated_plugin_registrant.h" +static constexpr int kBatteryError = -1; +static constexpr int kNoBattery = -2; + static int GetBatteryLevel() { SYSTEM_POWER_STATUS status; - if (GetSystemPowerStatus(&status) == 0 || status.BatteryLifePercent == 255) { - return -1; + if (GetSystemPowerStatus(&status) == 0) { + return kBatteryError; + } else if (status.BatteryFlag == 128) { + return kNoBattery; + } else if (status.BatteryLifePercent == 255) { + return kBatteryError; } return status.BatteryLifePercent; } @@ -59,10 +66,12 @@ bool FlutterWindow::OnCreate() { if (call.method_name() == "getBatteryLevel") { int battery_level = GetBatteryLevel(); - if (battery_level != -1) { - result->Success(battery_level); - } else { + if (battery_level == kBatteryError) { result->Error("UNAVAILABLE", "Battery level not available."); + } else if (battery_level == kNoBattery) { + result->Error("NO_BATTERY", "Device does not have a battery."); + } else { + result->Success(battery_level); } } else { result->NotImplemented();