Skip to content

Commit b63cafb

Browse files
committed
Add a structural implementation of Data
1 parent 188a4e1 commit b63cafb

File tree

8 files changed

+35
-22
lines changed

8 files changed

+35
-22
lines changed

Foundation.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
215215
5B7C8B031BEA86A900C5B690 /* libCoreFoundation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B7C8A6E1BEA7F8F00C5B690 /* libCoreFoundation.a */; };
216216
5B94E8821C430DE70055C035 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B94E8811C430DE70055C035 /* String.swift */; };
217217
5BA9BEA41CF380E8009DBD6C /* URLRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9BEA31CF380E8009DBD6C /* URLRequest.swift */; };
218+
5BA9BEA61CF3D747009DBD6C /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA9BEA51CF3D747009DBD6C /* Data.swift */; };
218219
5BB5256C1BEC057200E63BE3 /* module.modulemap in Headers */ = {isa = PBXBuildFile; fileRef = 5BDC3F721BCC60EF00ED97BB /* module.modulemap */; settings = {ATTRIBUTES = (Public, ); }; };
219220
5BC2C00F1C07833200CC214E /* CFStringTransform.c in Sources */ = {isa = PBXBuildFile; fileRef = 5BC2C00D1C07832E00CC214E /* CFStringTransform.c */; };
220221
5BCCA8D91CE6697F0059B963 /* URLComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BCCA8D81CE6697F0059B963 /* URLComponents.swift */; };
@@ -579,6 +580,7 @@
579580
5B7C8A6E1BEA7F8F00C5B690 /* libCoreFoundation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libCoreFoundation.a; sourceTree = BUILT_PRODUCTS_DIR; };
580581
5B94E8811C430DE70055C035 /* String.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = "<group>"; };
581582
5BA9BEA31CF380E8009DBD6C /* URLRequest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLRequest.swift; sourceTree = "<group>"; };
583+
5BA9BEA51CF3D747009DBD6C /* Data.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Data.swift; sourceTree = "<group>"; };
582584
5BC1D8BC1BF3ADFE009D3973 /* TestNSCharacterSet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSCharacterSet.swift; sourceTree = "<group>"; };
583585
5BC2C00D1C07832E00CC214E /* CFStringTransform.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CFStringTransform.c; sourceTree = "<group>"; };
584586
5BCCA8D81CE6697F0059B963 /* URLComponents.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLComponents.swift; sourceTree = "<group>"; };
@@ -1511,6 +1513,7 @@
15111513
children = (
15121514
EADE0B6B1BD15DFF00C49C64 /* NSNull.swift */,
15131515
5BDC3F331BCC5DCB00ED97BB /* NSData.swift */,
1516+
5BA9BEA51CF3D747009DBD6C /* Data.swift */,
15141517
EADE0B741BD15DFF00C49C64 /* NSProgress.swift */,
15151518
5BDC3F381BCC5DCB00ED97BB /* NSError.swift */,
15161519
5BDC3F4B1BCC5DCB00ED97BB /* NSUUID.swift */,
@@ -1870,6 +1873,7 @@
18701873
5BDC3FCE1BCF17D300ED97BB /* NSCFDictionary.swift in Sources */,
18711874
EADE0BA81BD15E0000C49C64 /* NSNotificationQueue.swift in Sources */,
18721875
EADE0B981BD15DFF00C49C64 /* NSDecimalNumber.swift in Sources */,
1876+
5BA9BEA61CF3D747009DBD6C /* Data.swift in Sources */,
18731877
5BF7AEA71BCD51F9008F214A /* NSCoder.swift in Sources */,
18741878
D3BCEBA01C2F6DDB00295652 /* NSKeyedCoderOldStyleArray.swift in Sources */,
18751879
EADE0BA71BD15E0000C49C64 /* NSNotification.swift in Sources */,

