deletable: bool,
}
+#[derive(Debug)]
pub enum ParseError {
InvalidElement(String),
}
#[cfg(test)]
mod tests {
+ use crate::parse_html;
+
use super::*;
#[test]
assert!(is_special(12341234));
assert!(!is_special(1937592));
}
+
+ fn expect_update(result: Result<ParsedUpdate, ParseError>) -> ParsedUpdate {
+ result.expect("parse should have succeeded")
+ }
+
+ #[test]
+ fn test_valid_counts() {
+ let update = expect_update(parse_update(parse_html("<div>12,345,678 spaghetti</div>"), None, ""));
+ assert_eq!(update.number, Some(12_345_678));
+ assert_eq!(update.deletable, false);
+
+ let update = expect_update(parse_update(parse_html("<div><p>0</p><br/>oz</div>"), None, ""));
+ assert_eq!(update.number, Some(0));
+ assert_eq!(update.deletable, false);
+
+ let update = expect_update(parse_update(parse_html("<div>121 345 621</div>"), Some(121), ""));
+ assert_eq!(update.number, Some(121));
+ assert_eq!(update.deletable, false);
+
+ let update = expect_update(parse_update(parse_html("28 336 816"), Some(28_336_816), ""));
+ assert_eq!(update.number, Some(28_336_816));
+ assert_eq!(update.deletable, true);
+ }
+
+ #[test]
+ fn test_non_counts() {
+ let update = expect_update(parse_update(parse_html("<div><table><tbody><tr><td>zoo</td></tr></tbody></table></div>"), None, ""));
+ assert_eq!(update.count_attempt, false);
+ assert_eq!(update.deletable, false);
+ }
+
+ #[test]
+ fn test_typos() {
+ let update = expect_update(parse_update(parse_html("<span>v9</span>"), Some(888), ""));
+ assert_eq!(update.number, None);
+ assert_eq!(update.count_attempt, true);
+
+ let update = expect_update(parse_update(parse_html("<div>v11.585 Empire</div>"), None, ""));
+ assert_eq!(update.number, None);
+ assert_eq!(update.count_attempt, true);
+ assert_eq!(update.deletable, false);
+
+ let update = expect_update(parse_update(parse_html("<div>11, 585, 22 </div>"), Some(11_585_202), ""));
+ assert_eq!(update.number, None);
+ assert_eq!(update.count_attempt, true);
+ assert_eq!(update.deletable, true);
+
+ let update = expect_update(parse_update(parse_html("<span>0490499</span>"), Some(4_999), ""));
+ assert_eq!(update.number, None);
+ assert_eq!(update.count_attempt, true);
+
+ // this update is marked non-deletable, but I'm not sure it should be
+ let update = expect_update(parse_update(parse_html("12,123123"), Some(12_123_123), ""));
+ assert_eq!(update.number, None);
+ assert_eq!(update.count_attempt, true);
+ }
+
+ #[test]
+ fn test_html_handling() {
+ let update = expect_update(parse_update(parse_html("123<hr>,456"), None, ""));
+ assert_eq!(update.number, Some(123));
+
+ let update = expect_update(parse_update(parse_html("<pre>123\n456</pre>"), None, ""));
+ assert_eq!(update.number, Some(123));
+ }
}