Skip to content

Commit d62a826

Browse files
committed
Give SwiftValue a tailored description property similar to Darwin's
In particular, printing a SwiftValue on Darwin will print the contained value. This brings that same behavior to non-Apple platforms.
1 parent 9b11867 commit d62a826

File tree

7 files changed

+71
-0
lines changed

7 files changed

+71
-0
lines changed

DarwinCompatibilityTests.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
659FB6E02405E65D00F5F63F /* TestBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 659FB6DF2405E65D00F5F63F /* TestBridging.swift */; };
1011
B917D32420B0DB9700728EE0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B917D32320B0DB9700728EE0 /* Foundation.framework */; };
1112
B94B07402401847C00B244E8 /* FTPServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B073C2401847C00B244E8 /* FTPServer.swift */; };
1213
B94B07412401847C00B244E8 /* HTTPServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B94B073D2401847C00B244E8 /* HTTPServer.swift */; };
@@ -171,6 +172,7 @@
171172
/* End PBXCopyFilesBuildPhase section */
172173

173174
/* Begin PBXFileReference section */
175+
659FB6DF2405E65D00F5F63F /* TestBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TestBridging.swift; path = Tests/Foundation/Tests/TestBridging.swift; sourceTree = "<group>"; };
174176
B917D31C20B0DB8B00728EE0 /* xdgTestHelper */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = xdgTestHelper; sourceTree = BUILT_PRODUCTS_DIR; };
175177
B917D32320B0DB9700728EE0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
176178
B94B073C2401847C00B244E8 /* FTPServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = FTPServer.swift; path = Tests/Foundation/FTPServer.swift; sourceTree = "<group>"; };
@@ -339,6 +341,7 @@
339341
children = (
340342
B94B08342401854E00B244E8 /* main.swift */,
341343
B94B07822401849700B244E8 /* TestAffineTransform.swift */,
344+
659FB6DF2405E65D00F5F63F /* TestBridging.swift */,
342345
B94B07472401849300B244E8 /* TestBundle.swift */,
343346
B94B078D2401849800B244E8 /* TestByteCountFormatter.swift */,
344347
B94B078F2401849800B244E8 /* TestCachedURLResponse.swift */,
@@ -666,6 +669,7 @@
666669
B94B07CF2401849B00B244E8 /* TestURLProtocol.swift in Sources */,
667670
B94B07D02401849B00B244E8 /* TestScanner.swift in Sources */,
668671
B94B07D12401849B00B244E8 /* TestXMLParser.swift in Sources */,
672+
659FB6E02405E65D00F5F63F /* TestBridging.swift in Sources */,
669673
B94B07D22401849B00B244E8 /* TestNSUUID.swift in Sources */,
670674
B94B07D32401849B00B244E8 /* TestThread.swift in Sources */,
671675
B94B07D42401849B00B244E8 /* TestNSLocale.swift in Sources */,

Foundation.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@
378378
61E011821C1B599A000037DD /* CFMachPort.c in Sources */ = {isa = PBXBuildFile; fileRef = 5B5D88D01BBC9AAC00234F36 /* CFMachPort.c */; };
379379
63DCE9D21EAA430100E9CB02 /* ISO8601DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DCE9D11EAA430100E9CB02 /* ISO8601DateFormatter.swift */; };
380380
63DCE9D41EAA432400E9CB02 /* TestISO8601DateFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63DCE9D31EAA432400E9CB02 /* TestISO8601DateFormatter.swift */; };
381+
659FB6DE2405E5E300F5F63F /* TestBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 659FB6DD2405E5E200F5F63F /* TestBridging.swift */; };
381382
684C79011F62B611005BD73E /* TestNSNumberBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684C79001F62B611005BD73E /* TestNSNumberBridging.swift */; };
382383
6EB768281D18C12C00D4B719 /* UUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB768271D18C12C00D4B719 /* UUID.swift */; };
383384
7900433B1CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 790043391CACD33E00ECCBF1 /* TestNSCompoundPredicate.swift */; };
@@ -1074,6 +1075,7 @@
10741075
61F8AE7C1C180FC600FB62F0 /* TestNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNotificationCenter.swift; sourceTree = "<group>"; };
10751076
63DCE9D11EAA430100E9CB02 /* ISO8601DateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ISO8601DateFormatter.swift; sourceTree = "<group>"; };
10761077
63DCE9D31EAA432400E9CB02 /* TestISO8601DateFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestISO8601DateFormatter.swift; sourceTree = "<group>"; };
1078+
659FB6DD2405E5E200F5F63F /* TestBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestBridging.swift; sourceTree = "<group>"; };
10771079
684C79001F62B611005BD73E /* TestNSNumberBridging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSNumberBridging.swift; sourceTree = "<group>"; };
10781080
6E203B8C1C1303BB003B2576 /* TestBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestBundle.swift; sourceTree = "<group>"; };
10791081
6EB768271D18C12C00D4B719 /* UUID.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UUID.swift; sourceTree = "<group>"; };
@@ -1789,6 +1791,7 @@
17891791
isa = PBXGroup;
17901792
children = (
17911793
C93559281C12C49F009FD6A9 /* TestAffineTransform.swift */,
1794+
659FB6DD2405E5E200F5F63F /* TestBridging.swift */,
17921795
6E203B8C1C1303BB003B2576 /* TestBundle.swift */,
17931796
A5A34B551C18C85D00FD972B /* TestByteCountFormatter.swift */,
17941797
1539391322A07007006DFF4F /* TestCachedURLResponse.swift */,
@@ -3109,6 +3112,7 @@
31093112
B9D9734323D19FD100AB249C /* TestURLComponents.swift in Sources */,
31103113
5B13B3391C582D4C00651CE2 /* TestNSNull.swift in Sources */,
31113114
BD8042161E09857800487EB8 /* TestLengthFormatter.swift in Sources */,
3115+
659FB6DE2405E5E300F5F63F /* TestBridging.swift in Sources */,
31123116
5B13B3421C582D4C00651CE2 /* TestRunLoop.swift in Sources */,
31133117
155D3BBC22401D1100B0D38E /* FixtureValues.swift in Sources */,
31143118
5B13B34E1C582D4C00651CE2 /* TestXMLDocument.swift in Sources */,