Foundation/NSData.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,13 +578,21 @@ extension NSData {
578578
extension NSData : _CFBridgable, _SwiftBridgable {
579579
typealias SwiftType = Data
580580
internal var _swiftObject: SwiftType { return Data(_bridged: self) }
581+
582+
public func bridge() -> Data {
583+
return _swiftObject
584+
}
581585
}
582586

583587
extension Data : _NSBridgable, _CFBridgable {
584588
typealias CFType = CFData
585589
typealias NSType = NSData
586590
internal var _cfObject: CFType { return _nsObject._cfObject }
587591
internal var _nsObject: NSType { return _bridgeToObjectiveC() }
592+
593+
public func bridge() -> NSData {
594+
return _nsObject
595+
}
588596
}
589597

590598
extension CFData : _NSBridgable, _SwiftBridgable {

Foundation/NSXMLDocument.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,17 +304,17 @@ public class XMLDocument : NSXMLNode {
304304
@method XMLData
305305
@abstract Invokes XMLDataWithOptions with NSXMLNodeOptionsNone.
306306
*/
307-
/*@NSCopying*/ public var XMLData: NSData { return XMLDataWithOptions(NSXMLNodeOptionsNone) }
307+
/*@NSCopying*/ public var XMLData: Data { return XMLDataWithOptions(NSXMLNodeOptionsNone) }
308308

309309
/*!
310310
@method XMLDataWithOptions:
311311
@abstract The representation of this node as it would appear in an XML document, encoded based on characterEncoding.
312312
*/
313-
public func XMLDataWithOptions(_ options: Int) -> NSData {
313+
public func XMLDataWithOptions(_ options: Int) -> Data {
314314
let string = XMLStringWithOptions(options)
315315
// TODO: support encodings other than UTF-8
316316

317-
return string._bridgeToObject().data(using: NSUTF8StringEncoding) ?? NSData()
317+
return string._bridgeToObject().data(using: NSUTF8StringEncoding) ?? Data()
318318
}
319319

320320
/*!

TestFoundation/TestNSData.swift

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ class TestNSData: XCTestCase {
4444
}
4545

4646
func test_writeToURLOptions() {
47-
let saveData = NSData(contentsOfURL: NSBundle.mainBundle().URLForResource("Test", withExtension: "plist")!)
48-
let savePath = "/var/tmp/Test.plist"
47+
let saveData = try! Data(contentsOf: NSBundle.mainBundle().URLForResource("Test", withExtension: "plist")!)
48+
let savePath = URL(fileURLWithPath: "/var/tmp/Test.plist")
4949
do {
50-
try saveData!.write(toFile: savePath, options: NSDataWritingOptions.dataWritingAtomic)
50+
try saveData.write(to: savePath, options: .dataWritingAtomic)
5151
let fileManager = NSFileManager.defaultManager()
52-
XCTAssertTrue(fileManager.fileExists(atPath: savePath))
53-
try! fileManager.removeItem(atPath: savePath)
52+
XCTAssertTrue(fileManager.fileExists(atPath: savePath.path!))
53+
try! fileManager.removeItem(atPath: savePath.path!)
5454
} catch _ {
5555
XCTFail()
5656
}
@@ -129,7 +129,7 @@ class TestNSData: XCTestCase {
129129
XCTFail("Could not get UTF-8 data")
130130
return
131131
}
132-
guard let decodedData = NSData(base64Encoded: encodedData, options: []) else {
132+
guard let decodedData = Data(base64Encoded: encodedData, options: []) else {
133133
XCTFail("Could not Base-64 decode data")
134134
return
135135
}
@@ -139,7 +139,8 @@ class TestNSData: XCTestCase {
139139
}
140140

141141
XCTAssertEqual(decodedText, plainText)
142-
XCTAssertTrue(decodedData.isEqual(to: plainText.bridge().data(using: NSUTF8StringEncoding)!)) }
142+
XCTAssertTrue(decodedData == plainText.bridge().data(using: NSUTF8StringEncoding)!)
143+
}
143144

144145
func test_initializeWithBase64EncodedDataWithNonBase64CharacterIsNil() {
145146
let encodedText = "QVJNQSB2aXJ1bXF1ZSBjYW5vLCBUcm9pYWUgcXVpIHBya$W11cyBhYiBvcmlzCkl0YWxpYW0sIGZhdG8gcHJvZnVndXMsIExhdmluaWFxdWUgdmVuaXQ="
@@ -158,7 +159,7 @@ class TestNSData: XCTestCase {
158159
XCTFail("Could not get UTF-8 data")
159160
return
160161
}
161-
guard let decodedData = NSData(base64Encoded: encodedData, options: [.ignoreUnknownCharacters]) else {
162+
guard let decodedData = Data(base64Encoded: encodedData, options: [.ignoreUnknownCharacters]) else {
162163
XCTFail("Could not Base-64 decode data")
163164
return
164165
}
@@ -168,13 +169,13 @@ class TestNSData: XCTestCase {
168169
}
169170

170171
XCTAssertEqual(decodedText, plainText)
171-
XCTAssertTrue(decodedData.isEqual(to: plainText.bridge().data(using: NSUTF8StringEncoding)!))
172+
XCTAssertTrue(decodedData == plainText.bridge().data(using: NSUTF8StringEncoding)!)
172173
}
173174

174175
func test_initializeWithBase64EncodedStringGetsDecodedData() {
175176
let plainText = "ARMA virumque cano, Troiae qui primus ab oris\nItaliam, fato profugus, Laviniaque venit"
176177
let encodedText = "QVJNQSB2aXJ1bXF1ZSBjYW5vLCBUcm9pYWUgcXVpIHByaW11cyBhYiBvcmlzCkl0YWxpYW0sIGZhdG8gcHJvZnVndXMsIExhdmluaWFxdWUgdmVuaXQ="
177-
guard let decodedData = NSData(base64Encoded: encodedText, options: []) else {
178+
guard let decodedData = Data(base64Encoded: encodedText, options: []) else {
178179
XCTFail("Could not Base-64 decode data")
179180
return
180181
}

TestFoundation/TestNSJSONSerialization.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ extension TestNSJSONSerialization {
4545
}
4646

4747
func test_JSONObjectWithData_emptyObject() {
48-
let subject = NSData(bytes: UnsafePointer<Void>([UInt8]([0x7B, 0x7D])), length: 2)
48+
let subject = Data(bytes: UnsafePointer<Void>([UInt8]([0x7B, 0x7D])), count: 2)
4949

5050
let object = try! JSONSerialization.jsonObject(with: subject, options: []) as? [String:Any]
5151
XCTAssertEqual(object?.count, 0)
@@ -75,7 +75,7 @@ extension TestNSJSONSerialization {
7575
]
7676

7777
for (description, encoded) in subjects {
78-
let result = try? JSONSerialization.jsonObject(with: NSData(bytes:UnsafePointer<Void>(encoded), length: encoded.count), options: [])
78+
let result = try? JSONSerialization.jsonObject(with: Data(bytes:UnsafePointer<Void>(encoded), count: encoded.count), options: [])
7979
XCTAssertNotNil(result, description)
8080
}
8181
}

TestFoundation/TestNSKeyedArchiver.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class TestNSKeyedArchiver : XCTestCase {
8181
XCTAssertTrue(encode(archiver))
8282
archiver.finishEncoding()
8383

84-
let unarchiver = NSKeyedUnarchiver(forReadingWithData: data)
84+
let unarchiver = NSKeyedUnarchiver(forReadingWithData: data.bridge())
8585
XCTAssertTrue(decode(unarchiver))
8686
}
8787

TestFoundation/TestNSString.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,23 +230,23 @@ class TestNSString : XCTestCase {
230230

231231
func test_FromASCIINSData() {
232232
let bytes = mockASCIIStringBytes
233-
let data = NSData(bytes: bytes, length: bytes.count)
233+
let data = Data(bytes: bytes, count: bytes.count)
234234
let string = NSString(data: data, encoding: NSASCIIStringEncoding)
235235
XCTAssertNotNil(string)
236236
XCTAssertTrue(string?.isEqual(to: mockASCIIString) ?? false)
237237
}
238238

239239
func test_FromUTF8NSData() {
240240
let bytes = mockUTF8StringBytes
241-
let data = NSData(bytes: bytes, length: bytes.count)
241+
let data = Data(bytes: bytes, count: bytes.count)
242242
let string = NSString(data: data, encoding: NSUTF8StringEncoding)
243243
XCTAssertNotNil(string)
244244
XCTAssertTrue(string?.isEqual(to: mockUTF8String) ?? false)
245245
}
246246

247247
func test_FromMalformedUTF8NSData() {
248248
let bytes = mockMalformedUTF8StringBytes
249-
let data = NSData(bytes: bytes, length: bytes.count)
249+
let data = Data(bytes: bytes, count: bytes.count)
250250
let string = NSString(data: data, encoding: NSUTF8StringEncoding)
251251
XCTAssertNil(string)
252252
}

TestFoundation/TestNSXMLParser.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ class TestNSXMLParser : XCTestCase {
2727

2828
func test_data() {
2929
let xml = Array("<test><foo>bar</foo></test>".nulTerminatedUTF8)
30-
let data = xml.withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<UInt8>) -> NSData in
31-
return NSData(bytes:UnsafePointer<Void>(buffer.baseAddress), length: buffer.count)
30+
let data = xml.withUnsafeBufferPointer { (buffer: UnsafeBufferPointer<UInt8>) -> Data in
31+
return Data(bytes:UnsafePointer<Void>(buffer.baseAddress!), count: buffer.count)
3232
}
3333
let parser = NSXMLParser(data: data)
3434
let res = parser.parse()
3535
XCTAssertTrue(res)
3636
}
37-
}
37+
}

0 commit comments

Comments
 (0)