| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| |
| #if DEPLOYMENT_RUNTIME_OBJC || os(Linux) |
| import Foundation |
| import XCTest |
| #else |
| import SwiftFoundation |
| import SwiftXCTest |
| #endif |
| |
| class TestNSPredicate: XCTestCase { |
| |
| static var allTests : [(String, (TestNSPredicate) -> () throws -> Void)] { |
| return [ |
| ("test_BooleanPredicate", test_BooleanPredicate), |
| ("test_BlockPredicateWithoutVariableBindings", test_BlockPredicateWithoutVariableBindings), |
| ("test_filterNSArray", test_filterNSArray), |
| ("test_filterNSMutableArray", test_filterNSMutableArray), |
| ("test_filterNSSet", test_filterNSSet), |
| ("test_filterNSMutableSet", test_filterNSMutableSet), |
| ("test_filterNSOrderedSet", test_filterNSOrderedSet), |
| ("test_filterNSMutableOrderedSet", test_filterNSMutableOrderedSet), |
| ] |
| } |
| |
| func test_BooleanPredicate() { |
| let truePredicate = NSPredicate(value: true) |
| let falsePredicate = NSPredicate(value: false) |
| |
| XCTAssertTrue(truePredicate.evaluateWithObject(NSObject())) |
| XCTAssertFalse(falsePredicate.evaluateWithObject(NSObject())) |
| } |
| |
| |
| func test_BlockPredicateWithoutVariableBindings() { |
| let isNSStringPredicate = NSPredicate { (object, bindings) -> Bool in |
| return object is NSString |
| } |
| |
| XCTAssertTrue(isNSStringPredicate.evaluateWithObject(NSString())) |
| XCTAssertFalse(isNSStringPredicate.evaluateWithObject(NSArray())) |
| } |
| |
| let lengthLessThanThreePredicate = NSPredicate { (obj, bindings) -> Bool in |
| return (obj as? NSString).map({ $0.length < 3 }) == true |
| } |
| |
| let startArray = ["1".bridge(), "12".bridge(), "123".bridge(), "1234".bridge()] |
| let expectedArray = ["1".bridge(), "12".bridge()] |
| |
| func test_filterNSArray() { |
| let filteredArray = startArray.bridge().filteredArrayUsingPredicate(lengthLessThanThreePredicate).bridge() |
| |
| XCTAssertEqual(expectedArray.bridge(), filteredArray) |
| } |
| |
| func test_filterNSMutableArray() { |
| let array = startArray.bridge().mutableCopy() as! NSMutableArray |
| |
| array.filterUsingPredicate(lengthLessThanThreePredicate) |
| |
| XCTAssertEqual(expectedArray.bridge(), array) |
| } |
| |
| func test_filterNSSet() { |
| let set = Set(startArray).bridge() |
| let filteredSet = set.filteredSetUsingPredicate(lengthLessThanThreePredicate).bridge() |
| |
| XCTAssertEqual(Set(expectedArray).bridge(), filteredSet) |
| } |
| |
| func test_filterNSMutableSet() { |
| let set = NSMutableSet(objects: ["1".bridge(), "12".bridge(), "123".bridge(), "1234".bridge()], count: 4) |
| set.filterUsingPredicate(lengthLessThanThreePredicate) |
| |
| XCTAssertEqual(Set(expectedArray).bridge(), set) |
| } |
| |
| func test_filterNSOrderedSet() { |
| // TODO |
| // This test is temporarily disabled due to a compile crash when calling the initializer of NSOrderedSet with an array |
| /* |
| let orderedSet = NSOrderedSet(array: startArray) |
| let filteredOrderedSet = orderedSet.filteredOrderedSetUsingPredicate(lengthLessThanThreePredicate) |
| |
| XCTAssertEqual(NSOrderedSet(array: expectedArray), filteredOrderedSet) |
| */ |
| } |
| |
| func test_filterNSMutableOrderedSet() { |
| // TODO |
| // This test is temporarily disabled due to a compile crash when calling the initializer of NSOrderedSet with an array |
| /* |
| let orderedSet = NSMutableOrderedSet() |
| orderedSet.addObjectsFromArray(startArray) |
| |
| orderedSet.filterUsingPredicate(lengthLessThanThreePredicate) |
| |
| let expectedOrderedSet = NSMutableOrderedSet() |
| expectedOrderedSet.addObjectsFromArray(expectedArray) |
| XCTAssertEqual(expectedOrderedSet, orderedSet) |
| */ |
| } |
| } |