use indoc::indoc; use mit_commit::{ Bodies, Body, Comment, Comments, CommitMessage, Fragment, Subject, Trailer, Trailers, }; const TRAILING_EMPTY_NEWLINES: &str = indoc!( " Update bashrc to include kubernetes completions This should make it easier to deploy things for the developers. Benchmarked with Hyperfine, no noticable performance decrease. Co-authored-by: Billie Thomposon Co-authored-by: Somebody Else # Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen, # die mit '#' beginnen, werden ignoriert, und eine leere Beschreibung # bricht den Commit ab. # # Datum: Sat Jun 27 21:40:14 2020 +0200 # # Auf Branch master # # Initialer Commit # # Zum Commit vorgemerkte \u{00E4}nderungen: # neue Datei: .bashrc # " ); #[test] fn can_reliably_parse_from_trailing_empty_newlines() { let first_commit_message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); let string_version_of_commit = String::from(first_commit_message.clone()); let second_commit_message = CommitMessage::from(string_version_of_commit.clone()); assert_eq!(string_version_of_commit, TRAILING_EMPTY_NEWLINES); assert_eq!(first_commit_message, second_commit_message); } #[test] fn can_get_ast_from_trailing_empty_newlines() { let message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); let ast: Vec = vec![ Fragment::Body(Body::from("Update bashrc to include kubernetes completions")), Fragment::Body(Body::default()), Fragment::Body(Body::from("This should make it easier to deploy things for the developers.\nBenchmarked with Hyperfine, no noticable performance decrease.")), Fragment::Body(Body::default()), Fragment::Body(Body::from("Co-authored-by: Billie Thomposon \nCo-authored-by: Somebody Else ")), Fragment::Body(Body::default()), Fragment::Comment(Comment::from("# Bitte geben Sie eine Commit-Beschreibung f\u{fc}r Ihre \u{e4}nderungen ein. Zeilen,\n# die mit \'#\' beginnen, werden ignoriert, und eine leere Beschreibung\n# bricht den Commit ab.\n#\n# Datum: Sat Jun 27 21:40:14 2020 +0200\n#\n# Auf Branch master\n#\n# Initialer Commit\n#\n# Zum Commit vorgemerkte \u{e4}nderungen:\n#\tneue Datei: .bashrc\n#")), Fragment::Body(Body::default()), Fragment::Body(Body::default()), Fragment::Body(Body::default()), ]; assert_eq!(message.get_ast(), ast); } #[test] fn can_get_subject_from_trailing_empty_newlines() { let message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); assert_eq!( message.get_subject(), Subject::from("Update bashrc to include kubernetes completions") ); } #[test] fn can_get_body_from_trailing_empty_newlines() { let message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); assert_eq!( message.get_body(), Bodies::from(vec![ Body::default(), Body::from(indoc!( " This should make it easier to deploy things for the developers. Benchmarked with Hyperfine, no noticable performance decrease." )), ]) ); } #[test] fn can_get_scissors_section_from_trailing_empty_newlines() { let message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); assert_eq!(message.get_scissors(), None); } #[test] fn can_get_comments_from_trailing_empty_newlines() { let message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); assert_eq!( message.get_comments(), Comments::from(vec![ Comment::from(indoc!( " # Bitte geben Sie eine Commit-Beschreibung f\u{00FC}r Ihre \u{00E4}nderungen ein. Zeilen, # die mit '#' beginnen, werden ignoriert, und eine leere Beschreibung # bricht den Commit ab. # # Datum: Sat Jun 27 21:40:14 2020 +0200 # # Auf Branch master # # Initialer Commit # # Zum Commit vorgemerkte \u{00E4}nderungen: # neue Datei: .bashrc #" )) ]) ); } #[test] fn can_get_trailers_from_trailing_empty_newlines() { let message = CommitMessage::from(TRAILING_EMPTY_NEWLINES); let trailers: Vec = vec![ Trailer::new( "Co-authored-by".into(), "Billie Thomposon ".into(), ), Trailer::new( "Co-authored-by".into(), "Somebody Else ".into(), ), ]; assert_eq!(message.get_trailers(), Trailers::from(trailers)); }