Sources/Foundation/Bridging.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,6 @@ internal final class __SwiftValue : NSObject, NSCopying {
232232
}
233233

234234
public static let null: AnyObject = NSNull()
235+
236+
override var description: String { String(describing: value) }
235237
}

Tests/Foundation/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ add_executable(TestFoundation
1010
# Test Cases
1111
target_sources(TestFoundation PRIVATE
1212
Tests/TestAffineTransform.swift
13+
Tests/TestBridging.swift
1314
Tests/TestBundle.swift
1415
Tests/TestByteCountFormatter.swift
1516
Tests/TestCachedURLResponse.swift
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// This source file is part of the Swift.org open source project
2+
//
3+
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
4+
// Licensed under Apache License v2.0 with Runtime Library Exception
5+
//
6+
// See http://swift.org/LICENSE.txt for license information
7+
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
8+
//
9+
10+
#if NS_FOUNDATION_ALLOWS_TESTABLE_IMPORT
11+
#if canImport(SwiftFoundation) && !DEPLOYMENT_RUNTIME_OBJC
12+
@testable import SwiftFoundation
13+
#else
14+
@testable import Foundation
15+
#endif
16+
#endif
17+
18+
struct StructWithDescriptionAndDebugDescription:
19+
CustomStringConvertible, CustomDebugStringConvertible
20+
{
21+
var description: String { "description" }
22+
var debugDescription: String { "debugDescription" }
23+
}
24+
25+
class TestBridging : XCTestCase {
26+
static var allTests: [(String, (TestBridging) -> () throws -> Void)] {
27+
return [
28+
("testBridgedDescription", testBridgedDescription),
29+
]
30+
}
31+
32+
func testBridgedDescription() {
33+
// Struct with working (debug)description properties:
34+
let a = StructWithDescriptionAndDebugDescription()
35+
XCTAssertEqual("description", a.description)
36+
XCTAssertEqual("debugDescription", a.debugDescription)
37+
38+
// Wrap it up in a SwiftValue container
39+
let b = (a as AnyObject) as? NSObject
40+
XCTAssertNotNil(b)
41+
let c = b!
42+
43+
// Check that the wrapper forwards (debug)description
44+
// to the wrapped description property.
45+
XCTAssertEqual("description", c.description)
46+
XCTAssertEqual("description", c.debugDescription)
47+
}
48+
}

Tests/Foundation/Tests/TestNSNumberBridging.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class TestNSNumberBridging : XCTestCase {
104104
func testNSNumberBridgeFromUInt8() {
105105
for interestingValue in UInt8._interestingValues {
106106
func testNumber(_ number: NSNumber) {
107+
XCTAssertEqual(interestingValue.description, number.description)
107108
let int8 = Int8(exactly: number)
108109
XCTAssertEqual(Int8(exactly: interestingValue), int8)
109110
let uint8 = UInt8(exactly: number)
@@ -139,6 +140,7 @@ class TestNSNumberBridging : XCTestCase {
139140
func testNSNumberBridgeFromInt16() {
140141
for interestingValue in Int16._interestingValues {
141142
func testNumber(_ number: NSNumber) {
143+
XCTAssertEqual(interestingValue.description, number.description)
142144
let int8 = Int8(exactly: number)
143145
XCTAssertEqual(Int8(exactly: interestingValue), int8)
144146
let uint8 = UInt8(exactly: number)
@@ -174,6 +176,7 @@ class TestNSNumberBridging : XCTestCase {
174176
func testNSNumberBridgeFromUInt16() {
175177
for interestingValue in UInt8._interestingValues {
176178
func testNumber(_ number: NSNumber) {
179+
XCTAssertEqual(interestingValue.description, number.description)
177180
let int8 = Int8(exactly: number)
178181
XCTAssertEqual(Int8(exactly: interestingValue), int8)
179182
let uint8 = UInt8(exactly: number)
@@ -209,6 +212,7 @@ class TestNSNumberBridging : XCTestCase {
209212
func testNSNumberBridgeFromInt32() {
210213
for interestingValue in Int32._interestingValues {
211214
func testNumber(_ number: NSNumber) {
215+
XCTAssertEqual(interestingValue.description, number.description)
212216
let int8 = Int8(exactly: number)
213217
XCTAssertEqual(Int8(exactly: interestingValue), int8)
214218
let uint8 = UInt8(exactly: number)
@@ -248,6 +252,7 @@ class TestNSNumberBridging : XCTestCase {
248252
func testNSNumberBridgeFromUInt32() {
249253
for interestingValue in UInt32._interestingValues {
250254
func testNumber(_ number: NSNumber) {
255+
XCTAssertEqual(interestingValue.description, number.description)
251256
let int8 = Int8(exactly: number)
252257
XCTAssertEqual(Int8(exactly: interestingValue), int8)
253258
let uint8 = UInt8(exactly: number)
@@ -287,6 +292,7 @@ class TestNSNumberBridging : XCTestCase {
287292
func testNSNumberBridgeFromInt64() {
288293
for interestingValue in Int64._interestingValues {
289294
func testNumber(_ number: NSNumber) {
295+
XCTAssertEqual(interestingValue.description, number.description)
290296
let int8 = Int8(exactly: number)
291297
XCTAssertEqual(Int8(exactly: interestingValue), int8)
292298
let uint8 = UInt8(exactly: number)
@@ -326,6 +332,7 @@ class TestNSNumberBridging : XCTestCase {
326332
func testNSNumberBridgeFromUInt64() {
327333
for interestingValue in UInt64._interestingValues {
328334
func testNumber(_ number: NSNumber) {
335+
XCTAssertEqual(interestingValue.description, number.description)
329336
let int8 = Int8(exactly: number)
330337
XCTAssertEqual(Int8(exactly: interestingValue), int8)
331338
let uint8 = UInt8(exactly: number)
@@ -365,6 +372,7 @@ class TestNSNumberBridging : XCTestCase {
365372
func testNSNumberBridgeFromInt() {
366373
for interestingValue in Int._interestingValues {
367374
func testNumber(_ number: NSNumber) {
375+
XCTAssertEqual(interestingValue.description, number.description)
368376
let int8 = Int8(exactly: number)
369377
XCTAssertEqual(Int8(exactly: interestingValue), int8)
370378
let uint8 = UInt8(exactly: number)
@@ -404,6 +412,7 @@ class TestNSNumberBridging : XCTestCase {
404412
func testNSNumberBridgeFromUInt() {
405413
for interestingValue in UInt._interestingValues {
406414
func testNumber(_ number: NSNumber) {
415+
XCTAssertEqual(interestingValue.description, number.description)
407416
let int8 = Int8(exactly: number)
408417
XCTAssertEqual(Int8(exactly: interestingValue), int8)
409418
let uint8 = UInt8(exactly: number)
@@ -443,6 +452,7 @@ class TestNSNumberBridging : XCTestCase {
443452
func testNSNumberBridgeFromFloat() {
444453
for interestingValue in Float._interestingValues {
445454
func testNumber(_ number: NSNumber) {
455+
XCTAssertEqual(interestingValue.description, number.description)
446456
let int8 = Int8(exactly: number)
447457
XCTAssertEqual(Int8(exactly: interestingValue), int8)
448458
let uint8 = UInt8(exactly: number)
@@ -482,6 +492,7 @@ class TestNSNumberBridging : XCTestCase {
482492
func testNSNumberBridgeFromDouble() {
483493
for interestingValue in Double._interestingValues {
484494
func testNumber(_ number: NSNumber) {
495+
XCTAssertEqual(interestingValue.description, number.description)
485496
let int8 = Int8(exactly: number)
486497
XCTAssertEqual(Int8(exactly: interestingValue), int8)
487498
let uint8 = UInt8(exactly: number)

Tests/Foundation/main.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ _ = signal(SIGPIPE, SIG_IGN)
2424
var allTestCases = [
2525
testCase(TestAffineTransform.allTests),
2626
testCase(TestNSArray.allTests),
27+
testCase(TestBridging.allTests),
2728
testCase(TestBundle.allTests),
2829
testCase(TestByteCountFormatter.allTests),
2930
testCase(TestNSCache.allTests),

0 commit comments

Comments
 (0)