From ef5f6acab835727e27a846e9bbe5308ee1c578b2 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Sun, 26 May 2019 19:03:53 +0000 Subject: [PATCH] Add tests for Context. --- src/context.rs | 22 ++++++++++++++++++++++ src/room.rs | 8 ++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/context.rs b/src/context.rs index 28c7649..776605a 100644 --- a/src/context.rs +++ b/src/context.rs @@ -7,6 +7,8 @@ use crate::room::RoomMap; use crate::user::UserMap; /// Contains all the different bits of client state. +/// +/// Implements `Sync`. pub struct Context { pub rooms: Mutex, pub users: Mutex, @@ -21,3 +23,23 @@ impl Context { } } } + +#[cfg(test)] +mod tests { + use std::thread; + use std::sync::Arc; + + use super::Context; + + #[test] + fn new_context_is_empty() { + let context = Context::new(); + assert_eq!(context.rooms.lock().get_room_list(), vec![]); + assert_eq!(context.users.lock().get_list(), vec![]); + } + + #[test] + fn context_is_sync() { + let sync: &dyn Sync = &Context::new(); + } +} diff --git a/src/room.rs b/src/room.rs index 5b6aab2..882d293 100644 --- a/src/room.rs +++ b/src/room.rs @@ -6,7 +6,7 @@ use std::mem; use crate::proto::{server, User}; /// This enumeration is the list of possible membership states for a chat room. -#[derive(Clone, Copy, Debug, RustcDecodable, RustcEncodable)] +#[derive(Clone, Copy, Debug, Eq, PartialEq, RustcDecodable, RustcEncodable)] pub enum Membership { /// The user is not a member of this room. NonMember, @@ -22,7 +22,7 @@ pub enum Membership { /// This enumeration is the list of visibility types for rooms that the user is /// a member of. -#[derive(Clone, Copy, Debug, RustcDecodable, RustcEncodable)] +#[derive(Clone, Copy, Debug, Eq, PartialEq, RustcDecodable, RustcEncodable)] pub enum Visibility { /// This room is visible to any user. Public, @@ -33,7 +33,7 @@ pub enum Visibility { } /// This structure contains a chat room message. -#[derive(Clone, Debug, RustcDecodable, RustcEncodable)] +#[derive(Clone, Debug, Eq, PartialEq, RustcDecodable, RustcEncodable)] pub struct Message { pub user_name: String, pub message: String, @@ -42,7 +42,7 @@ pub struct Message { /// This structure contains the last known information about a chat room. /// It does not store the name, as that is stored implicitly as the key in the /// room hash table. -#[derive(Clone, Debug, RustcDecodable, RustcEncodable)] +#[derive(Clone, Debug, Eq, PartialEq, RustcDecodable, RustcEncodable)] pub struct Room { /// The membership state of the user for the room. pub membership: Membership,