diff --git a/Sources/Entities.swift b/Sources/Entities.swift index 80fdff4..eff58a9 100644 --- a/Sources/Entities.swift +++ b/Sources/Entities.swift @@ -89,13 +89,30 @@ public class Entities { public func codepointForName(_ name: String) -> Int { - let index = nameKeys.binarySearch(nameKeys,name) - return index >= 0 ? codeVals[index] : empty + var i = 0 + var found = false + for s in nameKeys + { + if s == name{ + found = true; + break + } + i += 1 + } + return found ? codeVals[i] : empty } public func nameForCodepoint(_ codepoint: Int )->String { //let ss = codeKeys.index(of: codepoint) - let index = codeKeys.binarySearch(codeKeys,codepoint) + + var index = -1 + for s in codeKeys + { + if s == codepoint { + index = codeKeys.index(of: codepoint)! + } + } + if (index >= 0) { // the results are ordered so lower case versions of same codepoint come after uppercase, and we prefer to emit lower // (and binary search for same item with multi results is undefined diff --git a/Sources/Tokeniser.swift b/Sources/Tokeniser.swift index 1af84b5..30140cf 100644 --- a/Sources/Tokeniser.swift +++ b/Sources/Tokeniser.swift @@ -202,7 +202,7 @@ final class Tokeniser } else if (numChars == 2) { return multipointHolder } else { - try Validate.fail(msg: "Unexpected characters returned for " + nameRef) + try Validate.fail(msg: "Unexpected characters returned for \(nameRef) num: \(numChars)") return multipointHolder } } diff --git a/Tests/SwiftSoupTests/ElementTest.swift b/Tests/SwiftSoupTests/ElementTest.swift index e20c979..dacaf72 100644 --- a/Tests/SwiftSoupTests/ElementTest.swift +++ b/Tests/SwiftSoupTests/ElementTest.swift @@ -914,9 +914,9 @@ class ElementTest: XCTestCase { func testHashcodeIsStableWithContentChanges()throws { let root: Element = try Element(Tag.valueOf("root"), "") - var set = Set() + let set = OrderedSet() // Add root node: - set.insert(root) + set.append(root) try root.appendChild(Element(Tag.valueOf("a"), "")) XCTAssertTrue(set.contains(root)) } diff --git a/Tests/SwiftSoupTests/SelectorTest.swift b/Tests/SwiftSoupTests/SelectorTest.swift index 882e887..89381fb 100644 --- a/Tests/SwiftSoupTests/SelectorTest.swift +++ b/Tests/SwiftSoupTests/SelectorTest.swift @@ -644,11 +644,12 @@ class SelectorTest: XCTestCase { } func testSelectSupplementaryCharacter()throws { - //let s = String(Character(UnicodeScalar(135361)!)) - let s = "\u{000210C1}" - let doc: Document = try SwiftSoup.parse("
^" + s + "$/div>") - XCTAssertEqual("div", try doc.select("div[k" + s + "]").first()?.tagName()) - XCTAssertEqual("div", try doc.select("div:containsOwn(" + s + ")").first()?.tagName()) + #if !os(Linux) + let s = String(Character(UnicodeScalar(135361)!)) + let doc: Document = try SwiftSoup.parse("
^" + s + "$/div>") + XCTAssertEqual("div", try doc.select("div[k" + s + "]").first()?.tagName()) + XCTAssertEqual("div", try doc.select("div:containsOwn(" + s + ")").first()?.tagName()) + #endif } func testSelectClassWithSpace()throws { diff --git a/Tests/SwiftSoupTests/TextNodeTest.swift b/Tests/SwiftSoupTests/TextNodeTest.swift index 0fb780f..4c84488 100644 --- a/Tests/SwiftSoupTests/TextNodeTest.swift +++ b/Tests/SwiftSoupTests/TextNodeTest.swift @@ -68,9 +68,11 @@ class TextNodeTest: XCTestCase { } func testWithSupplementaryCharacter()throws{ - let doc: Document = try SwiftSoup.parse(String(Character(UnicodeScalar(135361)!))) - let t: TextNode = doc.body()!.textNodes()[0] - XCTAssertEqual(String(Character(UnicodeScalar(135361)!)), try t.outerHtml().trim()) + #if !os(Linux) + let doc: Document = try SwiftSoup.parse(String(Character(UnicodeScalar(135361)!))) + let t: TextNode = doc.body()!.textNodes()[0] + XCTAssertEqual(String(Character(UnicodeScalar(135361)!)), try t.outerHtml().trim()) + #endif } static var allTests = {