100 exercises to learn Rust
This commit is contained in:
41
exercises/05_ticket_v2/15_outro/src/title.rs
Normal file
41
exercises/05_ticket_v2/15_outro/src/title.rs
Normal file
@@ -0,0 +1,41 @@
|
||||
// TODO: Implement `TryFrom<String>` and `TryFrom<&str>` for the `TicketTitle` type,
|
||||
// enforcing that the title is not empty and is not longer than 50 characters.
|
||||
// Implement the traits required to make the tests pass too.
|
||||
|
||||
pub struct TicketTitle(String);
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use std::convert::TryFrom;
|
||||
|
||||
#[test]
|
||||
fn test_try_from_string() {
|
||||
let title = TicketTitle::try_from("A title".to_string()).unwrap();
|
||||
assert_eq!(title.0, "A title");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_try_from_empty_string() {
|
||||
let err = TicketTitle::try_from("".to_string()).unwrap_err();
|
||||
assert_eq!(err.to_string(), "The title cannot be empty");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_try_from_long_string() {
|
||||
let title =
|
||||
"A title that's definitely longer than what should be allowed in a development ticket"
|
||||
.to_string();
|
||||
let err = TicketTitle::try_from(title).unwrap_err();
|
||||
assert_eq!(
|
||||
err.to_string(),
|
||||
"The title cannot be longer than 50 characters"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_try_from_str() {
|
||||
let title = TicketTitle::try_from("A title").unwrap();
|
||||
assert_eq!(title.0, "A title");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user