From ab8993a8af6b172fdd7d07d4065866dd436335a5 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Thu, 9 Oct 2025 22:36:33 +0200 Subject: [PATCH] Correction des tests unitaires --- pmoapp/src/lib.rs | 15 +++++++------ pmoapp/src/pmoserver_impl.rs | 4 ++-- pmoserver/src/lib.rs | 11 +++++----- pmoserver/src/server.rs | 22 ++++++++++---------- pmoupnp/src/actions/action_handler.rs | 21 +++++++++++-------- pmoupnp/src/actions/action_instance.rs | 6 +++--- pmoupnp/src/actions/action_methods.rs | 6 +++--- pmoupnp/src/mediarenderer/avtransport/mod.rs | 1 + pmoupnp/src/object_set.rs | 20 +++++++++--------- pmoupnp/src/services/mod.rs | 3 +++ pmoupnp/src/services/service_instance.rs | 15 ++++++------- pmoutils/src/ip_utils.rs | 4 ++++ pmoutils/src/lib.rs | 4 ++-- 13 files changed, 71 insertions(+), 61 deletions(-) diff --git a/pmoapp/src/lib.rs b/pmoapp/src/lib.rs index 39461829..d9353128 100644 --- a/pmoapp/src/lib.rs +++ b/pmoapp/src/lib.rs @@ -99,14 +99,13 @@ //! //! ### Exemple basique //! -//! ```rust,no_run +//! ```rust,ignore //! use pmoapp::Webapp; //! use pmoserver::ServerBuilder; //! //! #[tokio::main] //! async fn main() { -//! let mut server = ServerBuilder::new("MyApp") -//! .http_port(8080) +//! let mut server = ServerBuilder::new("MyApp", "http://localhost", 8080) //! .build(); //! //! // Ajouter la webapp comme Single Page Application @@ -122,7 +121,7 @@ //! //! ### Exemple avec logs SSE //! -//! ```rust,no_run +//! ```rust,ignore //! use pmoapp::Webapp; //! use pmoserver::{ServerBuilder, logs::{LogState, SseLayer}}; //! use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; @@ -136,7 +135,7 @@ //! .with(SseLayer::new(log_state.clone())) //! .init(); //! -//! let mut server = ServerBuilder::new("MyApp").build(); +//! let mut server = ServerBuilder::new("MyApp", "http://localhost", 8080).build(); //! //! // Endpoints SSE pour les logs //! server.add_handler_with_state("/log-sse", pmoserver::logs::log_sse, log_state.clone()).await; @@ -193,7 +192,7 @@ //! //! Le composant LogView détecte automatiquement le XML dans les messages : //! -//! ``` +//! ```text //! Input: "INFO: ..." //! Output: Bloc de code avec coloration syntaxique XML //! ``` @@ -249,12 +248,12 @@ use std::pin::Pin; /// /// ## Exemple /// -/// ```rust,no_run +/// ```rust,ignore /// use pmoapp::{Webapp, WebAppExt}; /// use pmoserver::ServerBuilder; /// /// # async fn example() { -/// let mut server = ServerBuilder::new("MyApp").build(); +/// let mut server = ServerBuilder::new("MyApp", "http://localhost", 8080).build(); /// /// // Ajouter la webapp via le trait WebAppExt /// server.add_webapp::("/app").await; diff --git a/pmoapp/src/pmoserver_impl.rs b/pmoapp/src/pmoserver_impl.rs index e7fa32a5..d66f4d31 100644 --- a/pmoapp/src/pmoserver_impl.rs +++ b/pmoapp/src/pmoserver_impl.rs @@ -12,12 +12,12 @@ //! //! ## Exemple d'utilisation //! -//! ```rust,no_run +//! ```rust,ignore //! use pmoapp::{Webapp, WebAppExt}; //! use pmoserver::ServerBuilder; //! //! # async fn example() { -//! let mut server = ServerBuilder::new("MyApp").build(); +//! let mut server = ServerBuilder::new("MyApp", "http://localhost", 8080).build(); //! //! // Le trait WebAppExt est automatiquement disponible //! server.add_webapp::("/app").await; diff --git a/pmoserver/src/lib.rs b/pmoserver/src/lib.rs index 9cea71a4..221752ea 100644 --- a/pmoserver/src/lib.rs +++ b/pmoserver/src/lib.rs @@ -23,21 +23,20 @@ //! //! ## Exemple d'utilisation //! -//! ```rust,no_run +//! ```rust,ignore //! use pmoserver::{ServerBuilder, logs::{LogState, SseLayer}}; //! use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; //! //! #[tokio::main] //! async fn main() { //! // Configuration des logs avec SSE -//! let log_state = LogState::new(); +//! let log_state = LogState::new(1000); //! tracing_subscriber::registry() //! .with(SseLayer::new(log_state.clone())) //! .init(); //! //! // Création et démarrage du serveur -//! let mut server = ServerBuilder::new("MyServer") -//! .http_port(8080) +//! let mut server = ServerBuilder::new("MyServer", "http://localhost", 8080) //! .build(); //! //! // Ajout d'une route JSON @@ -56,12 +55,12 @@ //! L'implémentation est fournie par `pmoupnp` (feature `pmoserver`), permettant //! de connecter des devices UPnP sans que `pmoserver` dépende de `pmoupnp` : //! -//! ```rust,no_run +//! ```rust,ignore //! use pmoupnp::{UpnpServer, mediarenderer::MEDIA_RENDERER}; //! use pmoserver::ServerBuilder; //! //! # async fn example() { -//! let mut server = ServerBuilder::new("MediaRenderer").build(); +//! let mut server = ServerBuilder::new("MediaRenderer", "http://localhost", 8080).build(); //! let device = MEDIA_RENDERER.create_instance(); //! //! // Le trait UpnpServer est automatiquement disponible (implémenté dans pmoupnp) diff --git a/pmoserver/src/server.rs b/pmoserver/src/server.rs index 3f8f559a..31449391 100644 --- a/pmoserver/src/server.rs +++ b/pmoserver/src/server.rs @@ -60,7 +60,7 @@ impl Server { /// # Exemple /// /// ```rust - /// # use pmoupnp::server::Server; + /// # use pmoserver::Server; /// let server = Server::new("MyAPI", "http://localhost:3000", 3000); /// ``` pub fn new(name: impl Into, base_url: impl Into, http_port: u16) -> Self { @@ -94,8 +94,8 @@ impl Server { /// /// # Exemple /// - /// ```rust,no_run - /// # use pmoupnp::server::Server; + /// ```rust,ignore + /// # use pmoserver::Server; /// # #[tokio::main] /// # async fn main() { /// # let mut server = Server::new("Test", "http://localhost:3000", 3000); @@ -218,8 +218,8 @@ impl Server { /// /// # Exemple avec Vue.js /// - /// ```rust,no_run - /// # use pmoupnp::server::Server; + /// ```rust,ignore + /// # use pmoserver::Server; /// # use rust_embed::RustEmbed; /// #[derive(RustEmbed, Clone)] /// #[folder = "webapp/dist"] // Build output de Vue.js @@ -273,8 +273,8 @@ impl Server { /// /// # Exemple /// - /// ```rust,no_run - /// # use pmoupnp::server::Server; + /// ```rust,ignore + /// # use pmoserver::Server; /// # #[tokio::main] /// # async fn main() { /// # let mut server = Server::new("Test", "http://localhost:3000", 3000); @@ -417,8 +417,8 @@ impl Server { /// /// # Exemple /// - /// ```rust,no_run - /// # use pmoupnp::server::Server; + /// ```rust,ignore + /// # use pmoserver::Server; /// # #[tokio::main] /// # async fn main() { /// # let mut server = Server::new("Test", "http://localhost:3000", 3000); @@ -480,7 +480,7 @@ impl Server { /// /// # Exemple /// - /// ```rust,no_run + /// ```rust,ignore /// # use pmoserver::{ServerBuilder, logs::LoggingOptions}; /// # #[tokio::main] /// # async fn main() { @@ -550,7 +550,7 @@ impl ServerBuilder { /// # Exemple /// /// ```rust - /// # use pmoupnp::server::ServerBuilder; + /// # use pmoserver::ServerBuilder; /// let mut server = ServerBuilder::new("MyAPI", "http://localhost:3000", 3000) /// .build(); /// ``` diff --git a/pmoupnp/src/actions/action_handler.rs b/pmoupnp/src/actions/action_handler.rs index 1007a205..66a2be67 100644 --- a/pmoupnp/src/actions/action_handler.rs +++ b/pmoupnp/src/actions/action_handler.rs @@ -20,20 +20,21 @@ //! //! ```rust //! use pmoupnp::action_handler; +//! use pmoupnp::actions::ActionError; //! use std::collections::HashMap; //! use std::sync::Arc; //! //! // Créer un handler avec la macro -//! let handler = action_handler!(|data| { +//! let handler = action_handler!(|instance, data| { //! // Traiter les données -//! data +//! Ok::<(), ActionError>(()) //! }); //! //! // Ou manuellement -//! use pmoupnp::actions::{ActionData, ActionHandler}; -//! let manual_handler: ActionHandler = Arc::new(|data| { +//! use pmoupnp::actions::{ActionData, ActionHandler, ActionInstance}; +//! let manual_handler: ActionHandler = Arc::new(|instance, data| { //! Box::pin(async move { -//! data +//! Ok::<(), ActionError>(()) //! }) //! }); //! ``` @@ -144,22 +145,24 @@ pub type ActionFuture = Pin(()) /// }); /// ``` /// /// ## Manuellement /// -/// ```rust,no_run -/// use pmoupnp::actions::{ActionData, ActionHandler, ActionInstance}; +/// ```rust +/// use pmoupnp::actions::{ActionData, ActionHandler, ActionInstance, ActionError}; /// use std::sync::Arc; /// /// let handler: ActionHandler = Arc::new(|instance, data| { /// Box::pin(async move { /// // Votre logique async -/// // Pas de return nécessaire +/// Ok::<(), ActionError>(()) /// }) /// }); /// ``` diff --git a/pmoupnp/src/actions/action_instance.rs b/pmoupnp/src/actions/action_instance.rs index fb973ea8..0581be48 100644 --- a/pmoupnp/src/actions/action_instance.rs +++ b/pmoupnp/src/actions/action_instance.rs @@ -122,8 +122,8 @@ impl ActionInstance { /// /// # Examples /// - /// ```rust,no_run - /// # use pmoupnp::actions::Action; + /// ```rust + /// # use pmoupnp::actions::{Action, ActionInstance}; /// # use pmoupnp::UpnpInstance; /// # use std::sync::Arc; /// let action = Action::new("GetVolume".to_string()); @@ -192,7 +192,7 @@ impl ActionInstance { /// # Examples /// /// ```rust,no_run - /// # use pmoupnp::actions::{Action, ActionData}; + /// # use pmoupnp::actions::{Action, ActionData, ActionInstance}; /// # use pmoupnp::UpnpInstance; /// # use std::collections::HashMap; /// # use std::sync::Arc; diff --git a/pmoupnp/src/actions/action_methods.rs b/pmoupnp/src/actions/action_methods.rs index fb6d2c65..1f579ef4 100644 --- a/pmoupnp/src/actions/action_methods.rs +++ b/pmoupnp/src/actions/action_methods.rs @@ -146,14 +146,14 @@ impl Action { /// /// # Examples /// - /// ```rust,no_run - /// # use pmoupnp::actions::Action; + /// ```rust,ignore + /// # use pmoupnp::actions::{Action, ActionError}; /// # use pmoupnp::action_handler; /// let mut action = Action::new("Play".to_string()); /// /// let custom_handler = action_handler!(|instance, data| { /// // Logique personnalisée - /// data + /// Ok::<(), ActionError>(()) /// }); /// /// action.set_handler(custom_handler); diff --git a/pmoupnp/src/mediarenderer/avtransport/mod.rs b/pmoupnp/src/mediarenderer/avtransport/mod.rs index ca4aaeca..c7606303 100644 --- a/pmoupnp/src/mediarenderer/avtransport/mod.rs +++ b/pmoupnp/src/mediarenderer/avtransport/mod.rs @@ -66,6 +66,7 @@ //! //! ```rust //! use pmoupnp::mediarenderer::avtransport::AVTTRANSPORT; +//! use pmoupnp::UpnpTyped; //! //! // Accéder au service //! let service = &*AVTTRANSPORT; diff --git a/pmoupnp/src/object_set.rs b/pmoupnp/src/object_set.rs index 2d99ebec..b5651432 100644 --- a/pmoupnp/src/object_set.rs +++ b/pmoupnp/src/object_set.rs @@ -51,7 +51,7 @@ impl UpnpObjectSet { /// /// # Examples /// - /// ``` + /// ```ignore /// let set: UpnpObjectSet = UpnpObjectSet::new(); /// ``` pub fn new() -> Self { @@ -73,7 +73,7 @@ impl UpnpObjectSet { /// /// # Examples /// - /// ``` + /// ```ignore /// let mut set = UpnpObjectSet::new(); /// let obj = Arc::new(MyObject::new("test")); /// set.insert(obj)?; @@ -100,11 +100,11 @@ impl UpnpObjectSet { /// /// # Examples /// - /// ``` + /// ```ignore /// let mut set = UpnpObjectSet::new(); /// let obj1 = Arc::new(MyObject::new("test")); /// let obj2 = Arc::new(MyObject::new("test")); // Même nom - /// + /// /// set.insert_or_replace(obj1); /// set.insert_or_replace(obj2); // Remplace obj1 /// ``` @@ -129,10 +129,10 @@ impl UpnpObjectSet { /// /// # Examples /// - /// ``` + /// ```ignore /// let set = UpnpObjectSet::new(); /// let obj = Arc::new(MyObject::new("test")); - /// + /// /// if set.contains(obj.clone()) { /// println!("L'objet existe déjà"); /// } @@ -157,9 +157,9 @@ impl UpnpObjectSet { /// /// # Examples /// - /// ``` + /// ```ignore /// let set = UpnpObjectSet::new(); - /// + /// /// if let Some(obj) = set.get_by_name("test") { /// println!("Objet trouvé: {}", obj.get_name()); /// } @@ -178,9 +178,9 @@ impl UpnpObjectSet { /// /// # Examples /// - /// ``` + /// ```ignore /// let set = UpnpObjectSet::new(); - /// + /// /// for obj in set.all() { /// println!("Objet: {}", obj.get_name()); /// } diff --git a/pmoupnp/src/services/mod.rs b/pmoupnp/src/services/mod.rs index 9eac0677..700e0804 100644 --- a/pmoupnp/src/services/mod.rs +++ b/pmoupnp/src/services/mod.rs @@ -24,6 +24,7 @@ //! use pmoupnp::services::Service; //! use pmoupnp::state_variables::StateVariable; //! use pmoupnp::variable_types::StateVarType; +//! use pmoupnp::UpnpModel; //! use std::sync::Arc; //! //! // Créer un service @@ -306,6 +307,7 @@ impl Service { /// /// ```rust /// # use pmoupnp::services::Service; + /// # use pmoupnp::UpnpTyped; /// let service = Service::new("AVTransport".to_string()); /// for var in service.variables() { /// println!("Variable: {}", var.get_name()); @@ -347,6 +349,7 @@ impl Service { /// /// ```rust /// # use pmoupnp::services::Service; + /// # use pmoupnp::UpnpTyped; /// let service = Service::new("AVTransport".to_string()); /// for action in service.actions() { /// println!("Action: {}", action.get_name()); diff --git a/pmoupnp/src/services/service_instance.rs b/pmoupnp/src/services/service_instance.rs index c76d2b0c..a335ca23 100644 --- a/pmoupnp/src/services/service_instance.rs +++ b/pmoupnp/src/services/service_instance.rs @@ -77,9 +77,10 @@ pub const METHOD_UNSUBSCRIBE: &str = "UNSUBSCRIBE"; /// /// # Examples /// -/// ```rust,no_run +/// ```rust,ignore /// # use pmoupnp::services::Service; -/// # use pmoupnp::server::Server; +/// # use pmoupnp::UpnpModel; +/// # use pmoserver::Server; /// # use std::time::Duration; /// # #[tokio::main] /// # async fn main() { @@ -337,9 +338,9 @@ impl ServiceInstance { /// /// # Examples /// - /// ```rust,no_run + /// ```rust /// # use pmoupnp::services::Service; - /// # use pmoupnp::UpnpModel; + /// # use pmoupnp::{UpnpModel, UpnpTyped}; /// # let service = Service::new("AVTransport".to_string()); /// # let instance = service.create_instance(); /// if let Some(action) = instance.get_action("Play") { @@ -361,15 +362,15 @@ impl ServiceInstance { /// /// # Examples /// - /// ```rust,no_run + /// ```rust /// # use pmoupnp::services::Service; /// # use pmoupnp::devices::Device; /// # use pmoupnp::UpnpModel; /// # use std::sync::Arc; /// # let service = Service::new("AVTransport".to_string()); - /// # let device = Device::new("MediaRenderer".to_string()); + /// # let device = Device::new("MediaRenderer".to_string(), "urn:schemas-upnp-org:device:MediaRenderer:1".to_string(), "My MediaRenderer".to_string()); /// let service_instance = service.create_instance(); - /// let device_instance = Arc::new(device.create_instance()); + /// let device_instance = device.create_instance(); /// service_instance.set_device(device_instance); /// ``` pub fn set_device(&self, device: Arc) { diff --git a/pmoutils/src/ip_utils.rs b/pmoutils/src/ip_utils.rs index d85c89ab..5328c9b1 100644 --- a/pmoutils/src/ip_utils.rs +++ b/pmoutils/src/ip_utils.rs @@ -21,6 +21,8 @@ use std::net::UdpSocket; /// # Examples /// /// ``` +/// use pmoutils::guess_local_ip; +/// /// let ip = guess_local_ip(); /// println!("IP locale détectée: {}", ip); /// // Affiche par exemple: "IP locale détectée: 192.168.1.42" @@ -62,6 +64,8 @@ pub fn guess_local_ip() -> String { /// # Examples /// /// ``` +/// use pmoutils::ip_utils::list_all_ips; +/// /// let ips = list_all_ips(); /// for (interface, addresses) in ips { /// println!("Interface {}: {:?}", interface, addresses); diff --git a/pmoutils/src/lib.rs b/pmoutils/src/lib.rs index 68b03512..3ae8b4da 100644 --- a/pmoutils/src/lib.rs +++ b/pmoutils/src/lib.rs @@ -10,12 +10,12 @@ /// # Examples /// /// ``` -/// use votre_crate::guess_local_ip; +/// use pmoutils::guess_local_ip; /// /// let ip = guess_local_ip(); /// println!("Adresse IP locale: {}", ip); /// ``` -mod ip_utils; +pub mod ip_utils; pub use ip_utils::guess_local_ip;