/* 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} */ 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( ` Product Info 1
Mr. Nested Name
Mozilla
£3.50
The most amazing microwave in the world
`, [ { "@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( ` `, [ { "@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( ` Product Info 1
`, [ { "@type": "Product", image: BASE_URL + "/bon-echo-microwave-17in.jpg", url: BASE_URL + "/microwave.html", name: "Bon Echo Microwave", }, ] ); });