use super::{assert_output_contains, assert_success, TestCommand};
#[test]
fn test_convert_to_latex_basic() {
let cmd = TestCommand::new();
let input = "# Hello World\n\nThis is **bold** text.";
let output = cmd.run_with_input(&["convert-to", "latex"], input);
assert_success(&output);
assert_output_contains(&output, "\\section{Hello World}");
assert_output_contains(&output, "\\textbf{bold}");
}
#[test]
fn test_convert_to_latex_with_table_style_booktabs() {
let cmd = TestCommand::new();
let input = "| A | B |\n|---|---|\n| 1 | 2 |";
let output = cmd.run_with_input(&["convert-to", "latex", "--table-style", "booktabs"], input);
assert_success(&output);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("tabular") || stdout.contains("table"));
}
#[test]
fn test_convert_to_latex_with_code_style_minted() {
let cmd = TestCommand::new();
let input = "```rust\nfn main() {}\n```";
let output = cmd.run_with_input(&["convert-to", "latex", "--code-style", "minted"], input);
assert_success(&output);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("main") && stdout.contains("fn"));
}
#[test]
fn test_convert_to_latex_special_characters() {
let cmd = TestCommand::new();
let input = "Text with $ % & # symbols that need escaping.";
let output = cmd.run_with_input(&["convert-to", "latex"], input);
assert_success(&output);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("\\$") || !stdout.contains("$"));
assert!(stdout.contains("\\%") || !stdout.contains("%"));
assert!(stdout.contains("\\&") || !stdout.contains("&"));
}
#[test]
fn test_convert_to_latex_complex_document() {
let cmd = TestCommand::new();
let input = r#"
# Main Title
## Subtitle
- List item with **bold**
- Another item with *italic*
```python
def hello():
print("world")
```
| Header 1 | Header 2 |
|----------|----------|
| Cell 1 | Cell 2 |
Link to [example](http://example.com).
"#;
let output = cmd.run_with_input(
&[
"convert-to",
"latex",
"--table-style",
"booktabs",
"--code-style",
"verbatim",
],
input,
);
assert_success(&output);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(stdout.contains("\\section"));
assert!(stdout.contains("\\subsection"));
assert!(stdout.contains("\\textbf"));
assert!(stdout.contains("\\textit"));
assert!(stdout.contains("itemize") || stdout.contains("\\item"));
}
#[test]
fn test_convert_to_latex_all_table_styles() {
let cmd = TestCommand::new();
let input = "| A | B |\n|---|---|\n| 1 | 2 |";
for style in &["tabular", "longtabu", "booktabs"] {
let output = cmd.run_with_input(&["convert-to", "latex", "--table-style", style], input);
assert_success(&output);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
!stdout.is_empty(),
"Output should not be empty for style: {style}"
);
}
}
#[test]
fn test_convert_to_latex_all_code_styles() {
let cmd = TestCommand::new();
let input = "```rust\nfn test() {}\n```";
for style in &["verbatim", "listings", "minted"] {
let output = cmd.run_with_input(&["convert-to", "latex", "--code-style", style], input);
assert_success(&output);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
!stdout.is_empty(),
"Output should not be empty for style: {style}"
);
assert!(
stdout.contains("test"),
"Code content should be preserved for style: {style}"
);
}
}