diff --git a/CoreFoundation/Parsing.subproj/CFXMLInterface.c b/CoreFoundation/Parsing.subproj/CFXMLInterface.c
index 0bac2aef72..f48c1e4c76 100644
--- a/CoreFoundation/Parsing.subproj/CFXMLInterface.c
+++ b/CoreFoundation/Parsing.subproj/CFXMLInterface.c
@@ -909,7 +909,7 @@ _CFXMLNodePtr _CFXMLNodeHasProp(_CFXMLNodePtr node, const char* propertyName) {
return xmlHasProp(node, (const xmlChar*)propertyName);
}
-_CFXMLDocPtr _CFXMLDocPtrFromDataWithOptions(CFDataRef data, int options) {
+_CFXMLDocPtr _CFXMLDocPtrFromDataWithOptions(CFDataRef data, unsigned int options) {
uint32_t xmlOptions = 0;
if ((options & _kCFXMLNodePreserveWhitespace) == 0) {
diff --git a/CoreFoundation/Parsing.subproj/CFXMLInterface.h b/CoreFoundation/Parsing.subproj/CFXMLInterface.h
index d4fe3d2ebb..07c608f59f 100644
--- a/CoreFoundation/Parsing.subproj/CFXMLInterface.h
+++ b/CoreFoundation/Parsing.subproj/CFXMLInterface.h
@@ -199,7 +199,7 @@ CFStringRef _Nullable _CFXMLCopyPathForNode(_CFXMLNodePtr node);
_CFXMLNodePtr _Nullable _CFXMLNodeHasProp(_CFXMLNodePtr node, const char* propertyName);
-_CFXMLDocPtr _CFXMLDocPtrFromDataWithOptions(CFDataRef data, int options);
+_CFXMLDocPtr _CFXMLDocPtrFromDataWithOptions(CFDataRef data, unsigned int options);
CFStringRef _Nullable _CFXMLNodeCopyLocalName(_CFXMLNodePtr node);
CFStringRef _Nullable _CFXMLNodeCopyPrefix(_CFXMLNodePtr node);
diff --git a/Foundation/XMLDocument.swift b/Foundation/XMLDocument.swift
index 760d151c91..e156fa5261 100644
--- a/Foundation/XMLDocument.swift
+++ b/Foundation/XMLDocument.swift
@@ -92,7 +92,7 @@ open class XMLDocument : XMLNode {
@abstract Returns a document created from data. Parse errors are returned in error.
*/
public init(data: Data, options mask: XMLNode.Options = []) throws {
- let docPtr = _CFXMLDocPtrFromDataWithOptions(data._cfObject, Int32(mask.rawValue))
+ let docPtr = _CFXMLDocPtrFromDataWithOptions(data._cfObject, UInt32(mask.rawValue))
super.init(ptr: _CFXMLNodePtr(docPtr))
if mask.contains(.documentValidate) {
diff --git a/TestFoundation/TestXMLDocument.swift b/TestFoundation/TestXMLDocument.swift
index 56ed296343..f063714feb 100644
--- a/TestFoundation/TestXMLDocument.swift
+++ b/TestFoundation/TestXMLDocument.swift
@@ -33,6 +33,7 @@ class TestXMLDocument : LoopbackServerTest {
("test_createElement", test_createElement),
("test_addNamespace", test_addNamespace),
("test_removeNamespace", test_removeNamespace),
+ ("test_optionPreserveAll", test_optionPreserveAll),
]
}
@@ -510,6 +511,22 @@ class TestXMLDocument : LoopbackServerTest {
XCTAssert(doc.rootElement()?.elements(forLocalName: "prop", uri: "DAV:").first?.name == "D:prop", "failed to get elements, got \(doc.rootElement()?.elements(forLocalName: "prop", uri: "DAV:").first as Any)")
}
+
+ func test_optionPreserveAll() {
+ let xmlString = """
+
+
+
+"""
+
+ let data = xmlString.data(using: .utf8)!
+ guard let document = try? XMLDocument(data: data, options: .nodePreserveAll) else {
+ XCTFail("XMLDocument with options .nodePreserveAll")
+ return
+ }
+ let expected = xmlString.lowercased() + "\n"
+ XCTAssertEqual(expected, String(describing: document))
+ }
}
fileprivate extension XMLNode {