blob: 7a83d0b52a515360614c8c6980d4108c03482e22 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fuchsia/accessibility/cpp/fidl.h>
#include <lib/gtest/test_loop_fixture.h>
#include <lib/sys/cpp/testing/component_context_provider.h>
#include <src/lib/fxl/logging.h>
#include "gtest/gtest.h"
#include "src/ui/a11y/bin/a11y_manager/settings/settings_manager_impl.h"
#include "src/ui/a11y/tests/mocks/mock_settings_service.h"
#include "src/ui/a11y/tests/mocks/mock_settings_watcher.h"
namespace accessibility_test {
using fuchsia::accessibility::SettingsManagerStatus;
// clang-format off
const std::array<float, 9> kIdentityMatrix = {
1, 0, 0,
0, 1, 0,
0, 0, 1};
const std::array<float, 9> kColorInversionMatrix = {
0.402, -0.598, -0.599,
-1.174, -0.174, -1.175,
-0.228, -0.228, 0.772};
const std::array<float, 9> kCorrectProtanomaly = {
0.622774, 0.264275, 0.216821,
0.377226, 0.735725, -0.216821,
0.000000, -0.000000, 1.000000};
const std::array<float, 9> kProtanomalyAndInversion = {
0.024774, -0.333725, -0.382179,
-0.796774, -0.438275, -1.39182,
-0.228, -0.228, 0.772};
const std::array<float, 9> kTritanomalyAndInversion = {
0.401193092, -0.598621162, -0.598895177,
-1.98051806, -0.795783162, -1.070072177,
0.577711544, 0.393162, 0.667177};
const std::array<float, 9> kDeuteranomalyAndInversion = {
-0.309701, -0.545291, -0.856911196,
-0.462299, -0.226709, -0.917090348,
-0.228, -0.228, 0.771999544};
// clang-format on
class SettingsManagerTest : public gtest::TestLoopFixture {
public:
explicit SettingsManagerTest() = default;
~SettingsManagerTest() = default;
void SetUp() override {
TestLoopFixture::SetUp();
context_provider_.service_directory_provider()
->AddService<fuchsia::accessibility::SettingsManager>(
[this](fidl::InterfaceRequest<fuchsia::accessibility::SettingsManager> request) {
settings_manager_impl_.AddBinding(std::move(request));
});
RunLoopUntilIdle();
}
sys::testing::ComponentContextProvider* GetContextProvider() { return &context_provider_; }
static const fuchsia::accessibility::Settings default_settings_;
private:
static const fuchsia::accessibility::Settings InitSettings() {
fuchsia::accessibility::Settings settings;
settings.set_magnification_enabled(false);
settings.set_magnification_zoom_factor(1);
settings.set_screen_reader_enabled(false);
settings.set_color_inversion_enabled(false);
settings.set_color_correction(fuchsia::accessibility::ColorCorrection::DISABLED);
std::array<float, 9> matrix = kIdentityMatrix;
settings.set_color_adjustment_matrix(matrix);
return settings;
}
sys::testing::ComponentContextProvider context_provider_;
a11y_manager::SettingsManagerImpl settings_manager_impl_;
};
const fuchsia::accessibility::Settings SettingsManagerTest::default_settings_ = InitSettings();
TEST_F(SettingsManagerTest, SetMagnificationEnabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Check Settings in Watcher is same as the default settings, since nothing
// has changed.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Enable Magnification from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
{
// Check Settings in Watcher to make sure it is updated.
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetMagnificationZoomFactor) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Magnification from Settings Service first in order to set Zoom
// Factor.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Modify Magnification Zoom Factor from Settings Service.
settings_service.SetMagnificationZoomFactor(
5.0, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_zoom_factor(5.0);
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
// Zoom Factor should not change when Magnification is enabled twice.
TEST_F(SettingsManagerTest, SetMagnificationEnabled_AlreadyEnabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Magnification and Zoom Factor from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
settings_service.SetMagnificationZoomFactor(
5.0, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
expected_settings->set_magnification_zoom_factor(5.0);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Enable Magnification again from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
expected_settings->set_magnification_zoom_factor(5.0);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetMagnificationDisabled_AlreadyDisabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Disable Magnification from Settings Service, when it is already disabled.
settings_service.SetMagnificationEnabled(
false, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetMagnificationDisabled_PreviouslyEnabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Magnification and set Zoom Factor from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
settings_service.SetMagnificationZoomFactor(
5.0, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Disable Magnification and make sure Zoom factor is reset.
settings_service.SetMagnificationEnabled(
false, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
// Setting Service cannot set ZoomFactor without Enabling Magnification.
TEST_F(SettingsManagerTest, SetMagnificationZoomFactor_MagnificationIsDisabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Modify Magnification Zoom Factor from Settings Service.
settings_service.SetMagnificationZoomFactor(
5.0, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::ERROR);
// Check Settings in Watcher to make sure nothing has changed.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
// Any Value less than 1 is an invalid value for Zoom Factor.
TEST_F(SettingsManagerTest, SetMagnificationZoomFactor_InvalidValue) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Magnification from Settings Service first in order to set Zoom
// Factor.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Modify Magnification Zoom Factor from Settings Service with 0.
settings_service.SetMagnificationZoomFactor(
0, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::ERROR);
// Check Settings in Watcher to make sure it is updated and Zoom Factor has
// not changed.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetScreenReaderEnabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Screen Reader from Settings Service.
settings_service.SetScreenReaderEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_screen_reader_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetScreenReaderDisabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Screen Reader from Settings Service.
settings_service.SetScreenReaderEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_screen_reader_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Disable Screen Reader.
settings_service.SetScreenReaderEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_screen_reader_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetColorInversionEnabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Inversion from Settings Service.
settings_service.SetColorInversionEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_inversion_enabled(true);
expected_settings->set_color_adjustment_matrix(kColorInversionMatrix);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetColorInversionDisabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Inversion from Settings Service.
settings_service.SetColorInversionEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_inversion_enabled(true);
expected_settings->set_color_adjustment_matrix(kColorInversionMatrix);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Disable Color Correction from Settings Service.
settings_service.SetColorInversionEnabled(
false, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_inversion_enabled(false);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetColorCorrection) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Correction from Settings Service.
settings_service.SetColorCorrection(fuchsia::accessibility::ColorCorrection::CORRECT_PROTANOMALY,
[&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_correction(
fuchsia::accessibility::ColorCorrection::CORRECT_PROTANOMALY);
expected_settings->set_color_adjustment_matrix(kCorrectProtanomaly);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, SetColorCorrection_Disabled) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Correction from Settings Service.
settings_service.SetColorCorrection(fuchsia::accessibility::ColorCorrection::CORRECT_PROTANOMALY,
[&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_correction(
fuchsia::accessibility::ColorCorrection::CORRECT_PROTANOMALY);
expected_settings->set_color_adjustment_matrix(kCorrectProtanomaly);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Change Color Correction back to Disabled.
settings_service.SetColorCorrection(fuchsia::accessibility::ColorCorrection::DISABLED,
[&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_correction(fuchsia::accessibility::ColorCorrection::DISABLED);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
// Check if watchers can register before a SettingService.
TEST_F(SettingsManagerTest, WatcherRegisteredBeforeSettingService) {
auto status = SettingsManagerStatus::OK;
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
RunLoopUntilIdle();
// Enable Magnification from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, WatcherRegisteredAfterSettingsAreModified) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Enable Magnification from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Check Settings in Watcher to make sure it is updated.
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
TEST_F(SettingsManagerTest, MultipleWatchers) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
// Add first watcher.
MockSettingsWatcher first_watcher(GetContextProvider());
RunLoopUntilIdle();
// Add second watcher.
MockSettingsWatcher second_watcher(GetContextProvider());
RunLoopUntilIdle();
// Check Settings in Watcher is same as the default settings, since nothing
// has changed.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(first_watcher.IsSame(std::move(expected_settings)));
}
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(second_watcher.IsSame(std::move(expected_settings)));
}
// Enable Magnification from Settings Service.
settings_service.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(first_watcher.IsSame(std::move(expected_settings)));
}
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(second_watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, MultipleSettingsService_UseLastOne) {
auto status = SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service_first(GetContextProvider());
RunLoopUntilIdle();
// Create second Settings service.
MockSettingsService settings_service_second(GetContextProvider());
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Check Settings in Watcher is same as the default settings, since nothing
// has changed.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Enable Magnification from First Settings Service. This should have no
// effect on settings, since this no longer registered to Settings Manager.
FXL_LOG(INFO) << "Following FIDL error message is expected since a FIDL call "
"is made on a channel which no longer exist.";
settings_service_first.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
// Check Settings in Watcher. Settings should not change..
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
// Enable Magnification from second Settings Service. This should change
// Settings.
settings_service_second.SetMagnificationEnabled(
true, [&status](SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure it is updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_magnification_enabled(true);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, ColorAdjustmentMatrix_ProtanomalyAndInversionOn) {
auto status = fuchsia::accessibility::SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
RunLoopUntilIdle();
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Inversion from Settings Service.
settings_service.SetColorInversionEnabled(
true, [&status](fuchsia::accessibility::SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, fuchsia::accessibility::SettingsManagerStatus::OK);
// Enable Color Correction - Protanomaly.
settings_service.SetColorCorrection(
fuchsia::accessibility::ColorCorrection::CORRECT_PROTANOMALY,
[&status](fuchsia::accessibility::SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, fuchsia::accessibility::SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure its updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_inversion_enabled(true);
expected_settings->set_color_correction(
fuchsia::accessibility::ColorCorrection::CORRECT_PROTANOMALY);
expected_settings->set_color_adjustment_matrix(kProtanomalyAndInversion);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, ColorAdjustmentMatrix_DeuteranomalyAndInversionOn) {
auto status = fuchsia::accessibility::SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
RunLoopUntilIdle();
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Inversion from Settings Service.
settings_service.SetColorInversionEnabled(
true, [&status](fuchsia::accessibility::SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, fuchsia::accessibility::SettingsManagerStatus::OK);
// Enable Color Correction - Deuteranomaly.
settings_service.SetColorCorrection(
fuchsia::accessibility::ColorCorrection::CORRECT_DEUTERANOMALY,
[&status](fuchsia::accessibility::SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, fuchsia::accessibility::SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure its updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_inversion_enabled(true);
expected_settings->set_color_correction(
fuchsia::accessibility::ColorCorrection::CORRECT_DEUTERANOMALY);
expected_settings->set_color_adjustment_matrix(kDeuteranomalyAndInversion);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
TEST_F(SettingsManagerTest, ColorAdjustmentMatrix_TritanomalyAndInversionOn) {
auto status = fuchsia::accessibility::SettingsManagerStatus::OK;
// Create Settings Service.
MockSettingsService settings_service(GetContextProvider());
RunLoopUntilIdle();
// Add a watcher.
MockSettingsWatcher watcher(GetContextProvider());
RunLoopUntilIdle();
// Enable Color Inversion from Settings Service.
settings_service.SetColorInversionEnabled(
true, [&status](fuchsia::accessibility::SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, fuchsia::accessibility::SettingsManagerStatus::OK);
// Enable Color Correction - Tritanomaly.
settings_service.SetColorCorrection(
fuchsia::accessibility::ColorCorrection::CORRECT_TRITANOMALY,
[&status](fuchsia::accessibility::SettingsManagerStatus retval) { status = retval; });
RunLoopUntilIdle();
ASSERT_EQ(status, fuchsia::accessibility::SettingsManagerStatus::OK);
// Check Settings in Watcher to make sure its updated.
{
auto expected_settings = fuchsia::accessibility::Settings::New();
default_settings_.Clone(expected_settings.get());
expected_settings->set_color_inversion_enabled(true);
expected_settings->set_color_correction(
fuchsia::accessibility::ColorCorrection::CORRECT_TRITANOMALY);
expected_settings->set_color_adjustment_matrix(kTritanomalyAndInversion);
ASSERT_TRUE(watcher.IsSame(std::move(expected_settings)));
}
}
} // namespace accessibility_test