Skip to content

Commit 22d5e71

Browse files
committed
Add testDecodeMaps
1 parent d8ca731 commit 22d5e71

File tree

1 file changed

+52
-1
lines changed

1 file changed

+52
-1
lines changed

Tests/HTMLEntitiesTests/HTMLEntitiesTests.swift

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
import XCTest
1818
@testable import HTMLEntities
1919

20+
#if canImport(FoundationNetworking)
21+
import FoundationNetworking
22+
#endif
23+
2024
let replacementCharacterAsString = "\u{FFFD}"
2125

2226
/// HTML snippet
@@ -398,6 +402,52 @@ class HTMLEntitiesTests: XCTestCase {
398402
XCTAssertEqual(try text.htmlUnescape(strict: false), "한")
399403
}
400404

405+
func testDecodeMaps() throws {
406+
struct CodePointsAndCharacters: Codable {
407+
var codepoints: [UInt32]
408+
var characters: String
409+
}
410+
411+
var entitiesData: Data?
412+
var dataTaskError: Error?
413+
let expectation = self.expectation(description: "Downloading entities.json")
414+
415+
let url = URL(string: "https://html.spec.whatwg.org/entities.json")!
416+
URLSession.shared.dataTask(with: url) { data, _, error in
417+
if let error = error {
418+
dataTaskError = error
419+
} else if let data = data {
420+
entitiesData = data
421+
}
422+
expectation.fulfill()
423+
}.resume()
424+
425+
self.wait(for: [expectation], timeout: 60)
426+
427+
if let dataTaskError = dataTaskError {
428+
throw dataTaskError
429+
}
430+
431+
guard let data = entitiesData else {
432+
XCTFail("Failed to download entities.json")
433+
return
434+
}
435+
436+
let dict = try JSONDecoder().decode([String: CodePointsAndCharacters].self, from: data)
437+
438+
for (k, v) in specialNamedCharactersDecodeMap {
439+
XCTAssertEqual(dict["&\(k)"]!.codepoints, v.unicodeScalars.map(\.value), k)
440+
}
441+
442+
for (k, v) in legacyNamedCharactersDecodeMap {
443+
XCTAssertEqual(dict["&\(k)"]!.codepoints, v.unicodeScalars.map(\.value), k)
444+
}
445+
446+
for (k, v) in namedCharactersDecodeMap {
447+
XCTAssertEqual(dict["&\(k)"]!.codepoints, v.unicodeScalars.map(\.value), k)
448+
}
449+
}
450+
401451
static var allTests : [(String, (HTMLEntitiesTests) -> () throws -> Void)] {
402452
return [
403453
("testNamedCharacterReferences", testNamedCharacterReferences),
@@ -406,7 +456,8 @@ class HTMLEntitiesTests: XCTestCase {
406456
("testDecode", testDecode),
407457
("testInvertibility", testInvertibility),
408458
("testEdgeCases", testEdgeCases),
409-
("testREADMEExamples", testREADMEExamples)
459+
("testREADMEExamples", testREADMEExamples),
460+
("testDecodeMaps", testDecodeMaps)
410461
]
411462
}
412463
}

0 commit comments

Comments
 (0)