use super::render_markdown; use pretty_assertions::assert_eq; #[test] fn markdown_clipboard_preserves_rich_formatting() { let markdown = "# Findings\n\nRead [the source](https://example.com/source?q=1&v=2).\n\n\ - **Bold**, *italic*, ~~removed~~, and `inline `\n\n\ > A quoted finding.\n\n\ ```rust\nfn main() { println!(\"\"); }\n```\n\n\ | Item | Result |\n| --- | --- |\n| Copy | Formatted |\n"; insta::assert_snapshot!(render_markdown(markdown)); } #[test] fn markdown_clipboard_preserves_local_link_destinations() { let markdown = r#"[parser](/repo/src/parser.rs:42) [**Windows parser**](C:\repo\src\parser.rs:42:7) [`relative parser`](../src/parser.rs#L42-L48) [file URL](file:///repo/src/parser.rs#L42) [escaped path](/repo/a&b/<parser>.rs:42) [Unicode path]() [![diagram](https://example.com/diagram.png)](/repo/diagram.rs:7) [web link](https://example.com/source) and [another file](src/lib.rs:9) "#; insta::assert_snapshot!(render_markdown(markdown)); } #[test] fn markdown_clipboard_images_are_inert() { assert_eq!( render_markdown( "![tracking pixel](https://example.com/pixel)\n\n\ [![**Preview** & details](https://example.com/image.png)](https://example.com/page)" ), "

tracking pixel

\n\

Preview & details

\n" ); } #[test] fn markdown_clipboard_escapes_raw_html_and_rejects_unsafe_destinations() { assert_eq!( render_markdown("\n\nHello !"), "<script>alert(1)</script>\n

Hello <img src=x onerror=alert(1)>!

\n" ); for (destination, visible_destination) in [ ("javascript:alert(1)", "javascript:alert(1)"), ("JaVaScRiPt:alert(1)", "JaVaScRiPt:alert(1)"), ("javascript:alert(1)", "javascript:alert(1)"), ("data:text/html,unsafe", "data:text/html,unsafe"), ( "javascript:alert("<>&")", "javascript:alert(\"<>&\")", ), ] { assert_eq!( render_markdown(&format!("[link]({destination}) ![image]({destination})")), format!("

link ({visible_destination}) image

\n") ); } } #[test] fn markdown_clipboard_unwraps_table_fences_like_the_tui() { let table = "| Item | Result |\n| --- | --- |\n| Copy | Formatted |\n"; assert_eq!( render_markdown(&format!("```markdown\n{table}```")), render_markdown(table) ); }