#[cfg(test)]
mod tests {
use crate::error::TranslationError;
use crate::microsoft::{MicrosoftConfig, MicrosoftTranslator};
use crate::options::TranslateOptions;
use crate::translator::Translator;
use unic_langid::LanguageIdentifier;
#[tokio::test]
async fn test_microsoft_config_default() {
let config = MicrosoftConfig::default();
assert_eq!(config.endpoint, None);
assert_eq!(config.api_key, None);
assert_eq!(config.concurrent_limit, 10);
}
#[tokio::test]
async fn test_microsoft_translator_creation() {
let config = MicrosoftConfig {
endpoint: None,
api_key: None,
concurrent_limit: 10,
};
let _translator = MicrosoftTranslator::new(config);
assert!(true); }
#[tokio::test]
async fn test_microsoft_translator_direct_translate() {
let config = MicrosoftConfig {
endpoint: None,
api_key: None,
concurrent_limit: 10,
};
let translator = MicrosoftTranslator::new(config);
let target_lang: LanguageIdentifier = "zh".parse().unwrap();
match translator
.translate_text("Hello", &target_lang, None, &TranslateOptions::default())
.await
{
Ok(result) => {
println!("Direct translation result: {}", result);
assert!(!result.is_empty());
}
Err(e) => {
println!("Network error (expected in test): {}", e);
match e {
TranslationError::NetworkError(_) => assert!(true),
_ => assert!(false, "Expected NetworkError"),
}
}
}
}
#[tokio::test]
async fn test_microsoft_translator_with_source_lang() {
let config = MicrosoftConfig {
endpoint: None,
api_key: None,
concurrent_limit: 10,
};
let translator = MicrosoftTranslator::new(config);
let chinese: LanguageIdentifier = "zh-CN".parse().unwrap();
let english: LanguageIdentifier = "en".parse().unwrap();
match translator
.translate_text("Hello", &chinese, None, &TranslateOptions::default())
.await
{
Ok(result) => {
println!("Auto-detect translation result: {}", result);
assert!(!result.is_empty());
}
Err(e) => {
println!("Network error (expected in test): {}", e);
match e {
TranslationError::NetworkError(_) => assert!(true),
_ => assert!(false, "Expected NetworkError"),
}
}
}
match translator
.translate_text(
"Hello",
&chinese,
Some(&english),
&TranslateOptions::default(),
)
.await
{
Ok(result) => {
println!("Translation with source lang result: {}", result);
assert!(!result.is_empty());
}
Err(e) => {
println!("Network error (expected in test): {}", e);
match e {
TranslationError::NetworkError(_) => assert!(true),
_ => assert!(false, "Expected NetworkError"),
}
}
}
}
#[tokio::test]
async fn test_microsoft_translator_batch_translate() {
let config = MicrosoftConfig {
endpoint: None,
api_key: None,
concurrent_limit: 10,
};
let translator = MicrosoftTranslator::new(config);
let texts = vec!["Hello", "World"];
let target_lang: LanguageIdentifier = "zh-CN".parse().unwrap();
match translator
.translate_batch(&texts, &target_lang, None, &TranslateOptions::default())
.await
{
Ok(results) => {
println!("Batch translation results: {:?}", results);
assert!(true);
}
Err(e) => {
println!("Network error (expected in test): {}", e);
match e {
TranslationError::NetworkError(_) => assert!(true),
_ => assert!(false, "Expected NetworkError"),
}
}
}
}
#[tokio::test]
async fn test_microsoft_translator_trait_translate() {
let config = MicrosoftConfig {
endpoint: None,
api_key: None,
concurrent_limit: 10,
};
let translator = MicrosoftTranslator::new(config);
let target_lang: LanguageIdentifier = "zh".parse().unwrap();
match translator.translate("Hello", &target_lang, None).await {
Ok(result) => {
println!("Trait translation result: {}", result);
assert!(!result.is_empty());
}
Err(e) => {
println!("Network error (expected in test): {}", e);
match e {
TranslationError::NetworkError(_) => assert!(true),
_ => assert!(false, "Expected NetworkError"),
}
}
}
}
#[tokio::test]
async fn test_token_caching() {
let config = MicrosoftConfig {
api_key: None, ..Default::default()
};
let translator = MicrosoftTranslator::new(config);
let token1 = translator.get_auth_token().await;
assert!(token1.is_ok());
let token2 = translator.get_auth_token().await;
assert!(token2.is_ok());
assert_eq!(token1.unwrap(), token2.unwrap());
translator.clear_cached_token().await;
let token3 = translator.get_auth_token().await;
assert!(token3.is_ok());
}
}