forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			193 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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",
 | |
|       },
 | |
|     ]
 | |
|   );
 | |
| });
 | 
