Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
fl_settings_handler_test.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
13
15#include "gmock/gmock.h"
16#include "gtest/gtest.h"
17
19 protected:
20 void SetUp() override {
22 g_clear_object(&engine);
23 engine =
26 }
27
29 fl_binary_messenger_shutdown(FL_BINARY_MESSENGER(messenger));
30 g_clear_object(&handler);
31 g_clear_object(&messenger);
32 }
33
34 FlMockBinaryMessenger* messenger = nullptr;
35 FlSettingsHandler* handler = nullptr;
36 ::testing::NiceMock<flutter::testing::MockSettings> settings;
37};
38
39TEST_F(FlSettingsHandlerTest, AlwaysUse24HourFormat) {
40 EXPECT_CALL(settings, fl_settings_get_clock_format(
41 ::testing::Eq<FlSettings*>(settings)))
42 .WillOnce(::testing::Return(FL_CLOCK_FORMAT_12H))
43 .WillOnce(::testing::Return(FL_CLOCK_FORMAT_24H));
44
45 gboolean called = FALSE;
47 messenger, "flutter/settings",
48 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
49 gpointer user_data) {
50 gboolean* called = static_cast<gboolean*>(user_data);
51 *called = TRUE;
52
54 FlValue* value =
55 fl_value_lookup_string(message, "alwaysUse24HourFormat");
56 EXPECT_NE(value, nullptr);
58 EXPECT_FALSE(fl_value_get_bool(value));
59
60 return fl_value_new_null();
61 },
62 &called);
64 EXPECT_TRUE(called);
65
66 called = FALSE;
68 messenger, "flutter/settings",
69 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
70 gpointer user_data) {
71 gboolean* called = static_cast<gboolean*>(user_data);
72 *called = TRUE;
73
75 FlValue* value =
76 fl_value_lookup_string(message, "alwaysUse24HourFormat");
77 EXPECT_NE(value, nullptr);
79 EXPECT_TRUE(fl_value_get_bool(value));
80
81 return fl_value_new_null();
82 },
83 &called);
85 EXPECT_TRUE(called);
86}
87
88TEST_F(FlSettingsHandlerTest, PlatformBrightness) {
89 EXPECT_CALL(settings, fl_settings_get_color_scheme(
90 ::testing::Eq<FlSettings*>(settings)))
91 .WillOnce(::testing::Return(FL_COLOR_SCHEME_LIGHT))
92 .WillOnce(::testing::Return(FL_COLOR_SCHEME_DARK));
93
94 gboolean called = FALSE;
96 messenger, "flutter/settings",
97 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
98 gpointer user_data) {
99 gboolean* called = static_cast<gboolean*>(user_data);
100 *called = TRUE;
101
103 FlValue* value = fl_value_lookup_string(message, "platformBrightness");
104 EXPECT_NE(value, nullptr);
106 EXPECT_STREQ(fl_value_get_string(value), "light");
107
108 return fl_value_new_null();
109 },
110 &called);
112 EXPECT_TRUE(called);
113
114 called = FALSE;
116 messenger, "flutter/settings",
117 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
118 gpointer user_data) {
119 gboolean* called = static_cast<gboolean*>(user_data);
120 *called = TRUE;
121
123 FlValue* value = fl_value_lookup_string(message, "platformBrightness");
124 EXPECT_NE(value, nullptr);
126 EXPECT_STREQ(fl_value_get_string(value), "dark");
127
128 return fl_value_new_null();
129 },
130 &called);
131 fl_settings_emit_changed(settings);
132 EXPECT_TRUE(called);
133}
134
135TEST_F(FlSettingsHandlerTest, TextScaleFactor) {
136 EXPECT_CALL(settings, fl_settings_get_text_scaling_factor(
137 ::testing::Eq<FlSettings*>(settings)))
138 .WillOnce(::testing::Return(1.0))
139 .WillOnce(::testing::Return(2.0));
140
141 gboolean called = FALSE;
143 messenger, "flutter/settings",
144 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
145 gpointer user_data) {
146 gboolean* called = static_cast<gboolean*>(user_data);
147 *called = TRUE;
148
150 FlValue* value = fl_value_lookup_string(message, "textScaleFactor");
151 EXPECT_NE(value, nullptr);
153 EXPECT_EQ(fl_value_get_float(value), 1.0);
154
155 return fl_value_new_null();
156 },
157 &called);
159 EXPECT_TRUE(called);
160
161 called = FALSE;
163 messenger, "flutter/settings",
164 [](FlMockBinaryMessenger* messenger, GTask* task, FlValue* message,
165 gpointer user_data) {
166 gboolean* called = static_cast<gboolean*>(user_data);
167 *called = TRUE;
168
170 FlValue* value = fl_value_lookup_string(message, "textScaleFactor");
171 EXPECT_NE(value, nullptr);
173 EXPECT_EQ(fl_value_get_float(value), 2.0);
174
175 return fl_value_new_null();
176 },
177 &called);
178 fl_settings_emit_changed(settings);
179 EXPECT_TRUE(called);
180}
181
182// MOCK_ENGINE_PROC is leaky by design
183// NOLINTBEGIN(clang-analyzer-core.StackAddressEscape)
184TEST_F(FlSettingsHandlerTest, AccessibilityFeatures) {
185 StartEngine();
186
187 std::vector<FlutterAccessibilityFeature> calls;
190 UpdateAccessibilityFeatures,
191 ([&calls](auto engine, FlutterAccessibilityFeature features) {
192 calls.push_back(features);
193 return kSuccess;
194 }));
195
196 EXPECT_CALL(settings, fl_settings_get_enable_animations(
197 ::testing::Eq<FlSettings*>(settings)))
198 .WillOnce(::testing::Return(false))
199 .WillOnce(::testing::Return(true))
200 .WillOnce(::testing::Return(false))
201 .WillOnce(::testing::Return(true));
202
203 EXPECT_CALL(settings, fl_settings_get_high_contrast(
204 ::testing::Eq<FlSettings*>(settings)))
205 .WillOnce(::testing::Return(true))
206 .WillOnce(::testing::Return(false))
207 .WillOnce(::testing::Return(false))
208 .WillOnce(::testing::Return(true));
209
211 EXPECT_THAT(calls, ::testing::SizeIs(1));
212 EXPECT_EQ(calls.back(), static_cast<FlutterAccessibilityFeature>(
215
216 fl_settings_emit_changed(settings);
217 EXPECT_THAT(calls, ::testing::SizeIs(2));
218 EXPECT_EQ(calls.back(), static_cast<FlutterAccessibilityFeature>(0));
219
220 fl_settings_emit_changed(settings);
221 EXPECT_THAT(calls, ::testing::SizeIs(3));
222 EXPECT_EQ(calls.back(), static_cast<FlutterAccessibilityFeature>(
224
225 fl_settings_emit_changed(settings);
226 EXPECT_THAT(calls, ::testing::SizeIs(4));
227 EXPECT_EQ(calls.back(), static_cast<FlutterAccessibilityFeature>(
229}
230// NOLINTEND(clang-analyzer-core.StackAddressEscape)
::testing::NiceMock< flutter::testing::MockSettings > settings
FlMockBinaryMessenger * messenger
int32_t value
FlutterAccessibilityFeature
Definition embedder.h:91
@ kFlutterAccessibilityFeatureHighContrast
Request that UI be rendered with darker colors.
Definition embedder.h:105
@ kFlutterAccessibilityFeatureDisableAnimations
Request that animations be disabled or simplified.
Definition embedder.h:98
@ kSuccess
Definition embedder.h:73
FlutterEngine engine
Definition main.cc:84
const char * message
void fl_binary_messenger_shutdown(FlBinaryMessenger *self)
return TRUE
FlEngine * fl_engine_new_with_binary_messenger(FlBinaryMessenger *binary_messenger)
Definition fl_engine.cc:734
FlutterEngineProcTable * fl_engine_get_embedder_api(FlEngine *self)
Definition fl_engine.cc:920
const gchar FlBinaryMessengerMessageHandler handler
FlMockBinaryMessenger * fl_mock_binary_messenger_new()
void fl_mock_binary_messenger_set_json_message_channel(FlMockBinaryMessenger *self, const gchar *channel, FlMockBinaryMessengerMessageChannelHandler handler, gpointer user_data)
gboolean fl_settings_get_high_contrast(FlSettings *self)
gdouble fl_settings_get_text_scaling_factor(FlSettings *self)
void fl_settings_emit_changed(FlSettings *self)
gboolean fl_settings_get_enable_animations(FlSettings *self)
FlColorScheme fl_settings_get_color_scheme(FlSettings *self)
FlClockFormat fl_settings_get_clock_format(FlSettings *self)
@ FL_COLOR_SCHEME_DARK
Definition fl_settings.h:35
@ FL_COLOR_SCHEME_LIGHT
Definition fl_settings.h:34
@ FL_CLOCK_FORMAT_12H
Definition fl_settings.h:22
@ FL_CLOCK_FORMAT_24H
Definition fl_settings.h:23
void fl_settings_handler_start(FlSettingsHandler *self, FlSettings *settings)
FlSettingsHandler * fl_settings_handler_new(FlEngine *engine)
TEST_F(FlSettingsHandlerTest, AlwaysUse24HourFormat)
G_MODULE_EXPORT FlValue * fl_value_lookup_string(FlValue *self, const gchar *key)
Definition fl_value.cc:811
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition fl_value.cc:466
G_MODULE_EXPORT FlValue * fl_value_new_null()
Definition fl_value.cc:251
G_MODULE_EXPORT const gchar * fl_value_get_string(FlValue *self)
Definition fl_value.cc:682
G_MODULE_EXPORT bool fl_value_get_bool(FlValue *self)
Definition fl_value.cc:661
G_MODULE_EXPORT double fl_value_get_float(FlValue *self)
Definition fl_value.cc:675
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition fl_value.h:42
@ FL_VALUE_TYPE_STRING
Definition fl_value.h:68
@ FL_VALUE_TYPE_BOOL
Definition fl_value.h:65
@ FL_VALUE_TYPE_MAP
Definition fl_value.h:74
@ FL_VALUE_TYPE_FLOAT
Definition fl_value.h:67
#define MOCK_ENGINE_PROC(proc, mock_impl)
FlutterEngineUpdateAccessibilityFeaturesFnPtr UpdateAccessibilityFeatures
Definition embedder.h:3788