| // 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 |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // RUN: %target-run-simple-swift |
| // REQUIRES: executable_test |
| // REQUIRES: objc_interop |
| |
| import Foundation |
| |
| #if FOUNDATION_XCTEST |
| import XCTest |
| class TestIndexPathSuper : XCTestCase { } |
| #else |
| import StdlibUnittest |
| class TestIndexPathSuper { } |
| #endif |
| |
| class TestIndexPath : TestIndexPathSuper { |
| |
| func testBasics() { |
| let ip = IndexPath(index: 1) |
| expectEqual(ip.count, 1) |
| } |
| |
| func testAppending() { |
| var ip : IndexPath = [1, 2, 3, 4] |
| let ip2 = IndexPath(indexes: [5, 6, 7]) |
| |
| ip.append(ip2) |
| |
| expectEqual(ip.count, 7) |
| expectEqual(ip[0], 1) |
| expectEqual(ip[6], 7) |
| } |
| |
| func testRanges() { |
| let ip1 = IndexPath(indexes: [1, 2, 3]) |
| let ip2 = IndexPath(indexes: [6, 7, 8]) |
| |
| // Replace the whole range |
| var mutateMe = ip1 |
| mutateMe[0..<3] = ip2 |
| expectEqual(mutateMe, ip2) |
| |
| // Insert at the beginning |
| mutateMe = ip1 |
| mutateMe[0..<0] = ip2 |
| expectEqual(mutateMe, IndexPath(indexes: [6, 7, 8, 1, 2, 3])) |
| |
| // Insert at the end |
| mutateMe = ip1 |
| mutateMe[3..<3] = ip2 |
| expectEqual(mutateMe, IndexPath(indexes: [1, 2, 3, 6, 7, 8])) |
| |
| // Insert in middle |
| mutateMe = ip1 |
| mutateMe[2..<2] = ip2 |
| expectEqual(mutateMe, IndexPath(indexes: [1, 2, 6, 7, 8, 3])) |
| } |
| |
| func testMoreRanges() { |
| var ip = IndexPath(indexes: [1, 2, 3]) |
| let ip2 = IndexPath(indexes: [5, 6, 7, 8, 9, 10]) |
| |
| ip[1..<2] = ip2 |
| expectEqual(ip, IndexPath(indexes: [1, 5, 6, 7, 8, 9, 10, 3])) |
| } |
| |
| func testIteration() { |
| let ip = IndexPath(indexes: [1, 2, 3]) |
| |
| var count = 0 |
| for _ in ip { |
| count += 1 |
| } |
| |
| expectEqual(3, count) |
| } |
| |
| func test_AnyHashableContainingIndexPath() { |
| let values: [IndexPath] = [ |
| IndexPath(indexes: [1, 2]), |
| IndexPath(indexes: [1, 2, 3]), |
| IndexPath(indexes: [1, 2, 3]), |
| ] |
| let anyHashables = values.map(AnyHashable.init) |
| expectEqual(IndexPath.self, type(of: anyHashables[0].base)) |
| expectEqual(IndexPath.self, type(of: anyHashables[1].base)) |
| expectEqual(IndexPath.self, type(of: anyHashables[2].base)) |
| expectNotEqual(anyHashables[0], anyHashables[1]) |
| expectEqual(anyHashables[1], anyHashables[2]) |
| } |
| |
| func test_AnyHashableCreatedFromNSIndexPath() { |
| let values: [NSIndexPath] = [ |
| NSIndexPath(index: 1), |
| NSIndexPath(index: 2), |
| NSIndexPath(index: 2), |
| ] |
| let anyHashables = values.map(AnyHashable.init) |
| expectEqual(IndexPath.self, type(of: anyHashables[0].base)) |
| expectEqual(IndexPath.self, type(of: anyHashables[1].base)) |
| expectEqual(IndexPath.self, type(of: anyHashables[2].base)) |
| expectNotEqual(anyHashables[0], anyHashables[1]) |
| expectEqual(anyHashables[1], anyHashables[2]) |
| } |
| |
| // TODO: Test bridging |
| |
| } |
| |
| #if !FOUNDATION_XCTEST |
| var IndexPathTests = TestSuite("TestIndexPath") |
| IndexPathTests.test("testBasics") { TestIndexPath().testBasics() } |
| IndexPathTests.test("testAppending") { TestIndexPath().testAppending() } |
| IndexPathTests.test("testRanges") { TestIndexPath().testRanges() } |
| IndexPathTests.test("testMoreRanges") { TestIndexPath().testMoreRanges() } |
| IndexPathTests.test("testIteration") { TestIndexPath().testIteration() } |
| IndexPathTests.test("test_AnyHashableContainingIndexPath") { TestIndexPath().test_AnyHashableContainingIndexPath() } |
| IndexPathTests.test("test_AnyHashableCreatedFromNSIndexPath") { TestIndexPath().test_AnyHashableCreatedFromNSIndexPath() } |
| runAllTests() |
| #endif |
| |