diff --git a/tests/microformats-v2-unit/README.md b/tests/microformats-v2-unit/README.md
index 869682c..f6f171a 100644
--- a/tests/microformats-v2-unit/README.md
+++ b/tests/microformats-v2-unit/README.md
@@ -19,11 +19,15 @@ Tests adhere to the following design principles. New additions to this test seri
## Setting up the tests
-Test set-up is the same as for the other test sets, with the exception that the base URL is `http://example.test`. Partial parser implementations may wish to execute tests in a particular orderto test basic features before more complex ones:
+Test set-up is the same as for the other test sets, with the exception that the base URL is `http://example.test`. Partial parser implementations may wish to execute tests in a particular order to test basic features before more complex ones:
1. Microformat tests in `names`
2. Property tests in `names`
3. Tests in `properties`
4. Tests in `implied`
5. Tests in `value`
-6. Tests in `nested`
\ No newline at end of file
+6. Tests in `value-title`
+7. Tests in `value-date`
+8. Tests in `id`
+9. Tests in `text`
+10. Tests in `nested`
diff --git a/tests/microformats-v2-unit/id/id.html b/tests/microformats-v2-unit/id/id.html
new file mode 100644
index 0000000..8f20f7d
--- /dev/null
+++ b/tests/microformats-v2-unit/id/id.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
NotPartOfTest
+
P
+
http://example.test/U
+
Dt
+
E
+
diff --git a/tests/microformats-v2-unit/id/id.json b/tests/microformats-v2-unit/id/id.json
new file mode 100644
index 0000000..978aca8
--- /dev/null
+++ b/tests/microformats-v2-unit/id/id.json
@@ -0,0 +1,52 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-with-id"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ },
+ "id": "Valid"
+ },
+ {
+ "type": [
+ "h-test-without-id"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-not-properties"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "not-id-p": [
+ "P"
+ ],
+ "not-id-u": [
+ "http://example.test/U"
+ ],
+ "not-id-dt": [
+ "Dt"
+ ],
+ "not-id-e": [
+ {
+ "html": "E",
+ "value": "E"
+ }
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/nested/nested-id.html b/tests/microformats-v2-unit/nested/nested-id.html
new file mode 100644
index 0000000..d7ec1db
--- /dev/null
+++ b/tests/microformats-v2-unit/nested/nested-id.html
@@ -0,0 +1,8 @@
+
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/nested/nested-id.json b/tests/microformats-v2-unit/nested/nested-id.json
new file mode 100644
index 0000000..d0d56fb
--- /dev/null
+++ b/tests/microformats-v2-unit/nested/nested-id.json
@@ -0,0 +1,69 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test"
+ ],
+ "properties": {
+ "test-p": [
+ {
+ "value": "P",
+ "type": [
+ "h-test-p"
+ ],
+ "properties": {
+ "name": [
+ "P"
+ ]
+ },
+ "id": "p"
+ }
+ ],
+ "test-u": [
+ {
+ "value": "http://example.test/U",
+ "type": [
+ "h-test-u"
+ ],
+ "properties": {
+ "name": [
+ "http://example.test/U"
+ ]
+ },
+ "id": "u"
+ }
+ ],
+ "test-dt": [
+ {
+ "value": "Dt",
+ "type": [
+ "h-test-dt"
+ ],
+ "properties": {
+ "name": [
+ "Dt"
+ ]
+ },
+ "id": "dt"
+ }
+ ]
+ },
+ "id": "root",
+ "children": [
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ },
+ "id": "child"
+ }
+ ]
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/nested/nested-property.html b/tests/microformats-v2-unit/nested/nested-property.html
new file mode 100644
index 0000000..98e367f
--- /dev/null
+++ b/tests/microformats-v2-unit/nested/nested-property.html
@@ -0,0 +1,8 @@
+
+
+
+
One Two Three Four
+
Five
+
diff --git a/tests/microformats-v2-unit/nested/nested-property.json b/tests/microformats-v2-unit/nested/nested-property.json
new file mode 100644
index 0000000..f342b34
--- /dev/null
+++ b/tests/microformats-v2-unit/nested/nested-property.json
@@ -0,0 +1,28 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-tree-order"
+ ],
+ "properties": {
+ "one": [
+ "One Two Three Four"
+ ],
+ "two": [
+ "Two Three Four"
+ ],
+ "three": [
+ "Three"
+ ],
+ "four": [
+ "Four"
+ ],
+ "five": [
+ "Five"
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/nested/tentative-nested-id.html b/tests/microformats-v2-unit/nested/tentative-nested-id.html
new file mode 100644
index 0000000..7968626
--- /dev/null
+++ b/tests/microformats-v2-unit/nested/tentative-nested-id.html
@@ -0,0 +1,7 @@
+
+
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/nested/tentative-nested-id.json b/tests/microformats-v2-unit/nested/tentative-nested-id.json
new file mode 100644
index 0000000..701308f
--- /dev/null
+++ b/tests/microformats-v2-unit/nested/tentative-nested-id.json
@@ -0,0 +1,29 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test"
+ ],
+ "properties": {
+ "test-e": [
+ {
+ "html": "E
",
+ "value": "E",
+ "type": [
+ "h-test-e"
+ ],
+ "properties": {
+ "name": [
+ "E"
+ ]
+ },
+ "id": "e"
+ }
+ ]
+ },
+ "id": "root"
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/text/tentative-text-basic.html b/tests/microformats-v2-unit/text/tentative-text-basic.html
new file mode 100644
index 0000000..5a35085
--- /dev/null
+++ b/tests/microformats-v2-unit/text/tentative-text-basic.html
@@ -0,0 +1,31 @@
+
+
+
+
NotPartOfTest
+
http://example.test/DoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
NoTrim
+
+
+
diff --git a/tests/microformats-v2-unit/text/tentative-text-basic.json b/tests/microformats-v2-unit/text/tentative-text-basic.json
new file mode 100644
index 0000000..ee539ad
--- /dev/null
+++ b/tests/microformats-v2-unit/text/tentative-text-basic.json
@@ -0,0 +1,92 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-whitespace-u"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "ascii": [
+ "http://example.test/DoTrim"
+ ],
+ "1-unicode": [
+ "http://example.test/NoTrim"
+ ],
+ "2-unicode": [
+ "http://example.test/%E2%80%A6NoTrim%E2%80%A6"
+ ],
+ "3-unicode": [
+ "http://example.test/%C2%A0NoTrim%C2%A0"
+ ],
+ "4-unicode": [
+ "http://example.test/%E1%9A%80NoTrim%E1%9A%80"
+ ],
+ "5-unicode": [
+ "http://example.test/%E2%80%80NoTrim%E2%80%80"
+ ],
+ "6-unicode": [
+ "http://example.test/%E2%80%81NoTrim%E2%80%81"
+ ],
+ "7-unicode": [
+ "http://example.test/%E2%80%82NoTrim%E2%80%82"
+ ],
+ "8-unicode": [
+ "http://example.test/%E2%80%83NoTrim%E2%80%83"
+ ],
+ "9-unicode": [
+ "http://example.test/%E2%80%84NoTrim%E2%80%84"
+ ],
+ "10-unicode": [
+ "http://example.test/%E2%80%85NoTrim%E2%80%85"
+ ],
+ "11-unicode": [
+ "http://example.test/%E2%80%86NoTrim%E2%80%86"
+ ],
+ "12-unicode": [
+ "http://example.test/%E2%80%87NoTrim%E2%80%87"
+ ],
+ "13-unicode": [
+ "http://example.test/%E2%80%88NoTrim%E2%80%88"
+ ],
+ "14-unicode": [
+ "http://example.test/%E2%80%89NoTrim%E2%80%89"
+ ],
+ "15-unicode": [
+ "http://example.test/%E2%80%8ANoTrim%E2%80%8A"
+ ],
+ "16-unicode": [
+ "http://example.test/%E2%80%A8NoTrim%E2%80%A8"
+ ],
+ "17-unicode": [
+ "http://example.test/%E2%80%A9NoTrim%E2%80%A9"
+ ],
+ "18-unicode": [
+ "http://example.test/%E2%80%AFNoTrim%E2%80%AF"
+ ],
+ "19-unicode": [
+ "http://example.test/%E2%81%9FNoTrim%E2%81%9F"
+ ],
+ "20-unicode": [
+ "http://example.test/%E3%80%80NoTrim%E3%80%80"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-inner-whitespace"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "u": [
+ "http://example.test/A%20%20%0C%0CA"
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/text/tentative-text-img.html b/tests/microformats-v2-unit/text/tentative-text-img.html
new file mode 100644
index 0000000..2a2815a
--- /dev/null
+++ b/tests/microformats-v2-unit/text/tentative-text-img.html
@@ -0,0 +1,28 @@
+
+
+
+
http://example.test/NotPartOfTest
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
diff --git a/tests/microformats-v2-unit/text/tentative-text-img.json b/tests/microformats-v2-unit/text/tentative-text-img.json
new file mode 100644
index 0000000..01ef56e
--- /dev/null
+++ b/tests/microformats-v2-unit/text/tentative-text-img.json
@@ -0,0 +1,46 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-img-e"
+ ],
+ "properties": {
+ "name": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "photo": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "url": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "src-empty-alt-missing": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A http://example.test A"
+ }
+ ],
+ "src-empty-alt-empty": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A A"
+ }
+ ],
+ "src-empty-alt-filled": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A Valid A"
+ }
+ ],
+ "src-empty-alt-filled-space": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A No Trim A"
+ }
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/text/text-basic.html b/tests/microformats-v2-unit/text/text-basic.html
new file mode 100644
index 0000000..02030df
--- /dev/null
+++ b/tests/microformats-v2-unit/text/text-basic.html
@@ -0,0 +1,113 @@
+
+
NotPartOfTest
+
Do Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
+
+
+
NotPartOfTest
+
Do Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
+
+
+
NotPartOfTest
+
Do Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
No Trim
+
+
+
+
NotPartOfTest
+
A
A
+
A
A
+
A
A
+
+
+
+
NotPartOfTest
+
+
+
+
+
diff --git a/tests/microformats-v2-unit/text/text-basic.json b/tests/microformats-v2-unit/text/text-basic.json
new file mode 100644
index 0000000..020420f
--- /dev/null
+++ b/tests/microformats-v2-unit/text/text-basic.json
@@ -0,0 +1,335 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-whitespace-p"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "ascii": [
+ "Do Trim"
+ ],
+ "1-unicode": [
+ "\u000b No Trim \u000b"
+ ],
+ "2-unicode": [
+ "\u2026 No Trim \u2026"
+ ],
+ "3-unicode": [
+ "\u00a0 No Trim \u00a0"
+ ],
+ "4-unicode": [
+ "\u1680 No Trim \u1680"
+ ],
+ "5-unicode": [
+ "\u2000 No Trim \u2000"
+ ],
+ "6-unicode": [
+ "\u2001 No Trim \u2001"
+ ],
+ "7-unicode": [
+ "\u2002 No Trim \u2002"
+ ],
+ "8-unicode": [
+ "\u2003 No Trim \u2003"
+ ],
+ "9-unicode": [
+ "\u2004 No Trim \u2004"
+ ],
+ "10-unicode": [
+ "\u2005 No Trim \u2005"
+ ],
+ "11-unicode": [
+ "\u2006 No Trim \u2006"
+ ],
+ "12-unicode": [
+ "\u2007 No Trim \u2007"
+ ],
+ "13-unicode": [
+ "\u2008 No Trim \u2008"
+ ],
+ "14-unicode": [
+ "\u2009 No Trim \u2009"
+ ],
+ "15-unicode": [
+ "\u200a No Trim \u200a"
+ ],
+ "16-unicode": [
+ "\u2028 No Trim \u2028"
+ ],
+ "17-unicode": [
+ "\u2029 No Trim \u2029"
+ ],
+ "18-unicode": [
+ "\u202f No Trim \u202f"
+ ],
+ "19-unicode": [
+ "\u205f No Trim \u205f"
+ ],
+ "20-unicode": [
+ "\u3000 No Trim \u3000"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-whitespace-dt"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "ascii": [
+ "Do Trim"
+ ],
+ "1-unicode": [
+ "\u000b No Trim \u000b"
+ ],
+ "2-unicode": [
+ "\u2026 No Trim \u2026"
+ ],
+ "3-unicode": [
+ "\u00a0 No Trim \u00a0"
+ ],
+ "4-unicode": [
+ "\u1680 No Trim \u1680"
+ ],
+ "5-unicode": [
+ "\u2000 No Trim \u2000"
+ ],
+ "6-unicode": [
+ "\u2001 No Trim \u2001"
+ ],
+ "7-unicode": [
+ "\u2002 No Trim \u2002"
+ ],
+ "8-unicode": [
+ "\u2003 No Trim \u2003"
+ ],
+ "9-unicode": [
+ "\u2004 No Trim \u2004"
+ ],
+ "10-unicode": [
+ "\u2005 No Trim \u2005"
+ ],
+ "11-unicode": [
+ "\u2006 No Trim \u2006"
+ ],
+ "12-unicode": [
+ "\u2007 No Trim \u2007"
+ ],
+ "13-unicode": [
+ "\u2008 No Trim \u2008"
+ ],
+ "14-unicode": [
+ "\u2009 No Trim \u2009"
+ ],
+ "15-unicode": [
+ "\u200a No Trim \u200a"
+ ],
+ "16-unicode": [
+ "\u2028 No Trim \u2028"
+ ],
+ "17-unicode": [
+ "\u2029 No Trim \u2029"
+ ],
+ "18-unicode": [
+ "\u202f No Trim \u202f"
+ ],
+ "19-unicode": [
+ "\u205f No Trim \u205f"
+ ],
+ "20-unicode": [
+ "\u3000 No Trim \u3000"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-whitespace-e"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "ascii": [
+ {
+ "html": "Do Trim",
+ "value": "Do Trim"
+ }
+ ],
+ "1-unicode": [
+ {
+ "html": "\u000b No Trim \u000b",
+ "value": "\u000b No Trim \u000b"
+ }
+ ],
+ "2-unicode": [
+ {
+ "html": "\u2026 No Trim \u2026",
+ "value": "\u2026 No Trim \u2026"
+ }
+ ],
+ "3-unicode": [
+ {
+ "html": " No Trim ",
+ "value": "\u00a0 No Trim \u00a0"
+ }
+ ],
+ "4-unicode": [
+ {
+ "html": "\u1680 No Trim \u1680",
+ "value": "\u1680 No Trim \u1680"
+ }
+ ],
+ "5-unicode": [
+ {
+ "html": "\u2000 No Trim \u2000",
+ "value": "\u2000 No Trim \u2000"
+ }
+ ],
+ "6-unicode": [
+ {
+ "html": "\u2001 No Trim \u2001",
+ "value": "\u2001 No Trim \u2001"
+ }
+ ],
+ "7-unicode": [
+ {
+ "html": "\u2002 No Trim \u2002",
+ "value": "\u2002 No Trim \u2002"
+ }
+ ],
+ "8-unicode": [
+ {
+ "html": "\u2003 No Trim \u2003",
+ "value": "\u2003 No Trim \u2003"
+ }
+ ],
+ "9-unicode": [
+ {
+ "html": "\u2004 No Trim \u2004",
+ "value": "\u2004 No Trim \u2004"
+ }
+ ],
+ "10-unicode": [
+ {
+ "html": "\u2005 No Trim \u2005",
+ "value": "\u2005 No Trim \u2005"
+ }
+ ],
+ "11-unicode": [
+ {
+ "html": "\u2006 No Trim \u2006",
+ "value": "\u2006 No Trim \u2006"
+ }
+ ],
+ "12-unicode": [
+ {
+ "html": "\u2007 No Trim \u2007",
+ "value": "\u2007 No Trim \u2007"
+ }
+ ],
+ "13-unicode": [
+ {
+ "html": "\u2008 No Trim \u2008",
+ "value": "\u2008 No Trim \u2008"
+ }
+ ],
+ "14-unicode": [
+ {
+ "html": "\u2009 No Trim \u2009",
+ "value": "\u2009 No Trim \u2009"
+ }
+ ],
+ "15-unicode": [
+ {
+ "html": "\u200a No Trim \u200a",
+ "value": "\u200a No Trim \u200a"
+ }
+ ],
+ "16-unicode": [
+ {
+ "html": "\u2028 No Trim \u2028",
+ "value": "\u2028 No Trim \u2028"
+ }
+ ],
+ "17-unicode": [
+ {
+ "html": "\u2029 No Trim \u2029",
+ "value": "\u2029 No Trim \u2029"
+ }
+ ],
+ "18-unicode": [
+ {
+ "html": "\u202f No Trim \u202f",
+ "value": "\u202f No Trim \u202f"
+ }
+ ],
+ "19-unicode": [
+ {
+ "html": "\u205f No Trim \u205f",
+ "value": "\u205f No Trim \u205f"
+ }
+ ],
+ "20-unicode": [
+ {
+ "html": "\u3000 No Trim \u3000",
+ "value": "\u3000 No Trim \u3000"
+ }
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-inner-whitespace"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "p": [
+ "A \t\t\n\n\f\f\r\rA"
+ ],
+ "dt": [
+ "A \t\t\n\n\f\f\r\rA"
+ ],
+ "e": [
+ {
+ "html": "A \t\t\n\n\f\f\r\rA",
+ "value": "A \t\t\n\n\f\f\r\rA"
+ }
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-stripped"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "p": [
+ "Valid"
+ ],
+ "u": [
+ "http://example.test/Valid"
+ ],
+ "dt": [
+ "Valid"
+ ],
+ "e": [
+ {
+ "html": "\n \n \n
\n Valid",
+ "value": "Valid"
+ }
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/text/text-img.html b/tests/microformats-v2-unit/text/text-img.html
new file mode 100644
index 0000000..4a03d80
--- /dev/null
+++ b/tests/microformats-v2-unit/text/text-img.html
@@ -0,0 +1,236 @@
+
+
http://example.test/NotPartOfTest
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+
+
http://example.test/NotPartOfTest
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+
+
http://example.test/NotPartOfTest
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+
+
http://example.test/NotPartOfTest
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
+
+ A
A
+
+
+
diff --git a/tests/microformats-v2-unit/text/text-img.json b/tests/microformats-v2-unit/text/text-img.json
new file mode 100644
index 0000000..7ca10c3
--- /dev/null
+++ b/tests/microformats-v2-unit/text/text-img.json
@@ -0,0 +1,226 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-img-p"
+ ],
+ "properties": {
+ "name": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "photo": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "url": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "src-missing-alt-missing": [
+ "A A"
+ ],
+ "src-missing-alt-empty": [
+ "A A"
+ ],
+ "src-missing-alt-filled": [
+ "A Valid A"
+ ],
+ "src-missing-alt-filled-space": [
+ "A No Trim A"
+ ],
+ "src-empty-alt-missing": [
+ "A http://example.test A"
+ ],
+ "src-empty-alt-empty": [
+ "A A"
+ ],
+ "src-empty-alt-filled": [
+ "A Valid A"
+ ],
+ "src-empty-alt-filled-space": [
+ "A No Trim A"
+ ],
+ "src-filled-alt-missing": [
+ "A http://example.test/Valid A"
+ ],
+ "src-filled-alt-empty": [
+ "A A"
+ ],
+ "src-filled-alt-filled": [
+ "A Valid A"
+ ],
+ "src-filled-alt-filled-space": [
+ "A No Trim A"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-img-u"
+ ],
+ "properties": {
+ "name": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "photo": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "url": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "src-missing-alt-missing": [
+ "http://example.test/AA"
+ ],
+ "src-missing-alt-empty": [
+ "http://example.test/AA"
+ ],
+ "src-missing-alt-filled": [
+ "http://example.test/AA"
+ ],
+ "src-missing-alt-filled-space": [
+ "http://example.test/AA"
+ ],
+ "src-empty-alt-missing": [
+ "http://example.test/AA"
+ ],
+ "src-empty-alt-empty": [
+ "http://example.test/AA"
+ ],
+ "src-empty-alt-filled": [
+ "http://example.test/AA"
+ ],
+ "src-empty-alt-filled-space": [
+ "http://example.test/AA"
+ ],
+ "src-filled-alt-missing": [
+ "http://example.test/AA"
+ ],
+ "src-filled-alt-empty": [
+ "http://example.test/AA"
+ ],
+ "src-filled-alt-filled": [
+ "http://example.test/AA"
+ ],
+ "src-filled-alt-filled-space": [
+ "http://example.test/AA"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-img-dt"
+ ],
+ "properties": {
+ "name": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "photo": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "url": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "src-missing-alt-missing": [
+ "AA"
+ ],
+ "src-missing-alt-empty": [
+ "AA"
+ ],
+ "src-missing-alt-filled": [
+ "AA"
+ ],
+ "src-missing-alt-filled-space": [
+ "AA"
+ ],
+ "src-empty-alt-missing": [
+ "AA"
+ ],
+ "src-empty-alt-empty": [
+ "AA"
+ ],
+ "src-empty-alt-filled": [
+ "AA"
+ ],
+ "src-empty-alt-filled-space": [
+ "AA"
+ ],
+ "src-filled-alt-missing": [
+ "AA"
+ ],
+ "src-filled-alt-empty": [
+ "AA"
+ ],
+ "src-filled-alt-filled": [
+ "AA"
+ ],
+ "src-filled-alt-filled-space": [
+ "AA"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-img-e"
+ ],
+ "properties": {
+ "name": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "photo": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "url": [
+ "http://example.test/NotPartOfTest"
+ ],
+ "src-missing-alt-missing": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A A"
+ }
+ ],
+ "src-missing-alt-empty": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A A"
+ }
+ ],
+ "src-missing-alt-filled": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A Valid A"
+ }
+ ],
+ "src-missing-alt-filled-space": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A No Trim A"
+ }
+ ],
+ "src-filled-alt-missing": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A http://example.test/Valid A"
+ }
+ ],
+ "src-filled-alt-empty": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A A"
+ }
+ ],
+ "src-filled-alt-filled": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A Valid A"
+ }
+ ],
+ "src-filled-alt-filled-space": [
+ {
+ "html": "\n A
A\n
",
+ "value": "A No Trim A"
+ }
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/value-date/tentative-value-date-ordinal.html b/tests/microformats-v2-unit/value-date/tentative-value-date-ordinal.html
new file mode 100644
index 0000000..dfbc711
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/tentative-value-date-ordinal.html
@@ -0,0 +1,12 @@
+
+
+
+
Ordinal dates
+
Invalid 1583-001 Invalid
+
Invalid 9999-365 Invalid
+
Invalid 2000-060 Invalid
+
Invalid 2000-366 Invalid
+
diff --git a/tests/microformats-v2-unit/value-date/tentative-value-date-ordinal.json b/tests/microformats-v2-unit/value-date/tentative-value-date-ordinal.json
new file mode 100644
index 0000000..45d146a
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/tentative-value-date-ordinal.json
@@ -0,0 +1,22 @@
+{
+ "items": [
+ {
+ "properties": {
+ "name": [
+ "Ordinal dates"
+ ],
+ "ordinal": [
+ "1583-01-01",
+ "9999-12-31",
+ "2000-02-29",
+ "2000-12-31"
+ ]
+ },
+ "type": [
+ "h-test-date-ord"
+ ]
+ }
+ ],
+ "rel-urls": {},
+ "rels": {}
+}
diff --git a/tests/microformats-v2-unit/value-date/tentative-value-date-short.html b/tests/microformats-v2-unit/value-date/tentative-value-date-short.html
new file mode 100644
index 0000000..e6897a2
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/tentative-value-date-short.html
@@ -0,0 +1,54 @@
+
+
+
+
24-hour time formats
+
Invalid 2000-01-01 0:00:00 Invalid
+
Invalid 2000-01-01 9:59:59 Invalid
+
Invalid 2000-01-01 0:00 Invalid
+
Invalid 2000-01-01 9:59 Invalid
+
+
+
+
12-hour time formats
+
Invalid 2000-01-01 1:00:00am Invalid
+
Invalid 2000-01-01 9:59:59am Invalid
+
Invalid 2000-01-01 1:00:00pm Invalid
+
Invalid 2000-01-01 9:59:59pm Invalid
+
Invalid 2000-01-01 1:00am Invalid
+
Invalid 2000-01-01 9:59am Invalid
+
Invalid 2000-01-01 1:00pm Invalid
+
Invalid 2000-01-01 9:59pm Invalid
+
Invalid 2000-01-01 1am Invalid
+
Invalid 2000-01-01 9am Invalid
+
Invalid 2000-01-01 1pm Invalid
+
Invalid 2000-01-01 9pm Invalid
+
+
+
+
Time zone offsets
+
Invalid 2000-01-01 00:00:00 +000 Invalid
+
Invalid 2000-01-01 00:00:00 -000 Invalid
+
Invalid 2000-01-01 00:00:00 -930 Invalid
+
Invalid 2000-01-01 00:00:00 +930 Invalid
+
Invalid 2000-01-01 00:00:00 +0:00 Invalid
+
Invalid 2000-01-01 00:00:00 -0:00 Invalid
+
Invalid 2000-01-01 00:00:00 -9:30 Invalid
+
Invalid 2000-01-01 00:00:00 +9:30 Invalid
+
Invalid 2000-01-01 00:00:00 +0 Invalid
+
Invalid 2000-01-01 00:00:00 -0 Invalid
+
Invalid 2000-01-01 00:00:00 -9 Invalid
+
Invalid 2000-01-01 00:00:00 +9 Invalid
+
diff --git a/tests/microformats-v2-unit/value-date/tentative-value-date-short.json b/tests/microformats-v2-unit/value-date/tentative-value-date-short.json
new file mode 100644
index 0000000..b842c16
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/tentative-value-date-short.json
@@ -0,0 +1,80 @@
+{
+ "items": [
+ {
+ "properties": {
+ "name": [
+ "24-hour time formats"
+ ],
+ "short-min": [
+ "2000-01-01 00:00",
+ "2000-01-01 09:59"
+ ],
+ "short-sec": [
+ "2000-01-01 00:00:00",
+ "2000-01-01 09:59:59"
+ ]
+ },
+ "type": [
+ "h-test-time-twentyfour"
+ ]
+ },
+ {
+ "properties": {
+ "name": [
+ "12-hour time formats"
+ ],
+ "short-hour": [
+ "2000-01-01 01:00",
+ "2000-01-01 09:00",
+ "2000-01-01 13:00",
+ "2000-01-01 21:00"
+ ],
+ "short-min": [
+ "2000-01-01 01:00",
+ "2000-01-01 09:59",
+ "2000-01-01 13:00",
+ "2000-01-01 21:59"
+ ],
+ "short-sec": [
+ "2000-01-01 01:00:00",
+ "2000-01-01 09:59:59",
+ "2000-01-01 13:00:00",
+ "2000-01-01 21:59:59"
+ ]
+ },
+ "type": [
+ "h-test-time-twelve"
+ ]
+ },
+ {
+ "properties": {
+ "name": [
+ "Time zone offsets"
+ ],
+ "short-bare": [
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00-0930",
+ "2000-01-01 00:00:00+0930"
+ ],
+ "short-colon": [
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00-0930",
+ "2000-01-01 00:00:00+0930"
+ ],
+ "short-hour": [
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00-0900",
+ "2000-01-01 00:00:00+0900"
+ ]
+ },
+ "type": [
+ "h-test-zone"
+ ]
+ }
+ ],
+ "rel-urls": {},
+ "rels": {}
+}
diff --git a/tests/microformats-v2-unit/value-date/tentative-value-date-utc.html b/tests/microformats-v2-unit/value-date/tentative-value-date-utc.html
new file mode 100644
index 0000000..24fbcf4
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/tentative-value-date-utc.html
@@ -0,0 +1,22 @@
+
+
+
+
Time zone offsets
+
Invalid 2000-01-01 00:00:00 Z Invalid
+
Invalid 2000-01-01 00:00:00 +0000 Invalid
+
Invalid 2000-01-01 00:00:00 -0000 Invalid
+
Invalid 2000-01-01 00:00:00 +00:00 Invalid
+
Invalid 2000-01-01 00:00:00 -00:00 Invalid
+
Invalid 2000-01-01 00:00:00 +00 Invalid
+
Invalid 2000-01-01 00:00:00 -00 Invalid
+
diff --git a/tests/microformats-v2-unit/value-date/tentative-value-date-utc.json b/tests/microformats-v2-unit/value-date/tentative-value-date-utc.json
new file mode 100644
index 0000000..748860c
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/tentative-value-date-utc.json
@@ -0,0 +1,31 @@
+{
+ "items": [
+ {
+ "properties": {
+ "full-bare": [
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00+0000"
+ ],
+ "full-colon": [
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00+0000"
+ ],
+ "full-hour": [
+ "2000-01-01 00:00:00+0000",
+ "2000-01-01 00:00:00+0000"
+ ],
+ "name": [
+ "Time zone offsets"
+ ],
+ "zulu": [
+ "2000-01-01 00:00:00Z"
+ ]
+ },
+ "type": [
+ "h-test-zone"
+ ]
+ }
+ ],
+ "rel-urls": {},
+ "rels": {}
+}
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/value-date/value-date-formats.html b/tests/microformats-v2-unit/value-date/value-date-formats.html
new file mode 100644
index 0000000..62198e9
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/value-date-formats.html
@@ -0,0 +1,161 @@
+
+
+
+
Control tests to ensure invalid values are rejected
+
Valid NotADate Valid
+
Valid 2000-00-00 Valid
+
Valid 2000-13-01 Valid
+
Valid 2000-12-32 Valid
+
Valid 2000-01-01 25:00:00 Valid
+
Valid 2000-01-01 23:60:00 Valid
+
Valid 2000-01-01 23:59:70 Valid
+
Valid 2000-01-01 00:00:00Y Valid
+
Valid 2000-01-01 00:00:00 NotADate Valid
+
Valid NotADate 2000-01-01 00:00:00 Valid
+
+
+
+
Calendar dates
+
Invalid 1583-01-01 Invalid
+
Invalid 9999-12-31 Invalid
+
Invalid 2000-02-29 Invalid
+
Invalid 2000-12-31 Invalid
+
+
+
+
24-hour time formats
+
Invalid 2000-01-01 00:00:00 Invalid
+
Invalid 2000-01-01 09:00:00 Invalid
+
Invalid 2000-01-01 23:59:59 Invalid
+
Invalid 2000-01-01 00:00 Invalid
+
Invalid 2000-01-01 09:00 Invalid
+
Invalid 2000-01-01 23:59 Invalid
+
+
+
+
12-hour time formats
+
Invalid 2000-01-01 12:00:00am Invalid
+
Invalid 2000-01-01 12:00:00Am Invalid
+
Invalid 2000-01-01 12:00:00aM Invalid
+
Invalid 2000-01-01 12:00:00AM Invalid
+
Invalid 2000-01-01 12:00:00pm Invalid
+
Invalid 2000-01-01 12:00:00Pm Invalid
+
Invalid 2000-01-01 12:00:00pM Invalid
+
Invalid 2000-01-01 12:00:00PM Invalid
+
Invalid 2000-01-01 12:00:00a.m. Invalid
+
Invalid 2000-01-01 12:00:00A.m. Invalid
+
Invalid 2000-01-01 12:00:00a.M. Invalid
+
Invalid 2000-01-01 12:00:00A.M. Invalid
+
Invalid 2000-01-01 12:00:00p.m. Invalid
+
Invalid 2000-01-01 12:00:00P.m. Invalid
+
Invalid 2000-01-01 12:00:00p.M. Invalid
+
Invalid 2000-01-01 12:00:00P.M. Invalid
+
Invalid 2000-01-01 12:00am Invalid
+
Invalid 2000-01-01 12:00Am Invalid
+
Invalid 2000-01-01 12:00aM Invalid
+
Invalid 2000-01-01 12:00AM Invalid
+
Invalid 2000-01-01 12:00pm Invalid
+
Invalid 2000-01-01 12:00Pm Invalid
+
Invalid 2000-01-01 12:00pM Invalid
+
Invalid 2000-01-01 12:00PM Invalid
+
Invalid 2000-01-01 12:00a.m. Invalid
+
Invalid 2000-01-01 12:00A.m. Invalid
+
Invalid 2000-01-01 12:00a.M. Invalid
+
Invalid 2000-01-01 12:00A.M. Invalid
+
Invalid 2000-01-01 12:00p.m. Invalid
+
Invalid 2000-01-01 12:00P.m. Invalid
+
Invalid 2000-01-01 12:00p.M. Invalid
+
Invalid 2000-01-01 12:00P.M. Invalid
+
Invalid 2000-01-01 12am Invalid
+
Invalid 2000-01-01 12Am Invalid
+
Invalid 2000-01-01 12aM Invalid
+
Invalid 2000-01-01 12AM Invalid
+
Invalid 2000-01-01 12pm Invalid
+
Invalid 2000-01-01 12Pm Invalid
+
Invalid 2000-01-01 12pM Invalid
+
Invalid 2000-01-01 12PM Invalid
+
Invalid 2000-01-01 12a.m. Invalid
+
Invalid 2000-01-01 12A.m. Invalid
+
Invalid 2000-01-01 12a.M. Invalid
+
Invalid 2000-01-01 12A.M. Invalid
+
Invalid 2000-01-01 12p.m. Invalid
+
Invalid 2000-01-01 12P.m. Invalid
+
Invalid 2000-01-01 12p.M. Invalid
+
Invalid 2000-01-01 12P.M. Invalid
+
Invalid 2000-01-01 01:00:00am Invalid
+
Invalid 2000-01-01 09:00:00am Invalid
+
Invalid 2000-01-01 11:59:59am Invalid
+
Invalid 2000-01-01 01:00:00pm Invalid
+
Invalid 2000-01-01 09:00:00pm Invalid
+
Invalid 2000-01-01 11:59:59pm Invalid
+
Invalid 2000-01-01 01:00am Invalid
+
Invalid 2000-01-01 09:00am Invalid
+
Invalid 2000-01-01 11:59am Invalid
+
Invalid 2000-01-01 01:00pm Invalid
+
Invalid 2000-01-01 09:00pm Invalid
+
Invalid 2000-01-01 11:59pm Invalid
+
Invalid 2000-01-01 01am Invalid
+
Invalid 2000-01-01 09am Invalid
+
Invalid 2000-01-01 11am Invalid
+
Invalid 2000-01-01 01pm Invalid
+
Invalid 2000-01-01 09pm Invalid
+
Invalid 2000-01-01 11pm Invalid
+
+
+
+
+
Time zone offsets
+
Invalid 2000-01-01 00:00:00 -1200 Invalid
+
Invalid 2000-01-01 00:00:00 -0330 Invalid
+
Invalid 2000-01-01 00:00:00 +0430 Invalid
+
Invalid 2000-01-01 00:00:00 +0545 Invalid
+
Invalid 2000-01-01 00:00:00 +1245 Invalid
+
Invalid 2000-01-01 00:00:00 +1400 Invalid
+
Invalid 2000-01-01 00:00:00 -12:00 Invalid
+
Invalid 2000-01-01 00:00:00 -03:30 Invalid
+
Invalid 2000-01-01 00:00:00 +04:30 Invalid
+
Invalid 2000-01-01 00:00:00 +05:45 Invalid
+
Invalid 2000-01-01 00:00:00 +12:45 Invalid
+
Invalid 2000-01-01 00:00:00 +14:00 Invalid
+
Invalid 2000-01-01 00:00:00 -12 Invalid
+
Invalid 2000-01-01 00:00:00 -03 Invalid
+
Invalid 2000-01-01 00:00:00 +04 Invalid
+
Invalid 2000-01-01 00:00:00 +05 Invalid
+
Invalid 2000-01-01 00:00:00 +12 Invalid
+
Invalid 2000-01-01 00:00:00 +14 Invalid
+
+
+
+
Combined representations
+
Invalid 2000-01-01 00:00:00 Invalid
+
Invalid 2000-01-01T00:00:00 Invalid
+
Invalid 2000-01-01 00:00:00+0100 Invalid
+
Invalid 2000-01-01 00:00:00+0100 Invalid
+
Invalid 2000-01-01T00:00:00+0100 Invalid
+
diff --git a/tests/microformats-v2-unit/value-date/value-date-formats.json b/tests/microformats-v2-unit/value-date/value-date-formats.json
new file mode 100644
index 0000000..b90e7c5
--- /dev/null
+++ b/tests/microformats-v2-unit/value-date/value-date-formats.json
@@ -0,0 +1,211 @@
+{
+ "items": [
+ {
+ "properties": {
+ "name": [
+ "Control tests to ensure invalid values are rejected"
+ ],
+ "not-a-date": [
+ "Valid NotADate Valid",
+ "Valid 2000-00-00 Valid",
+ "Valid 2000-13-01 Valid",
+ "Valid 2000-12-32 Valid",
+ "Valid 2000-01-01 25:00:00 Valid",
+ "Valid 2000-01-01 23:60:00 Valid",
+ "Valid 2000-01-01 23:59:70 Valid",
+ "Valid 2000-01-01 00:00:00Y Valid",
+ "Valid 2000-01-01 00:00:00 NotADate Valid",
+ "Valid NotADate 2000-01-01 00:00:00 Valid"
+ ]
+ },
+ "type": [
+ "h-test-control"
+ ]
+ },
+ {
+ "properties": {
+ "calendar": [
+ "1583-01-01",
+ "9999-12-31",
+ "2000-02-29",
+ "2000-12-31"
+ ],
+ "name": [
+ "Calendar dates"
+ ]
+ },
+ "type": [
+ "h-test-date-cal"
+ ]
+ },
+ {
+ "properties": {
+ "full-min": [
+ "2000-01-01 00:00",
+ "2000-01-01 09:00",
+ "2000-01-01 23:59"
+ ],
+ "full-sec": [
+ "2000-01-01 00:00:00",
+ "2000-01-01 09:00:00",
+ "2000-01-01 23:59:59"
+ ],
+ "name": [
+ "24-hour time formats"
+ ]
+ },
+ "type": [
+ "h-test-time-twentyfour"
+ ]
+ },
+ {
+ "properties": {
+ "case-hour": [
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00"
+ ],
+ "case-min": [
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 00:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00",
+ "2000-01-01 12:00"
+ ],
+ "case-sec": [
+ "2000-01-01 00:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 00:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 12:00:00",
+ "2000-01-01 12:00:00"
+ ],
+ "full-hour": [
+ "2000-01-01 01:00",
+ "2000-01-01 09:00",
+ "2000-01-01 11:00",
+ "2000-01-01 13:00",
+ "2000-01-01 21:00",
+ "2000-01-01 23:00"
+ ],
+ "full-min": [
+ "2000-01-01 01:00",
+ "2000-01-01 09:00",
+ "2000-01-01 11:59",
+ "2000-01-01 13:00",
+ "2000-01-01 21:00",
+ "2000-01-01 23:59"
+ ],
+ "full-sec": [
+ "2000-01-01 01:00:00",
+ "2000-01-01 09:00:00",
+ "2000-01-01 11:59:59",
+ "2000-01-01 13:00:00",
+ "2000-01-01 21:00:00",
+ "2000-01-01 23:59:59"
+ ],
+ "name": [
+ "12-hour time formats"
+ ]
+ },
+ "type": [
+ "h-test-time-twelve"
+ ]
+ },
+ {
+ "properties": {
+ "full-bare": [
+ "2000-01-01 00:00:00-1200",
+ "2000-01-01 00:00:00-0330",
+ "2000-01-01 00:00:00+0430",
+ "2000-01-01 00:00:00+0545",
+ "2000-01-01 00:00:00+1245",
+ "2000-01-01 00:00:00+1400"
+ ],
+ "full-colon": [
+ "2000-01-01 00:00:00-1200",
+ "2000-01-01 00:00:00-0330",
+ "2000-01-01 00:00:00+0430",
+ "2000-01-01 00:00:00+0545",
+ "2000-01-01 00:00:00+1245",
+ "2000-01-01 00:00:00+1400"
+ ],
+ "full-hour": [
+ "2000-01-01 00:00:00-1200",
+ "2000-01-01 00:00:00-0300",
+ "2000-01-01 00:00:00+0400",
+ "2000-01-01 00:00:00+0500",
+ "2000-01-01 00:00:00+1200",
+ "2000-01-01 00:00:00+1400"
+ ],
+ "name": [
+ "Time zone offsets"
+ ]
+ },
+ "type": [
+ "h-test-zone"
+ ]
+ },
+ {
+ "properties": {
+ "date-time-space": [
+ "2000-01-01 00:00:00"
+ ],
+ "date-time-t": [
+ "2000-01-01 00:00:00"
+ ],
+ "full-space": [
+ "2000-01-01 00:00:00+0100"
+ ],
+ "full-t": [
+ "2000-01-01 00:00:00+0100"
+ ],
+ "name": [
+ "Combined representations"
+ ],
+ "time-zone": [
+ "2000-01-01 00:00:00+0100"
+ ]
+ },
+ "type": [
+ "h-combined"
+ ]
+ }
+ ],
+ "rel-urls": {},
+ "rels": {}
+}
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/value-title/value-title-dt.html b/tests/microformats-v2-unit/value-title/value-title-dt.html
new file mode 100644
index 0000000..0580154
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-dt.html
@@ -0,0 +1,157 @@
+
+
+
+
NotPartOfTest
+
Invalid 2099-01-01 Invalid
+
Invalid 2099-01-01 Invalid 23:59:59
+
Invalid 2099-01-01 Invalid
+
Invalid 2099-01-01 Invalid Invalid 23:59:59 Invalid Invalid Invalid
+
Invalid
2099-01-01
Invalid
+
+
+ Invalid
+
2099-01-01
+
23:59:59
+ Invalid
+
+
+
+
+
+
+
NotPartOfTest
+
Valid 2099-01-01 Valid
+
Invalid 2099-01-01 00:00:00+0000 Invalid
+
Invalid 2099-01-01 23:59:59+1130 Invalid
+
Invalid 2099-01-01 00:00:00 +1130 Invalid
+
Invalid 2099-01-01 23:59:59 +1130 Invalid
+
Invalid +1130 23:59:59 2099-01-01 Invalid
+
+ Invalid
+ 2099-01-01
+ 1999-12-31
+ Invalid
+
+
+ Invalid
+ 02:00:00
+ 2199-12-31 23:59:59
+ 2099-01-01
+ Invalid
+
+
+ Invalid
+ 2099-01-01
+ 02:00:00
+ 02:00:00+1130
+ Invalid
+
+
+ Invalid
+ 2099-01-01
+ +1130
+ 23:59:59+0000
+ 23:58:57
+ Invalid
+
+
+ Invalid
+ 2099-01-01
+ +1130
+ 23:59:59+0000
+ Invalid
+
+
+
+
+
NotPartOfTest
+
Valid 23:59:59+1130 Valid
+
+
+
+
NotPartOfTest
+
Invalid 2099-01-01 23:59:59+0000 Invalid
+
Invalid 23:59:59+1130 Invalid
+
+
+
+
NotPartOfTest
+
Invalid 23:59:59+1130 Invalid
+
Invalid 2099-01-01 23:59:59+0000 Invalid
+
+
+
+
NotPartOfTest
+
Invalid
Invalid
+
Valid
+
Valid
+
+
+
+
+
+
NotPartOfTest
+
Invalid 2099-01-01 Invalid
+
Valid 2099-01-01 Valid
+
Valid 2099-01-01 Valid
+
+
+
+
+
+
NotPartOfTest
+
Invalid 2099-01-01 Invalid
+
Valid 2099-01-01 Valid
+
Valid 2099-01-01 Valid
+
+
+
+
NotPartOfTest
+
Invalid 2099-01-01 Invalid
+
Valid 2099-01-01 Valid
+
Valid 2099-01-01 Valid
+
+
+
+
NotPartOfTest
+
Invalid 2099-01-01 Invalid
+
Valid 2099-01-01 Valid
+
Valid 2099-01-01 Valid
+
+
+
+
+
NotPartOfTest
+
Invalid 2199-01-01 Invalid
+
Invalid 2199-01-01 Invalid
+
Invalid 2199-01-01 Invalid
+
Invalid 2199-01-01 Invalid
+
Invalid 2199-01-01 Invalid
+
diff --git a/tests/microformats-v2-unit/value-title/value-title-dt.json b/tests/microformats-v2-unit/value-title/value-title-dt.json
new file mode 100644
index 0000000..3e00a5e
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-dt.json
@@ -0,0 +1,312 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-value"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "single": [
+ "2000-01-01"
+ ],
+ "double": [
+ "2000-01-01 00:00:00"
+ ],
+ "other-classes": [
+ "2000-01-01"
+ ],
+ "deep": [
+ "2000-01-01 00:00:00"
+ ],
+ "is-property": [
+ "2000-01-01"
+ ],
+ "not-part-of-test": [
+ "2099-01-01",
+ "22:45:45"
+ ],
+ "is-microformat": [
+ "2000-01-01"
+ ],
+ "inside-property": [
+ "2000-01-01"
+ ],
+ "inside-microformat": [
+ "2000-01-01"
+ ]
+ },
+ "children": [
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "2099-01-01"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "23:59:59"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "type": [
+ "h-test-acceptable"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "not-a-date": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "1-with-tz": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "2-with-tz": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "3-with-tz": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "4-with-tz": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "misordered": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "1-first-wins": [
+ "2000-01-01"
+ ],
+ "2-first-wins": [
+ "2000-01-01 00:00:00"
+ ],
+ "3-first-wins": [
+ "2000-01-01 00:00:00"
+ ],
+ "4-first-wins": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "5-first-wins": [
+ "2000-01-01"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-implied-date-missing"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "time-only": [
+ "Valid 23:59:59+1130 Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-implied-date-before"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "implied": [
+ "2000-01-01 23:59:59+0000"
+ ],
+ "time-only": [
+ "2000-01-01 00:00:00+0000"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-implied-date-after"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "time-only": [
+ "2000-01-01 00:00:00+0000"
+ ],
+ "implied": [
+ "2000-01-01 23:59:59+0000"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-img"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid"
+ ],
+ "missing": [
+ "Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-area"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid"
+ ],
+ "missing": [
+ "Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-data"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "missing": [
+ "Valid 2099-01-01 Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-abbr"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "missing": [
+ "Valid 2099-01-01 Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-time"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "missing": [
+ "Valid 2099-01-01 Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-ins"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "missing": [
+ "Valid 2099-01-01 Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-del"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "2000-01-01"
+ ],
+ "empty": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "missing": [
+ "Valid 2099-01-01 Valid"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-override"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "time": [
+ "2000-01-01"
+ ],
+ "ins": [
+ "2000-01-01"
+ ],
+ "del": [
+ "2000-01-01"
+ ],
+ "abbr": [
+ "2000-01-01"
+ ],
+ "data": [
+ "2000-01-01"
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/value-title/value-title-e.html b/tests/microformats-v2-unit/value-title/value-title-e.html
new file mode 100644
index 0000000..b5449ae
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-e.html
@@ -0,0 +1,15 @@
+
+
+
+
NotPartOfTest
+
Val id
+
diff --git a/tests/microformats-v2-unit/value-title/value-title-e.json b/tests/microformats-v2-unit/value-title/value-title-e.json
new file mode 100644
index 0000000..eb7d447
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-e.json
@@ -0,0 +1,22 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-no-vcp"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "no-vcp": [
+ {
+ "html": "Val id",
+ "value": "Valid"
+ }
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/value-title/value-title-mixed.html b/tests/microformats-v2-unit/value-title/value-title-mixed.html
new file mode 100644
index 0000000..3a829cb
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-mixed.html
@@ -0,0 +1,52 @@
+
+
+
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
NotPartOfTest
+
Val id
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid
+
Valid 2099-01-01 Valid
+
Valid 2099-01-01 Valid
+
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/value-title/value-title-mixed.json b/tests/microformats-v2-unit/value-title/value-title-mixed.json
new file mode 100644
index 0000000..c160846
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-mixed.json
@@ -0,0 +1,130 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-mixed-p"
+ ],
+ "properties": {
+ "control": [
+ "Valid"
+ ],
+ "single-title-first": [
+ "Valid"
+ ],
+ "single-value-first": [
+ "Valid"
+ ],
+ "double-title-first": [
+ "Valid"
+ ],
+ "double-value-first": [
+ "Valid"
+ ],
+ "double-mixed-title-first": [
+ "Valid"
+ ],
+ "double-mixed-value-first": [
+ "Valid"
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-mixed-u"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "control": [
+ "http://example.test/Valid"
+ ],
+ "single-title-first": [
+ "http://example.test/Valid"
+ ],
+ "single-value-first": [
+ "http://example.test/Valid"
+ ],
+ "double-title-first": [
+ "http://example.test/Valid"
+ ],
+ "double-value-first": [
+ "http://example.test/Valid"
+ ],
+ "double-mixed-title-first": [
+ "http://example.test/Valid"
+ ],
+ "double-mixed-value-first": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-mixed-e"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "no-vcp": [
+ {
+ "html": "Val id",
+ "value": "Valid"
+ }
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-mixed-dt"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "control": [
+ "2000-01-01"
+ ],
+ "single-title-first": [
+ "2000-01-01"
+ ],
+ "single-value-first": [
+ "2000-01-01"
+ ],
+ "double-title-first": [
+ "2000-01-01 00:00:00"
+ ],
+ "double-value-first": [
+ "2000-01-01 00:00:00"
+ ],
+ "double-mixed-title-first": [
+ "2000-01-01 00:00:00"
+ ],
+ "double-mixed-value-first": [
+ "2000-01-01 00:00:00"
+ ],
+ "empty": [
+ "Valid 2099-01-01 Valid"
+ ],
+ "missing": [
+ "Valid 2099-01-01 Valid"
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/value-title/value-title-p.html b/tests/microformats-v2-unit/value-title/value-title-p.html
new file mode 100644
index 0000000..84d55fa
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-p.html
@@ -0,0 +1,86 @@
+
+
+
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid Invalid Invalid
+
Invalid Invali d Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid Invalid Invalid Invalid
+
+
+
+ Invalid
+
Invalid
+
Invalid
+ Invalid
+
+
+
+
+
+
+
Invalid
Invalid
+
Invalid
Invalid
+
Invalid
Invalid
+
Invalid
Invalid
+
+
+
+
+
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
diff --git a/tests/microformats-v2-unit/value-title/value-title-p.json b/tests/microformats-v2-unit/value-title/value-title-p.json
new file mode 100644
index 0000000..37ac6cd
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-p.json
@@ -0,0 +1,218 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-value"
+ ],
+ "properties": {
+ "single": [
+ "Valid"
+ ],
+ "double": [
+ "Valid"
+ ],
+ "quintuple": [
+ "Valid"
+ ],
+ "nested": [
+ "Valid"
+ ],
+ "other-classes": [
+ "Valid"
+ ],
+ "self": [
+ "Valid"
+ ],
+ "deep": [
+ "Valid"
+ ],
+ "is-property": [
+ "Valid"
+ ],
+ "not-part-of-test": [
+ "Property",
+ "NotPartOfTest"
+ ],
+ "is-microformat": [
+ "Valid"
+ ],
+ "inside-property": [
+ "Valid"
+ ],
+ "inside-microformat": [
+ "Valid"
+ ]
+ },
+ "children": [
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "type": [
+ "h-test-img"
+ ],
+ "properties": {
+ "filled": [
+ "Valid"
+ ],
+ "filled-space": [
+ " No Trim "
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-area"
+ ],
+ "properties": {
+ "filled": [
+ "Valid"
+ ],
+ "filled-space": [
+ " No Trim "
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-data"
+ ],
+ "properties": {
+ "filled": [
+ "Valid"
+ ],
+ "filled-space": [
+ " No Trim "
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-abbr"
+ ],
+ "properties": {
+ "filled": [
+ "Valid"
+ ],
+ "filled-space": [
+ " No Trim "
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-time"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "Valid"
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-ins"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "Valid"
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-del"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "Valid"
+ ],
+ "empty": [
+ ""
+ ],
+ "missing": [
+ ""
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-override"
+ ],
+ "properties": {
+ "abbr": [
+ "Valid"
+ ],
+ "data": [
+ "Valid"
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/value-title/value-title-u.html b/tests/microformats-v2-unit/value-title/value-title-u.html
new file mode 100644
index 0000000..2740676
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-u.html
@@ -0,0 +1,98 @@
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid Invalid Invalid
+
Invalid Invali d Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid Invalid Invalid Invalid Invalid Invalid
+
+
+
+ Invalid
+
Invalid
+
Invalid
+ Invalid
+
+
+
+
+
+
+
NotPartOfTest
+
Invalid
Invalid
+
Invalid
Invalid
+
Invalid
Invalid
+
+
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
NotPartOfTest
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
+
+
+
+
NotPartOfTest
+
Invalid
+
+
Invalid
+
Invalid
+
Invalid
+
Invalid Invalid Invalid
+
Invalid Invalid Invalid
+
diff --git a/tests/microformats-v2-unit/value-title/value-title-u.json b/tests/microformats-v2-unit/value-title/value-title-u.json
new file mode 100644
index 0000000..93f2c18
--- /dev/null
+++ b/tests/microformats-v2-unit/value-title/value-title-u.json
@@ -0,0 +1,239 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-value"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "single": [
+ "http://example.test/Valid"
+ ],
+ "double": [
+ "http://example.test/Valid"
+ ],
+ "quintuple": [
+ "http://example.test/Valid"
+ ],
+ "nested": [
+ "http://example.test/Valid"
+ ],
+ "other-classes": [
+ "http://example.test/Valid"
+ ],
+ "self": [
+ "http://example.test/Valid"
+ ],
+ "deep": [
+ "http://example.test/Valid"
+ ],
+ "is-property": [
+ "http://example.test/Valid"
+ ],
+ "not-part-of-test": [
+ "http://example.test/Property",
+ "NotPartOfTest"
+ ],
+ "is-microformat": [
+ "http://example.test/Valid"
+ ],
+ "inside-property": [
+ "http://example.test/Valid"
+ ],
+ "inside-microformat": [
+ "http://example.test/Valid"
+ ]
+ },
+ "children": [
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-child"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "type": [
+ "h-test-img"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-area"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-data"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-abbr"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-time"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-ins"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-del"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "filled": [
+ "http://example.test/Valid"
+ ],
+ "empty": [
+ "http://example.test"
+ ],
+ "missing": [
+ "http://example.test"
+ ]
+ }
+ },
+ {
+ "type": [
+ "h-test-override"
+ ],
+ "properties": {
+ "name": [
+ "NotPartOfTest"
+ ],
+ "audio": [
+ "http://example.test/Valid"
+ ],
+ "iframe": [
+ "http://example.test/Valid"
+ ],
+ "video-src": [
+ "http://example.test/Valid"
+ ],
+ "video-poster": [
+ "http://example.test/Valid"
+ ],
+ "object": [
+ "http://example.test/Valid"
+ ],
+ "abbr": [
+ "http://example.test/Valid"
+ ],
+ "data": [
+ "http://example.test/Valid"
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
diff --git a/tests/microformats-v2-unit/value/tentative-value-innertext.html b/tests/microformats-v2-unit/value/tentative-value-innertext.html
new file mode 100644
index 0000000..7e6253c
--- /dev/null
+++ b/tests/microformats-v2-unit/value/tentative-value-innertext.html
@@ -0,0 +1,17 @@
+
+
+
+
Invalid No Trim Invalid
+
Invalid No Trim Invalid
+
\ No newline at end of file
diff --git a/tests/microformats-v2-unit/value/tentative-value-innertext.json b/tests/microformats-v2-unit/value/tentative-value-innertext.json
new file mode 100644
index 0000000..5002e03
--- /dev/null
+++ b/tests/microformats-v2-unit/value/tentative-value-innertext.json
@@ -0,0 +1,19 @@
+{
+ "items": [
+ {
+ "type": [
+ "h-test-p"
+ ],
+ "properties": {
+ "single": [
+ " No Trim "
+ ],
+ "double": [
+ " No Trim "
+ ]
+ }
+ }
+ ],
+ "rels": {},
+ "rel-urls": {}
+}
\ No newline at end of file