// // Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only // import Foundation import XCTest @testable import SignalUI class HTMLMetadataTests: XCTestCase { func testEmptyBody() { let empty = HTMLMetadata.construct(parsing: "") XCTAssertEqual(empty, HTMLMetadata()) } func testParseTitleTags() { let testSet: [String: String] = [ "Simple": "Simple", "\nhello\n\tTwo Lines\n\nblahhhh": "Two Lines", "Title1Title2": "Title1", " \n\t < title \n>Oddly spaced< /title >": "Oddly spaced", ""Entities"": "\"Entities\"", ] testSet.forEach { test, expectedResult in XCTAssertEqual( HTMLMetadata.construct(parsing: test), HTMLMetadata(titleTag: expectedResult), ) } } func testParseFaviconUrlString() { let testSet: [String: String?] = [ "": "test.ico", "< link rel=\" shortcut icon \" href=\"spacedddd\" />": "spacedddd", "": nil, """ """: "first", "": "href first", ] testSet.forEach { test, expectedResult in XCTAssertEqual( HTMLMetadata.construct(parsing: test), HTMLMetadata(faviconUrlString: expectedResult), ) } } func testParseMetaDescription() { let testSet: [String: String?] = [ "": "DescriptionText", "< meta name = \"description\" \n\n\n content=\"Spaced Description\" />": "Spaced Description", "": "DescriptionText", "": nil, ] testSet.forEach { test, expectedResult in XCTAssertEqual( HTMLMetadata.construct(parsing: test), HTMLMetadata(description: expectedResult), ) } } func testParseOpengraphTitle() { let testSet: [String: String?] = [ "": "TestTitle", "": "FlippedTitle", "": "TitleWithGarbage", "": "Title", ] testSet.forEach { test, expectedResult in XCTAssertEqual( HTMLMetadata.construct(parsing: test), HTMLMetadata(ogTitle: expectedResult), ) } } func testParseOneOfEach_Simple() { let testHTML = """ TitleString """ let testMetadata = HTMLMetadata.construct(parsing: testHTML) XCTAssertEqual(testMetadata, HTMLMetadata( titleTag: "TitleString", faviconUrlString: "FaviconString", description: "DescriptionString", ogTitle: "OpengraphTitle", ogDescription: "OpengraphDescription", ogImageUrlString: "ImageURL", ogPublishDateString: "PublishedDate", articlePublishDateString: "ArticlePublishedDate", ogModifiedDateString: "ModifiedDate", articleModifiedDateString: "ArticleModifiedDate", )) } func testParseFallbackImage() { let testHTML = """ TitleString """ let testMetadata = HTMLMetadata.construct(parsing: testHTML) XCTAssertEqual(testMetadata, HTMLMetadata( titleTag: "TitleString", faviconUrlString: "FaviconString", description: "DescriptionString", ogImageUrlString: "FallbackImageURL", )) } func testLinkDataParsing() { let linkText = ( "" + "", ) let content = HTMLMetadata.construct(parsing: linkText) XCTAssertNotNil(content) XCTAssertEqual(content.ogTitle, "Randomness is Random - Numberphile") XCTAssertEqual(content.ogImageUrlString, "https://i.ytimg.com/vi/tP-Ipsat90c/maxresdefault.jpg") } }