@@ -93,3 +93,145 @@ impl Homepage {
9393 template. render ( )
9494 }
9595}
96+
97+ #[ cfg( test) ]
98+ mod tests {
99+ use crate :: config:: Config ;
100+ use crate :: templates:: Homepage ;
101+
102+ use std:: fs:: { self , File } ;
103+ use std:: io:: Read ;
104+ use std:: path:: PathBuf ;
105+
106+ use diff;
107+
108+ /// Check the difference between 2 strings
109+ fn check_difference ( left : String , right : String ) -> bool {
110+ let mut not_different = true ;
111+
112+ for difference in diff:: lines ( & left, & right) {
113+ match difference {
114+ diff:: Result :: Left ( left) => {
115+ not_different = false ;
116+ println ! ( "l-{}" , left) ;
117+ } ,
118+ diff:: Result :: Right ( right) => {
119+ not_different = false ;
120+ println ! ( "r-{}" , right) ;
121+ } ,
122+ _ => ( ) ,
123+ }
124+ }
125+
126+ return not_different;
127+ }
128+
129+ // TODO: Handle error `toml::from_str()`/Result error better
130+ /// Get config from a given file
131+ fn get_config_from_file ( config_file : & PathBuf ) -> Result < Config , ( ) > {
132+ let toml_string = fs:: read_to_string ( & config_file) . expect ( "error getting config file string" ) ;
133+
134+ match toml:: from_str ( & toml_string) {
135+ Ok ( config) => Ok ( config) ,
136+ Err ( error) => {
137+ eprintln ! ( "ERROR: {}" , error) ;
138+ Err ( ( ) )
139+ } ,
140+ }
141+ }
142+
143+ #[ test]
144+ /// Test rendering the bookmarks only config file
145+ fn bookmarks_only_diff_test ( ) {
146+ let config_file_path: PathBuf = "./docs/config/examples/bookmarks-only.toml" . into ( ) ;
147+ let config = get_config_from_file ( & config_file_path) ;
148+
149+ let homepage = Homepage :: new ( & config. expect ( "error getting config file" ) ) ;
150+
151+ let mut rendered = Homepage :: render ( & homepage) . expect ( "error rendering homepage" ) ;
152+
153+ let mut wanted = File :: open ( "./tests/data/bookmarks-only.html" ) . expect ( "error getting test file" ) ;
154+ let mut contents = String :: new ( ) ;
155+ let _ = wanted. read_to_string ( & mut contents) ;
156+
157+ let not_different = check_difference ( rendered, contents) ;
158+
159+ assert ! ( not_different)
160+ }
161+
162+ #[ test]
163+ /// Test rendering the clock only config file
164+ fn clock_only_diff_test ( ) {
165+ let config_file_path: PathBuf = "./docs/config/examples/clock-only.toml" . into ( ) ;
166+ let config = get_config_from_file ( & config_file_path) ;
167+
168+ let homepage = Homepage :: new ( & config. expect ( "error getting config file" ) ) ;
169+
170+ let mut rendered = Homepage :: render ( & homepage) . expect ( "error rendering homepage" ) ;
171+
172+ let mut wanted = File :: open ( "./tests/data/clock-only.html" ) . expect ( "error getting test file" ) ;
173+ let mut contents = String :: new ( ) ;
174+ let _ = wanted. read_to_string ( & mut contents) ;
175+
176+ let not_different = check_difference ( rendered, contents) ;
177+
178+ assert ! ( not_different)
179+ }
180+
181+ #[ test]
182+ /// Test rendering the default config file
183+ fn default_config_diff_test ( ) {
184+ let config_file_path: PathBuf = "./docs/config/examples/default.toml" . into ( ) ;
185+ let config = get_config_from_file ( & config_file_path) ;
186+
187+ let homepage = Homepage :: new ( & config. expect ( "error getting config file" ) ) ;
188+
189+ let mut rendered = Homepage :: render ( & homepage) . expect ( "error rendering homepage" ) ;
190+
191+ let mut wanted = File :: open ( "./tests/data/default.html" ) . expect ( "error getting test file" ) ;
192+ let mut contents = String :: new ( ) ;
193+ let _ = wanted. read_to_string ( & mut contents) ;
194+
195+ let not_different = check_difference ( rendered, contents) ;
196+
197+ assert ! ( not_different)
198+ }
199+
200+ #[ test]
201+ /// Test rendering the "full" config file
202+ fn full_config_diff_test ( ) {
203+ let config_file_path: PathBuf = "./docs/config/examples/full.toml" . into ( ) ;
204+ let config = get_config_from_file ( & config_file_path) ;
205+
206+ let homepage = Homepage :: new ( & config. expect ( "error getting config file" ) ) ;
207+
208+ let mut rendered = Homepage :: render ( & homepage) . expect ( "error rendering homepage" ) ;
209+
210+ let mut wanted = File :: open ( "./tests/data/full.html" ) . expect ( "error getting test file" ) ;
211+ let mut contents = String :: new ( ) ;
212+ let _ = wanted. read_to_string ( & mut contents) ;
213+
214+ let not_different = check_difference ( rendered, contents) ;
215+
216+ assert ! ( not_different)
217+ }
218+
219+ #[ test]
220+ /// Test rendering the search only config file
221+ fn search_only_config_diff_test ( ) {
222+ let config_file_path: PathBuf = "./docs/config/examples/search-only.toml" . into ( ) ;
223+ let config = get_config_from_file ( & config_file_path) ;
224+
225+ let homepage = Homepage :: new ( & config. expect ( "error getting config file" ) ) ;
226+
227+ let mut rendered = Homepage :: render ( & homepage) . expect ( "error rendering homepage" ) ;
228+
229+ let mut wanted = File :: open ( "./tests/data/search-only.html" ) . expect ( "error getting test file" ) ;
230+ let mut contents = String :: new ( ) ;
231+ let _ = wanted. read_to_string ( & mut contents) ;
232+
233+ let not_different = check_difference ( rendered, contents) ;
234+
235+ assert ! ( not_different)
236+ }
237+ }
0 commit comments