//
// 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")
}
}