diff --git a/data/test-orca-settings.conf b/data/test-orca-settings.conf new file mode 100644 index 0000000..f992708 --- /dev/null +++ b/data/test-orca-settings.conf @@ -0,0 +1,150 @@ +{ + "general": { + "orcaModifierKeys": [ + "Insert", + "KP_Insert" + ], + "enableSpeech": true, + "onlySpeakDisplayedText": false, + "speechServerFactory": "speechdispatcherfactory", + "speechServerInfo": null, + "voices": { + "default": { + "established": false + }, + "uppercase": { + "average-pitch": 7.0 + }, + "hyperlink": { + "established": false + }, + "system": { + "established": false + } + }, + "speechVerbosityLevel": 1, + "readFullRowInGUITable": true, + "readFullRowInDocumentTable": true, + "readFullRowInSpreadSheet": false, + "enableSpeechIndentation": false, + "enableEchoByCharacter": false, + "enableEchoByWord": false, + "enableEchoBySentence": false, + "enableKeyEcho": true, + "enableAlphabeticKeys": true, + "enableNumericKeys": true, + "enablePunctuationKeys": true, + "enableSpace": true, + "enableModifierKeys": true, + "enableFunctionKeys": true, + "enableActionKeys": true, + "enableNavigationKeys": false, + "enableDiacriticalKeys": false, + "enablePauseBreaks": true, + "enableTutorialMessages": true, + "enableMnemonicSpeaking": false, + "enablePositionSpeaking": false, + "enableBraille": true, + "disableBrailleEOL": false, + "brailleVerbosityLevel": 1, + "brailleRolenameStyle": 1, + "brailleSelectorIndicator": 192, + "brailleLinkIndicator": 192, + "enableSound": true, + "soundVolume": 0.5, + "playSoundForRole": false, + "playSoundForState": false, + "playSoundForPositionInSet": false, + "playSoundForValue": false, + "verbalizePunctuationStyle": 1, + "presentToolTips": false, + "sayAllStyle": 1, + "keyboardLayout": 1, + "speakBlankLines": true, + "speakNumbersAsDigits": false, + "speakMisspelledIndicator": true, + "textAttributesToSpeak": [], + "textAttributesToBraille": [], + "textAttributesBrailleIndicator": 0, + "profile": [ + "Default", + "default" + ], + "speakProgressBarUpdates": true, + "brailleProgressBarUpdates": false, + "beepProgressBarUpdates": false, + "progressBarUpdateInterval": 10, + "progressBarVerbosity": 1, + "ignoreStatusBarProgressBars": true, + "enableBrailleWordWrap": false, + "enableContractedBraille": false, + "brailleContractionTable": "", + "enableMouseReview": false, + "speakCellCoordinates": true, + "speakSpreadsheetCoordinates": true, + "alwaysSpeakSelectedSpreadsheetRange": false, + "speakCellSpan": true, + "speakCellHeaders": true, + "skipBlankCells": false, + "largeObjectTextLength": 75, + "structuralNavigationEnabled": true, + "wrappedStructuralNavigation": true, + "chatMessageVerbosity": 0, + "chatSpeakRoomName": false, + "chatAnnounceBuddyTyping": false, + "chatRoomHistories": false, + "enableFlashMessages": true, + "brailleFlashTime": 5000, + "flashIsPersistent": false, + "flashIsDetailed": true, + "messagesAreDetailed": true, + "presentDateFormat": "%x", + "presentTimeFormat": "%X", + "activeProfile": [ + "Default", + "default" + ], + "startingProfile": [ + "Default", + "default" + ], + "spellcheckSpellError": true, + "spellcheckSpellSuggestion": true, + "spellcheckPresentContext": true, + "useColorNames": true, + "capitalizationStyle": "none", + "findResultsVerbosity": 2, + "findResultsMinimumLength": 4, + "structNavTriggersFocusMode": false, + "caretNavTriggersFocusMode": false, + "layoutMode": true, + "nativeNavTriggersFocusMode": true, + "rewindAndFastForwardInSayAll": false, + "structNavInSayAll": false, + "speakDescription": true, + "speakContextBlockquote": true, + "speakContextPanel": true, + "speakContextLandmark": true, + "speakContextNonLandmarkForm": true, + "speakContextList": true, + "speakContextTable": true, + "sayAllContextBlockquote": true, + "sayAllContextPanel": true, + "sayAllContextLandmark": true, + "sayAllContextNonLandmarkForm": true, + "sayAllContextList": true, + "sayAllContextTable": true + }, + "profiles": { + "default": { + "profile": [ + "Default", + "default" + ], + "pronunciations": {}, + "keybindings": {} + } + }, + "pronunciations": {}, + "keybindings": {} +} \ No newline at end of file diff --git a/src/screenreader.rs b/src/screenreader.rs index 1fe8759..4e50a82 100644 --- a/src/screenreader.rs +++ b/src/screenreader.rs @@ -93,6 +93,7 @@ impl<'dbus> OrcaManager<'dbus> { return Ok(()); } + #[cfg(not(test))] { let a11ysettings = Settings::new(A11Y_SETTING); a11ysettings @@ -261,13 +262,114 @@ impl<'dbus> OrcaManager<'dbus> { Ok(write(self.settings_path()?, data.as_bytes()).await?) } + #[cfg(not(test))] async fn restart_orca(&self) -> Result<()> { trace!("Restarting orca..."); self.orca_unit.restart().await } + #[cfg(test)] + async fn restart_orca(&self) -> Result<()> { + Ok(()) + } + + #[cfg(not(test))] async fn stop_orca(&self) -> Result<()> { trace!("Stopping orca..."); self.orca_unit.stop().await } + + #[cfg(test)] + async fn stop_orca(&self) -> Result<()> { + Ok(()) + } + +} + +#[cfg(test)] +mod test { + use super::*; + use crate::testing; + use tokio::fs::symlink; + + #[tokio::test] + async fn test_enable_disable() { + let mut h = testing::start(); + let _ = symlink("data/test-orca-settings.conf", h.test.path().join("orca-settings.conf")).await; + let mut manager = + OrcaManager::new(&h.new_dbus().await.expect("new_dbus")) + .await + .expect("OrcaManager::new"); + let enable_result = manager.set_enabled(true).await; + assert!(enable_result.is_ok()); + assert_eq!(manager.enabled(), true); + + let disable_result = manager.set_enabled(false).await; + assert!(disable_result.is_ok()); + assert_eq!(manager.enabled(), false); + } + + #[tokio::test] + async fn test_pitch() { + let mut h = testing::start(); + let _ = symlink("data/test-orca-settings.conf", h.test.path().join("orca-settings.conf")).await; + let mut manager = + OrcaManager::new(&h.new_dbus().await.expect("new_dbus")) + .await + .expect("OrcaManager::new"); + let set_result = manager.set_pitch(5.0).await; + assert!(set_result.is_ok()); + assert_eq!(manager.pitch(), 5.0); + + let too_low_result = manager.set_pitch(-1.0).await; + assert!(too_low_result.is_err()); + assert_eq!(manager.pitch(), 5.0); + + let too_high_result = manager.set_pitch(12.0).await; + assert!(too_high_result.is_err()); + assert_eq!(manager.pitch(), 5.0); + } + + #[tokio::test] + async fn test_rate() { + let mut h = testing::start(); + let _ = symlink("data/test-orca-settings.conf", h.test.path().join("orca-settings.conf")).await; + let mut manager = + OrcaManager::new(&h.new_dbus().await.expect("new_dbus")) + .await + .expect("OrcaManager::new"); + let set_result = manager.set_rate(5.0).await; + assert!(set_result.is_ok()); + assert_eq!(manager.rate(), 5.0); + + let too_low_result = manager.set_rate(-1.0).await; + assert!(too_low_result.is_err()); + assert_eq!(manager.rate(), 5.0); + + let too_high_result = manager.set_rate(101.0).await; + assert!(too_high_result.is_err()); + assert_eq!(manager.rate(), 5.0); + } + + #[tokio::test] + async fn test_volume() { + let mut h = testing::start(); + let _ = symlink("data/test-orca-settings.conf", h.test.path().join("orca-settings.conf")).await; + let mut manager = + OrcaManager::new(&h.new_dbus().await.expect("new_dbus")) + .await + .expect("OrcaManager::new"); + let set_result = manager.set_volume(5.0).await; + assert!(set_result.is_ok()); + assert_eq!(manager.volume(), 5.0); + + let too_low_result = manager.set_volume(-1.0).await; + assert!(too_low_result.is_err()); + assert_eq!(manager.volume(), 5.0); + + let too_high_result = manager.set_volume(12.0).await; + assert!(too_high_result.is_err()); + assert_eq!(manager.volume(), 5.0); + } + }