Skip to content

Commit 9df8c0a

Browse files
committed
Merge pull request #129 from kaandedeoglu/master
Implement equality for NSNull
2 parents ea91113 + 4068da3 commit 9df8c0a

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

Foundation.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@
199199
5BF7AEBF1BCD51F9008F214A /* NSURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4A1BCC5DCB00ED97BB /* NSURL.swift */; };
200200
5BF7AEC01BCD51F9008F214A /* NSUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4B1BCC5DCB00ED97BB /* NSUUID.swift */; };
201201
5BF7AEC11BCD51F9008F214A /* NSValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC3F4C1BCC5DCB00ED97BB /* NSValue.swift */; };
202+
612952F91C1B235900BE0FD9 /* TestNSNull.swift in Sources */ = {isa = PBXBuildFile; fileRef = 612952F81C1B235900BE0FD9 /* TestNSNull.swift */; };
202203
61F8AE7D1C180FC600FB62F0 /* TestNSNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61F8AE7C1C180FC600FB62F0 /* TestNSNotificationCenter.swift */; };
203204
6E203B8D1C1303BB003B2576 /* TestNSBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E203B8C1C1303BB003B2576 /* TestNSBundle.swift */; };
204205
7A7D6FBB1C16439400957E2E /* TestNSURLResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7D6FBA1C16439400957E2E /* TestNSURLResponse.swift */; };
@@ -538,6 +539,7 @@
538539
5BDC405C1BD6D83B00ED97BB /* TestFoundation.app */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestFoundation.app; sourceTree = BUILT_PRODUCTS_DIR; };
539540
5BF7AEC21BCD568D008F214A /* ForSwiftFoundationOnly.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForSwiftFoundationOnly.h; sourceTree = "<group>"; };
540541
5EB6A15C1C188FC40037DCB8 /* TestNSJSONSerialization.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSJSONSerialization.swift; sourceTree = "<group>"; };
542+
612952F81C1B235900BE0FD9 /* TestNSNull.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSNull.swift; sourceTree = "<group>"; };
541543
61F8AE7C1C180FC600FB62F0 /* TestNSNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSNotificationCenter.swift; sourceTree = "<group>"; };
542544
6E203B8C1C1303BB003B2576 /* TestNSBundle.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSBundle.swift; sourceTree = "<group>"; };
543545
7A7D6FBA1C16439400957E2E /* TestNSURLResponse.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TestNSURLResponse.swift; sourceTree = "<group>"; };
@@ -1071,6 +1073,7 @@
10711073
83712C8D1C1684900049AD49 /* TestNSURLRequest.swift */,
10721074
7A7D6FBA1C16439400957E2E /* TestNSURLResponse.swift */,
10731075
A5A34B551C18C85D00FD972B /* TestNSByteCountFormatter.swift */,
1076+
612952F81C1B235900BE0FD9 /* TestNSNull.swift */,
10741077
);
10751078
name = Tests;
10761079
sourceTree = "<group>";
@@ -1770,6 +1773,7 @@
17701773
E876A73E1C1180E000F279EC /* TestNSRange.swift in Sources */,
17711774
C2A9D75C1C15C08B00993803 /* TestNSUUID.swift in Sources */,
17721775
A5A34B561C18C85D00FD972B /* TestNSByteCountFormatter.swift in Sources */,
1776+
612952F91C1B235900BE0FD9 /* TestNSNull.swift in Sources */,
17731777
EA66F6521BF1619600136161 /* TestNSPropertyList.swift in Sources */,
17741778
4AE109271C17CCBF007367B5 /* TestNSIndexPath.swift in Sources */,
17751779
4DC1D0801C12EEEF00B5948A /* TestNSPipe.swift in Sources */,

Foundation/NSNull.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public class NSNull : NSObject, NSCopying, NSSecureCoding {
2828
public static func supportsSecureCoding() -> Bool {
2929
return true
3030
}
31+
32+
public override func isEqual(object: AnyObject?) -> Bool {
33+
return object is NSNull
34+
}
3135
}
3236

33-
37+
public func ===(lhs: NSNull?, rhs: NSNull?) -> Bool {
38+
guard let _ = lhs, let _ = rhs else { return false }
39+
return true
40+
}

TestFoundation/TestNSNull.swift

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// This source file is part of the Swift.org open source project
2+
//
3+
// Copyright (c) 2014 - 2015 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+
11+
12+
#if DEPLOYMENT_RUNTIME_OBJC || os(Linux)
13+
import Foundation
14+
import XCTest
15+
#else
16+
import SwiftFoundation
17+
import SwiftXCTest
18+
#endif
19+
20+
21+
22+
class TestNSNull : XCTestCase {
23+
24+
var allTests: [(String, () -> Void)] {
25+
return [
26+
("test_alwaysEqual", test_alwaysEqual)
27+
]
28+
}
29+
30+
func test_alwaysEqual() {
31+
let null_1 = NSNull()
32+
let null_2 = NSNull()
33+
34+
let null_3: NSNull? = NSNull()
35+
let null_4: NSNull? = nil
36+
37+
//Check that any two NSNull's are ==
38+
XCTAssertEqual(null_1, null_2)
39+
40+
//Check that any two NSNull's are ===, preserving the singleton behavior
41+
XCTAssertTrue(null_1 === null_2)
42+
43+
//Check that NSNull() == .Some(NSNull)
44+
XCTAssertEqual(null_1, null_3)
45+
46+
//Make sure that NSNull() != .None
47+
XCTAssertNotEqual(null_1, null_4)
48+
}
49+
}

TestFoundation/main.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ XCTMain([
5050
TestNSURLComponents(),
5151
TestNSURLRequest(),
5252
TestNSURLResponse(),
53+
TestNSNull(),
5354
TestNSUUID(),
5455
TestNSXMLParser(),
5556
])

0 commit comments

Comments
 (0)