summaryrefslogtreecommitdiffstats
path: root/browser/components/pagedata/tests/unit/test_schemaorg_parse.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/pagedata/tests/unit/test_schemaorg_parse.js')
-rw-r--r--browser/components/pagedata/tests/unit/test_schemaorg_parse.js193
1 files changed, 193 insertions, 0 deletions
diff --git a/browser/components/pagedata/tests/unit/test_schemaorg_parse.js b/browser/components/pagedata/tests/unit/test_schemaorg_parse.js
new file mode 100644
index 0000000000..e002598af2
--- /dev/null
+++ b/browser/components/pagedata/tests/unit/test_schemaorg_parse.js
@@ -0,0 +1,193 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Tests that the page data service can parse schema.org metadata into Item
+ * structures.
+ */
+
+const { SchemaOrgPageData } = ChromeUtils.importESModule(
+ "resource:///modules/pagedata/SchemaOrgPageData.sys.mjs"
+);
+
+/**
+ * Collects the schema.org items from the given html string.
+ *
+ * @param {string} docStr
+ * The html to parse.
+ * @returns {Promise<Item[]>}
+ */
+async function collectItems(docStr) {
+ let doc = await parseDocument(docStr);
+ return SchemaOrgPageData.collectItems(doc);
+}
+
+/**
+ * Verifies that the items parsed from the html match the expected JSON-LD
+ * format.
+ *
+ * @param {string} docStr
+ * The html to parse.
+ * @param {object[]} expected
+ * The JSON-LD objects to match to.
+ */
+async function verifyItems(docStr, expected) {
+ let items = await collectItems(docStr);
+ let jsonLD = items.map(item => item.toJsonLD());
+ Assert.deepEqual(jsonLD, expected);
+}
+
+add_task(async function test_microdata_parse() {
+ await verifyItems(
+ `
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <title>Product Info 1</title>
+ </head>
+ <body itemprop="badprop">
+ <div itemscope itemtype="https://schema.org/Organization">
+ <div itemprop="employee" itemscope itemtype="https://schema.org/Person">
+ <span itemprop="name">Mr. Nested Name</span>
+ </div>
+
+ <span itemprop="name">Mozilla</span>
+ </div>
+
+ <div itemscope itemtype="https://schema.org/Product">
+ <img itemprop="image" src="bon-echo-microwave-17in.jpg" />
+ <a href="microwave.html" itemprop="url">
+ <span itemprop="name">Bon Echo Microwave</span>
+ </a>
+
+ <div itemprop="offers" itemscope itemtype="https://schema.org/Offer">
+ <span itemprop="price" content="3.50">£3.50</span>
+ <span itemprop="priceCurrency" content="GBP"></span>
+ </div>
+
+ <span itemprop="gtin" content="13572468"></span>
+
+ <span itemprop="description">The most amazing microwave in the world</span>
+ </div>
+ </body>
+ </html>
+ `,
+ [
+ {
+ "@type": "Organization",
+ employee: {
+ "@type": "Person",
+ name: "Mr. Nested Name",
+ },
+ name: "Mozilla",
+ },
+ {
+ "@type": "Product",
+ image: BASE_URL + "/bon-echo-microwave-17in.jpg",
+ url: BASE_URL + "/microwave.html",
+ name: "Bon Echo Microwave",
+ offers: {
+ "@type": "Offer",
+ price: "3.50",
+ priceCurrency: "GBP",
+ },
+ gtin: "13572468",
+ description: "The most amazing microwave in the world",
+ },
+ ]
+ );
+});
+
+add_task(async function test_json_ld_parse() {
+ await verifyItems(
+ `
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <script type="application/ld+json">
+ {
+ "@context": "http://schema.org",
+ "@type": "Organization",
+ "employee": {
+ "@type": "Person",
+ "name": "Mr. Nested Name"
+ },
+ "name": "Mozilla"
+ }
+ </script>
+ <script type="application/ld+json">
+ {
+ "@context": "https://schema.org",
+ "@type": "Product",
+ "image": "bon-echo-microwave-17in.jpg",
+ "url": "microwave.html",
+ "name": "Bon Echo Microwave",
+ "offers": {
+ "@type": "Offer",
+ "price": "3.50",
+ "priceCurrency": "GBP"
+ },
+ "gtin": "13572468",
+ "description": "The most amazing microwave in the world"
+ }
+ </script>
+ </head>
+ <body>
+ </body>
+ </html>
+ `,
+ [
+ {
+ "@type": "Organization",
+ employee: {
+ "@type": "Person",
+ name: "Mr. Nested Name",
+ },
+ name: "Mozilla",
+ },
+ {
+ "@type": "Product",
+ image: "bon-echo-microwave-17in.jpg",
+ url: "microwave.html",
+ name: "Bon Echo Microwave",
+ offers: {
+ "@type": "Offer",
+ price: "3.50",
+ priceCurrency: "GBP",
+ },
+ gtin: "13572468",
+ description: "The most amazing microwave in the world",
+ },
+ ]
+ );
+});
+
+add_task(async function test_microdata_lazy_image() {
+ await verifyItems(
+ `
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <title>Product Info 1</title>
+ </head>
+ <body itemprop="badprop">
+ <div itemscope itemtype="https://schema.org/Product">
+ <img itemprop="image" src="lazy-load.gif" data-src="bon-echo-microwave-17in.jpg" />
+ <a href="microwave.html" itemprop="url">
+ <span itemprop="name">Bon Echo Microwave</span>
+ </a>
+ </div>
+ </body>
+ </html>
+ `,
+ [
+ {
+ "@type": "Product",
+ image: BASE_URL + "/bon-echo-microwave-17in.jpg",
+ url: BASE_URL + "/microwave.html",
+ name: "Bon Echo Microwave",
+ },
+ ]
+ );
+});