1#![recursion_limit = "1024"]
3
4#[macro_use]
5extern crate derive_builder;
6
7#[macro_use]
8extern crate error_chain;
9
10#[macro_use]
11extern crate clap;
12
13#[macro_use]
14extern crate lazy_static;
15
16extern crate ansi_term;
17extern crate atty;
18extern crate console;
19extern crate content_inspector;
20extern crate directories;
21extern crate encoding;
22extern crate shell_words;
23extern crate syntect;
24
25mod assets;
26mod builder;
27mod decorations;
28mod dirs;
29mod inputfile;
30mod line_range;
31mod output;
32mod preprocessor;
33mod printer;
34mod style;
35mod syntax_mapping;
36mod terminal;
37
38pub use crate::builder::{PagingMode, PrettyPrint, PrettyPrinter};
39
40#[allow(deprecated)] mod errors {
42 error_chain! {
43 foreign_links {
44 Clap(::clap::Error);
45 Io(::std::io::Error);
46 SyntectError(::syntect::LoadingError);
47 ParseIntError(::std::num::ParseIntError);
48 }
49 }
50}
51
52pub use errors::Error as PrettyPrintError;
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
60 fn it_works() {
61 let printer = PrettyPrinter::default().build().unwrap();
62 printer.file("fixtures/fib.rs").unwrap();
63 }
64
65 #[test]
67 fn it_works_with_output_opts() {
68 let printer = PrettyPrinter::default()
69 .line_numbers(true)
70 .header(true)
71 .grid(true)
72 .paging_mode(PagingMode::Never)
73 .language("ruby")
74 .build()
75 .unwrap();
76
77 let example = r#"
78 def fib(n)
79 return 1 if n <= 1
80 fib(n-1) + fib(n-2)
81 end
82 "#;
83 printer.string_with_header(example, "example.rb").unwrap();
84 }
85
86 #[test]
87 fn it_works_inside_loop() {
88 let printer = PrettyPrinter::default()
89 .language("markdown")
90 .build()
91 .unwrap();
92 for i in 0..7 {
93 printer.string(format!("## Heading {}", i)).unwrap();
94 }
95 }
96
97 #[test]
98 fn it_works_inside_closure() {
99 let printer = PrettyPrinter::default()
100 .language("markdown")
101 .build()
102 .unwrap();
103 let print_heading = |string| printer.string(format!("## {}", string)).expect("Printed");
104 print_heading("Thankyou for making a crate version of `bat` 🥺");
105 }
106
107 #[test]
108 fn it_can_print_multiple_times() {
109 let printer = PrettyPrinter::default().language("rust").build().unwrap();
110 printer.string("").unwrap();
111
112 printer.string("let example = Ok(());").unwrap();
113 printer
114 .string_with_header("let example = Ok(());", "example.rs")
115 .unwrap();
116 printer.file("fixtures/fib.rs").unwrap();
117 }
118
119 #[test]
120 fn it_can_load_syntaxset() {
121 let buffer: Vec<u8> = include_bytes!("../assets/syntaxes.bin").to_vec();
122 let printer = PrettyPrinter::default()
123 .language("rust")
124 .load_syntax(buffer)
125 .build()
126 .unwrap();
127
128 printer.file("fixtures/fib.rs").unwrap();
129 }
130
131 #[test]
132 fn it_can_load_themeset() {
133 let buffer = include_bytes!("../assets/themes.bin").to_vec();
134 let printer = PrettyPrinter::default()
135 .language("rust")
136 .load_theme(buffer)
137 .build()
138 .unwrap();
139
140 printer.file("fixtures/fib.rs").unwrap();
141 }
142
143 #[test]
145 fn show_themes() {
146 let printer = PrettyPrinter::default().build().unwrap();
147 assert!(printer.get_themes().len() > 0);
148 println!("{:?}", printer.get_themes().keys());
149 }
150
151}