96 lines
3.8 KiB
Swift
96 lines
3.8 KiB
Swift
//
|
|
// Copyright 2021 New Vector Ltd
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
import XCTest
|
|
|
|
class NSArray_Element: XCTestCase {
|
|
|
|
var array: NSArray = NSArray() // will contain strings
|
|
|
|
override func setUpWithError() throws {
|
|
// Put setup code here. This method is called before the invocation of each test method in the class.
|
|
array = NSArray(array: ["str 1", "string 2", "test string 3"])
|
|
}
|
|
|
|
override func tearDownWithError() throws {
|
|
// Put teardown code here. This method is called after the invocation of each test method in the class.
|
|
}
|
|
|
|
func testMap() throws {
|
|
// This is an example of a functional test case.
|
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
let mapped = array.vc_map { obj in
|
|
guard let string = obj as? String else {
|
|
XCTFail("Failed to setup test conditions")
|
|
return -1
|
|
}
|
|
return string.count
|
|
}
|
|
|
|
XCTAssertEqual(array.count, mapped.count, "Every element in the array must be mapped")
|
|
XCTAssertTrue(mapped.allSatisfy({ $0 is Int }), "Every element must be an Int")
|
|
XCTAssertTrue(mapped.allSatisfy({ ($0 as? Int ?? 0) > 0 }), "Every element must be an Int, greater than zero")
|
|
}
|
|
|
|
func testCompactMap() throws {
|
|
// This is an example of a functional test case.
|
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
let nilMapped: [Any] = array.vc_compactMap { obj in
|
|
return nil
|
|
}
|
|
XCTAssertTrue(nilMapped.isEmpty, "Mapped array must be empty")
|
|
|
|
let onlyOneNilMapped: [Any] = array.vc_compactMap { obj in
|
|
guard let string = obj as? String else {
|
|
XCTFail("Failed to setup test conditions")
|
|
return -1
|
|
}
|
|
if string.hasSuffix("2") {
|
|
return nil
|
|
}
|
|
return string.count
|
|
}
|
|
|
|
XCTAssertEqual(array.count - 1, onlyOneNilMapped.count, "Every element in the array must be mapped, except 'string 2'")
|
|
XCTAssertTrue(onlyOneNilMapped.allSatisfy({ $0 is Int }), "Every element must be an Int")
|
|
XCTAssertTrue(onlyOneNilMapped.allSatisfy({ ($0 as? Int ?? 0) > 0 }), "Every element must be an Int, greater than zero")
|
|
}
|
|
|
|
func testFlatMap() throws {
|
|
// This is an example of a functional test case.
|
|
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
let emptyMapped: [Any] = array.vc_flatMap { obj in
|
|
return []
|
|
}
|
|
XCTAssertTrue(emptyMapped.isEmpty, "Mapped array must be empty")
|
|
|
|
let twiceMapped: [Any] = array.vc_flatMap { obj in
|
|
guard let string = obj as? String else {
|
|
XCTFail("Failed to setup test conditions")
|
|
return []
|
|
}
|
|
return [string.count, string.count * 2]
|
|
}
|
|
XCTAssertEqual(array.count * 2, twiceMapped.count, "Mapped array must have twice time elements than the 'array'")
|
|
|
|
let constantMapped: [Any] = array.vc_flatMap { obj in
|
|
return [1, 2]
|
|
}
|
|
XCTAssertEqual(array.count * 2, constantMapped.count, "Constantly mapped array must still have twice time elements than the 'array'")
|
|
}
|
|
|
|
}
|