]> git.scottworley.com Git - tablify/blobdiff - src/lib.rs
Tests for column_header_order()
[tablify] / src / lib.rs
index 2111e1ed798d3c4ce31582999baf8b141f8ef667..b4b8bbcc44ed515aec293148aa020f6bb584175f 100644 (file)
@@ -359,31 +359,34 @@ fn render_row(config: &Config, columns: &[String], rowlike: &mut Rowlike) -> HTM
     }
 }
 
     }
 }
 
-fn render_column_headers(config: &Config, columns: &[String]) -> HTML {
+fn column_header_order<'a>(
+    config: &'a Config,
+    columns: &'a [String],
+) -> impl Iterator<Item = Option<&'a String>> {
     let static_columns = config.static_columns.iter().map(|oc| oc.as_ref());
     let dynamic_columns = columns.iter().map(Some);
     let static_columns = config.static_columns.iter().map(|oc| oc.as_ref());
     let dynamic_columns = columns.iter().map(Some);
+    static_columns.chain(dynamic_columns).filter(|ocol| {
+        ocol.map_or(true, |col| !config.hidden_columns.contains(col))
+    })
+}
+
+fn render_column_headers(config: &Config, columns: &[String]) -> HTML {
     HTML(
         String::from(r#"<tr class="key"><th></th>"#)
     HTML(
         String::from(r#"<tr class="key"><th></th>"#)
-            + &static_columns
-                .chain(dynamic_columns)
-                .filter(|ocol| {
-                    ocol.map(|col| !config.hidden_columns.contains(col))
-                        .unwrap_or(true)
-                })
-                .fold(String::new(), |mut acc, ocol| {
-                    match ocol {
-                        Some(col) => {
-                            let col_header = HTML::escape(col);
-                            write!(
-                                &mut acc,
-                                r#"<th id="{col_header}"><div><div>{col_header}</div></div></th>"#
-                            )
-                        }
-                        None => write!(&mut acc, r#"<th class="col_spacer"></th>"#),
+            + &column_header_order(config, columns).fold(String::new(), |mut acc, ocol| {
+                match ocol {
+                    Some(col) => {
+                        let col_header = HTML::escape(col);
+                        write!(
+                            &mut acc,
+                            r#"<th id="{col_header}"><div><div>{col_header}</div></div></th>"#
+                        )
                     }
                     }
-                    .unwrap();
-                    acc
-                })
+                    None => write!(&mut acc, r#"<th class="col_spacer"></th>"#),
+                }
+                .unwrap();
+                acc
+            })
             + "</tr>\n",
     )
 }
             + "</tr>\n",
     )
 }
@@ -592,6 +595,30 @@ mod tests {
         );
     }
 
         );
     }
 
+    #[test]
+    fn test_column_header_order() {
+        let mut cfg = Config::default();
+
+        assert!(column_header_order(&cfg, &["foo".to_owned()]).eq([Some(&"foo".to_owned())]));
+
+        cfg.static_columns.push(Some("bar".to_owned()));
+        assert!(column_header_order(&cfg, &["foo".to_owned()])
+            .eq([Some(&"bar".to_owned()), Some(&"foo".to_owned())]));
+
+        cfg.static_columns.push(None);
+        assert!(column_header_order(&cfg, &["foo".to_owned()]).eq([
+            Some(&"bar".to_owned()),
+            None,
+            Some(&"foo".to_owned())
+        ]));
+
+        cfg.hidden_columns.insert("foo".to_owned());
+        assert!(column_header_order(&cfg, &["foo".to_owned()]).eq([Some(&"bar".to_owned()), None]));
+
+        cfg.hidden_columns.insert("bar".to_owned());
+        assert!(column_header_order(&cfg, &["foo".to_owned()]).eq([None]));
+    }
+
     #[test]
     fn test_render_cell() {
         assert_eq!(
     #[test]
     fn test_render_cell() {
         assert_eq!(