about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--project.clj2
-rw-r--r--test/microformats/parser_expectations.clj101
-rw-r--r--test/microformats/parser_test.clj132
3 files changed, 103 insertions, 132 deletions
diff --git a/project.clj b/project.clj
index a191c8a..5b0d719 100644
--- a/project.clj
+++ b/project.clj
@@ -5,4 +5,6 @@
             :url "http://opensource.org/licenses/MIT"}
   :dependencies [[org.clojure/clojure "1.6.0"]
                  [enlive "1.1.5"]]
+  :profiles {:dev {:dependencies [[expectations "2.0.9"]]}}
+  :plugins [[lein-expectations "0.0.7"]]
   :main microformats.parser)
diff --git a/test/microformats/parser_expectations.clj b/test/microformats/parser_expectations.clj
new file mode 100644
index 0000000..742b8e7
--- /dev/null
+++ b/test/microformats/parser_expectations.clj
@@ -0,0 +1,101 @@
+(ns microformats.parser-expectations
+  (:require [expectations :refer :all]
+            [microformats.parser :refer :all]
+            [net.cgrand.enlive-html :refer [html-snippet]]))
+
+(expect [:location]
+        (into [] ((classes-to-props "p-") ["someclass" "p-location" "someotherclass"])))
+
+(expect [:location :name]
+        (into [] ((classes-to-props "p-") ["someclass" "p-location" "someotherclass" "p-name"])))
+
+(expect "Foo <strong>bar</strong>"
+        (apply str (#'microformats.parser/node-to-html '("Foo " {:tag :strong, :attrs nil, :content ("bar")}))))
+
+(expect {:name "Example User"}
+        (parse-p (first (html-snippet "<p class=\"p-name\">Example User</p>"))))
+
+(expect {:nickname "exuser"}
+        (parse-p (first (html-snippet "<p class=\"p-nickname\">exuser</p>"))))
+
+(expect {:name "Example User"}
+        (parse-p (first (html-snippet "<img class=\"p-name\" alt=\"Example User\">"))))
+
+(expect {:name "Example User"}
+        (parse-p (first (html-snippet "<abbr class=\"p-name\" title=\"Example User\">@example</abbr>"))))
+
+(expect {:name "@example"}
+        (parse-p (first (html-snippet "<abbr class=\"p-name\">@example</abbr>"))))
+
+(expect {:name "Example User"}
+        (parse-p (first (html-snippet "<data class=\"p-name\" value=\"Example User\"></data>"))))
+
+(expect {:name "Example User"}
+        (parse-p (first (html-snippet "<data class=\"p-name\">Example User</data>"))))
+
+(expect {:name ""}
+        (parse-p (first (html-snippet "<br class=\"p-name\"/>"))))
+
+(expect {:name ""}
+        (parse-p (first (html-snippet "<hr class=\"p-name\"/>"))))
+
+(expect {:url "http://example.com"}
+        (parse-u (first (html-snippet "<a class=\"u-url\" href=\"http://example.com\">Awesome example website</a>"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<img class=\"u-photo\" src=\"http://example.com/someimage.png\">"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<area class=\"u-photo\" href=\"http://example.com/someimage.png\"></area>"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<object class=\"u-photo\" data=\"http://example.com/someimage.png\"></object>"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<abbr class=\"u-photo\" title=\"http://example.com/someimage.png\"></abbr>"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<abbr class=\"u-photo\">http://example.com/someimage.png</abbr>"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<data class=\"u-photo\" value=\"http://example.com/someimage.png\"></data>"))))
+
+(expect {:photo "http://example.com/someimage.png"}
+        (parse-u (first (html-snippet "<data class=\"u-photo\">http://example.com/someimage.png</data>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<time class=\"dt-start\" datetime=\"2012-08-05T14:50\"></time>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<time class=\"dt-start\">2012-08-05T14:50</time>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<ins class=\"dt-start\" datetime=\"2012-08-05T14:50\"></ins>"))))
+
+(expect {:end "2012-08-05T18:00"}
+        (parse-dt (first (html-snippet "<del class=\"dt-end\" datetime=\"2012-08-05T18:00\"></del>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<abbr class=\"dt-start\" title=\"2012-08-05T14:50\"></abbr>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<abbr class=\"dt-start\">2012-08-05T14:50</abbr>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<data class=\"dt-start\" value=\"2012-08-05T14:50\"></data>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<data class=\"dt-start\">2012-08-05T14:50</data>"))))
+
+(expect {:start "2012-08-05T14:50"}
+        (parse-dt (first (html-snippet "<input class=\"dt-start\" value=\"2012-08-05T14:50\">"))))
+
+(expect {:content {:html "Here is a load of <strong>embedded markup</strong>" :value "Here is a load of embedded markup"}}
+        (parse-e (first (html-snippet "<div class=\"e-content\">Here is a load of <strong>embedded markup</strong></div>"))))
+
+(expect {:author ["http://example.com/a"]}
+        (parse-rels (html-snippet "<a rel=\"author\" href=\"http://example.com/a\">author a</a>")))
+
+(expect {:author ["http://example.com/a" "http://example.com/b"]}
+        (parse-rels (html-snippet "<a rel=\"author\" href=\"http://example.com/a\">author a</a>
+<a rel=\"author\" href=\"http://example.com/b\">author b</a>")))
diff --git a/test/microformats/parser_test.clj b/test/microformats/parser_test.clj
deleted file mode 100644
index 51c45c7..0000000
--- a/test/microformats/parser_test.clj
+++ /dev/null
@@ -1,132 +0,0 @@
-(ns microformats.parser-test
-  (:require [clojure.test :refer :all]
-            [microformats.parser :refer :all]
-            [net.cgrand.enlive-html :refer [html-snippet]]))
-
-(deftest empty-document
-  (testing "Empty HTML document should return an empty 'items' array and 'rels' hash."
-    (is (= {:items [] :rels {}}
-           (parse "")))))
-
-(deftest classes-to-props-property-names
-  (testing "`classes-to-props' should return property name without prefix"
-    (are [ex in] (= ex (into [] ((classes-to-props "p-") in)))
-         [:location]
-         ["someclass" "p-location" "someotherclass"]
-
-         [:location :name]
-         ["someclass" "p-location" "someotherclass" "p-name"])))
-
-(deftest node-to-html-string
-  (testing "`node-to-html' should return a string of HTML content"
-    (are [ex in] (= ex (apply str (#'microformats.parser/node-to-html in)))
-         "Foo <strong>bar</strong>"
-         '("Foo " {:tag :strong, :attrs nil, :content ("bar")}))))
-
-(deftest parse-p-inner-text
-  (testing "Inner text of a p- property should be parsed")
-  (are [ex in] (= ex (parse-p (first (html-snippet in))))
-       {:name "Example User"}
-       "<p class=\"p-name\">Example User</p>"
-
-       {:nickname "exuser"}
-       "<p class=\"p-nickname\">exuser</p>"))
-
-(deftest parse-p-special-elements
-  (testing "img, abbr and data elements should be parsed differently"
-    (are [ex in] (= ex (parse-p (first (html-snippet in))))
-         {:name "Example User"}
-         "<img class=\"p-name\" alt=\"Example User\">"
-
-         {:name "Example User"}
-         "<abbr class=\"p-name\" title=\"Example User\">@example</abbr>"
-
-         {:name "@example"}
-         "<abbr class=\"p-name\">@example</abbr>"
-
-         {:name "Example User"}
-         "<data class=\"p-name\" value=\"Example User\"></data>"
-
-         {:name "Example User"}
-         "<data class=\"p-name\">Example User</data>")))
-
-(deftest parse-p-empty-br-hr
-  (testing "br and hr tags should return empty strings"
-    (are [ex in] (= ex (parse-p (first (html-snippet in))))
-         {:name ""}
-         "<br class=\"p-name\"/>"
-
-         {:name ""}
-         "<hr class=\"p-name\"/>")))
-
-(deftest parse-u-elements
-  (testing "Tags should have their values parsed as a u-* value"
-    (are [ex in] (= ex (parse-u (first (html-snippet in))))
-         {:url "http://example.com"}
-         "<a class=\"u-url\" href=\"http://example.com\">Awesome example website</a>"
-
-         {:photo "http://example.com/someimage.png"}
-         "<img class=\"u-photo\" src=\"http://example.com/someimage.png\">"
-
-         {:photo "http://example.com/someimage.png"}
-         "<area class=\"u-photo\" href=\"http://example.com/someimage.png\"></area>"
-
-         {:photo "http://example.com/someimage.png"}
-         "<object class=\"u-photo\" data=\"http://example.com/someimage.png\"></object>"
-
-         {:photo "http://example.com/someimage.png"}
-         "<abbr class=\"u-photo\" title=\"http://example.com/someimage.png\"></abbr>"
-
-         {:photo "http://example.com/someimage.png"}
-         "<abbr class=\"u-photo\">http://example.com/someimage.png</abbr>"
-
-         {:photo "http://example.com/someimage.png"}
-         "<data class=\"u-photo\" value=\"http://example.com/someimage.png\"></data>"
-
-         {:photo "http://example.com/someimage.png"}
-         "<data class=\"u-photo\">http://example.com/someimage.png</data>")))
-
-(deftest parse-dt-elements
-  (testing "Tags with dt-* classes should have their values parsed"
-    (are [ex in] (= ex (parse-dt (first (html-snippet in))))
-         {:start "2012-08-05T14:50"}
-         "<time class=\"dt-start\" datetime=\"2012-08-05T14:50\"></time>"
-
-         {:start "2012-08-05T14:50"}
-         "<time class=\"dt-start\">2012-08-05T14:50</time>"
-
-         {:start "2012-08-05T14:50"}
-         "<ins class=\"dt-start\" datetime=\"2012-08-05T14:50\"></ins>"
-
-         {:end "2012-08-05T18:00"}
-         "<del class=\"dt-end\" datetime=\"2012-08-05T18:00\"></del>"
-
-         {:start "2012-08-05T14:50"}
-         "<abbr class=\"dt-start\" title=\"2012-08-05T14:50\"></abbr>"
-
-         {:start "2012-08-05T14:50"}
-         "<abbr class=\"dt-start\">2012-08-05T14:50</abbr>"
-
-         {:start "2012-08-05T14:50"}
-         "<data class=\"dt-start\" value=\"2012-08-05T14:50\"></data>"
-
-         {:start "2012-08-05T14:50"}
-         "<data class=\"dt-start\">2012-08-05T14:50</data>"
-
-         {:start "2012-08-05T14:50"}
-         "<input class=\"dt-start\" value=\"2012-08-05T14:50\">")))
-
-(deftest parse-e-elements
-  (testing "Tags with e-* classes should have ther content parsed"
-    (are [ex in] (= ex (parse-e (first (html-snippet in))))
-         {:content {:html "Here is a load of <strong>embedded markup</strong>" :value "Here is a load of embedded markup"}}
-         "<div class=\"e-content\">Here is a load of <strong>embedded markup</strong></div>")))
-
-(deftest parse-rel-test
-  (testing "link and a tags with rel attributes should be parsed"
-    (are [ex in] (= ex (parse-rels (html-snippet in)))
-         {:author ["http://example.com/a"]}
-         "<a rel=\"author\" href=\"http://example.com/a\">author a</a>"
-
-         {:author ["http://example.com/a" "http://example.com/b"]}
-         "<a rel=\"author\" href=\"http://example.com/a\">author a</a><a rel=\"author\" href=\"http://example.com/b\">author b</a>")))