blob: a9746123b6f160c319535c9fba9f51866d5e506b [file] [log] [blame]
// Copyright 2021 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.
use crate::interface_tests::Services;
use crate::interface_tests::ENV_NAME;
use crate::night_mode;
use anyhow::{Context as _, Error};
use fidl_fuchsia_settings::{NightModeMarker, NightModeRequest, NightModeSettings};
use fuchsia_async as fasync;
use fuchsia_component::server::ServiceFs;
use futures::prelude::*;
async fn validate_night_mode(expected_night_mode_enabled: Option<bool>) -> Result<(), Error> {
let env = create_service!(
Services::NightMode, NightModeRequest::Set { settings, responder, } => {
if let (Some(night_mode_enabled), Some(expected_night_mode_enabled_value)) =
(settings.night_mode_enabled, expected_night_mode_enabled) {
assert_eq!(night_mode_enabled, expected_night_mode_enabled_value);
responder.send(&mut Ok(()))?;
} else {
panic!("Unexpected call to set");
}
},
NightModeRequest::Watch { responder } => {
responder.send(NightModeSettings {
night_mode_enabled: Some(false),
..NightModeSettings::EMPTY
})?;
}
);
let night_mode_service = env
.connect_to_protocol::<NightModeMarker>()
.context("Failed to connect to night mode service")?;
assert_successful!(night_mode::command(night_mode_service, expected_night_mode_enabled));
Ok(())
}
async fn validate_night_mode_set_output(expected_night_mode_enabled: bool) -> Result<(), Error> {
let env = create_service!(
Services::NightMode, NightModeRequest::Set { settings: _, responder, } => {
responder.send(&mut Ok(()))?;
},
NightModeRequest::Watch { responder } => {
responder.send(NightModeSettings {
night_mode_enabled: Some(expected_night_mode_enabled),
..NightModeSettings::EMPTY
})?;
}
);
let night_mode_service = env
.connect_to_protocol::<NightModeMarker>()
.context("Failed to connect to night mode service")?;
let output =
assert_set!(night_mode::command(night_mode_service, Some(expected_night_mode_enabled)));
assert_eq!(
output,
format!("Successfully set night_mode_enabled to {}", expected_night_mode_enabled)
);
Ok(())
}
async fn validate_night_mode_watch_output(
expected_night_mode_enabled: Option<bool>,
) -> Result<(), Error> {
let env = create_service!(
Services::NightMode, NightModeRequest::Set { settings: _, responder, } => {
responder.send(&mut Ok(()))?;
},
NightModeRequest::Watch { responder } => {
responder.send(NightModeSettings {
night_mode_enabled: expected_night_mode_enabled,
..NightModeSettings::EMPTY
})?;
}
);
let night_mode_service = env
.connect_to_protocol::<NightModeMarker>()
.context("Failed to connect to night_mode service")?;
let output = assert_watch!(night_mode::command(night_mode_service, None));
assert_eq!(
output,
format!(
"{:#?}",
NightModeSettings {
night_mode_enabled: expected_night_mode_enabled,
..NightModeSettings::EMPTY
}
)
);
Ok(())
}
#[fuchsia_async::run_until_stalled(test)]
async fn test_night_mode() -> Result<(), Error> {
println!("night mode service tests");
println!(" client calls night mode watch");
validate_night_mode(None).await?;
println!(" client calls set night_mode_enabled");
validate_night_mode(Some(true)).await?;
println!(" set() output");
validate_night_mode_set_output(true).await?;
validate_night_mode_set_output(false).await?;
println!(" watch() output");
validate_night_mode_watch_output(None).await?;
validate_night_mode_watch_output(Some(true)).await?;
validate_night_mode_watch_output(Some(false)).await?;
Ok(())
}