From 78995cda172159bce38a9c846d2a57a22a00e375 Mon Sep 17 00:00:00 2001
From: Martin Fischer <martin@push-f.com>
Date: Mon, 29 Nov 2021 17:50:40 +0100
Subject: refactor: use assert_matches! instead of assert_eq!

---
 src/tokenizer/mod.rs | 73 ++++++++++++++++++++++++++++------------------------
 1 file changed, 40 insertions(+), 33 deletions(-)

diff --git a/src/tokenizer/mod.rs b/src/tokenizer/mod.rs
index 6a0649a..9cdb398 100644
--- a/src/tokenizer/mod.rs
+++ b/src/tokenizer/mod.rs
@@ -2152,7 +2152,7 @@ mod test {
     use super::{TokenSink, TokenSinkResult, Tokenizer, TokenizerOpts};
 
     use super::interface::{CharacterTokens, EOFToken, NullCharacterToken, ParseError};
-    use super::interface::{EndTag, StartTag, Tag, TagKind};
+    use super::interface::{EndTag, StartTag, Tag};
     use super::interface::{TagToken, Token};
 
     use crate::util::buffer_queue::BufferQueue;
@@ -2252,16 +2252,11 @@ mod test {
         tok.sink.lines
     }
 
-    // Create a tag token
-    fn create_tag(token: String, tagkind: TagKind) -> Token {
-        let name = token;
-        let token = TagToken(Tag {
-            kind: tagkind,
-            name,
-            self_closing: false,
-            attrs: vec![],
-        });
-        token
+    // FUTURE: replace with std::assert_matches once stable
+    macro_rules! assert_matches {
+        ($expr:expr, $($args:tt)+) => {
+            assert!(matches!($expr, $($args)*), "left matches right\n left: {:?}\nright: {}", &$expr, stringify!($($args)*))
+        };
     }
 
     #[test]
@@ -2300,18 +2295,24 @@ mod test {
             String::from("</b>\n"),
             String::from("</a>\n"),
         ];
-        let expected = vec![
-            (1, create_tag(String::from("a"), StartTag)),
-            (2, CharacterTokens("\n".into())),
-            (2, create_tag(String::from("b"), StartTag)),
-            (3, CharacterTokens("\n".into())),
-            (3, create_tag(String::from("b"), EndTag)),
-            (4, CharacterTokens("\n".into())),
-            (4, create_tag(String::from("a"), EndTag)),
-            (5, CharacterTokens("\n".into())),
-        ];
         let results = tokenize(vector, opts);
-        assert_eq!(results, expected);
+        assert_matches!(
+            &results[..],
+            [
+                (1, Token::TagToken(Tag{name: n1, kind: StartTag, ..})),
+                (2, CharacterTokens(c1)),
+                (2, Token::TagToken(Tag{name: n2, kind: StartTag, ..})),
+                (3, CharacterTokens(c2)),
+                (3, Token::TagToken(Tag{name: n3, kind: EndTag, ..})),
+                (4, CharacterTokens(c3)),
+                (4, Token::TagToken(Tag{name: n4, kind: EndTag, ..})),
+                (5, CharacterTokens(c4)),
+            ] if
+            n1 == "a" && c1 == "\n" &&
+            n2 == "b" && c2 == "\n" &&
+            n3 == "b" && c3 == "\n" &&
+            n4 == "a" && c4 == "\n"
+        );
     }
 
     #[test]
@@ -2329,18 +2330,24 @@ mod test {
             String::from("</b>\r\n"),
             String::from("</a>\r\n"),
         ];
-        let expected = vec![
-            (1, create_tag(String::from("a"), StartTag)),
-            (2, CharacterTokens("\n".into())),
-            (2, create_tag(String::from("b"), StartTag)),
-            (3, CharacterTokens("\n".into())),
-            (3, create_tag(String::from("b"), EndTag)),
-            (4, CharacterTokens("\n".into())),
-            (4, create_tag(String::from("a"), EndTag)),
-            (5, CharacterTokens("\n".into())),
-        ];
         let results = tokenize(vector, opts);
-        assert_eq!(results, expected);
+        assert_matches!(
+            &results[..],
+            [
+                (1, Token::TagToken(Tag{name: n1, kind: StartTag, ..})),
+                (2, CharacterTokens(c1)),
+                (2, Token::TagToken(Tag{name: n2, kind: StartTag, ..})),
+                (3, CharacterTokens(c2)),
+                (3, Token::TagToken(Tag{name: n3, kind: EndTag, ..})),
+                (4, CharacterTokens(c3)),
+                (4, Token::TagToken(Tag{name: n4, kind: EndTag, ..})),
+                (5, CharacterTokens(c4)),
+            ] if
+            n1 == "a" && c1 == "\n" &&
+            n2 == "b" && c2 == "\n" &&
+            n3 == "b" && c3 == "\n" &&
+            n4 == "a" && c4 == "\n"
+        );
     }
 
     #[test]
-- 
cgit v1.2.3