diff --git a/DiffableDataSources.xcodeproj/xcshareddata/xcschemes/DiffableDataSources.xcscheme b/DiffableDataSources.xcodeproj/xcshareddata/xcschemes/DiffableDataSources.xcscheme index afbe573..ed7149a 100644 --- a/DiffableDataSources.xcodeproj/xcshareddata/xcschemes/DiffableDataSources.xcscheme +++ b/DiffableDataSources.xcodeproj/xcshareddata/xcschemes/DiffableDataSources.xcscheme @@ -27,6 +27,15 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + @@ -39,17 +48,6 @@ - - - - - - - - { internal var structure = SnapshotStructure() + private let forceFallback: Bool + private var _nativeSnapshot: Any? + @available(iOS 13.0, *) + internal var nativeSnapshot: NSDiffableDataSourceSnapshot { + get { + return _nativeSnapshot as! NSDiffableDataSourceSnapshot + } + set { + _nativeSnapshot = newValue + } + } + /// Creates a new empty snapshot object. - public init() {} + public init() { + self.init(forceFallback: false) + } + + internal init(forceFallback: Bool) { + self.forceFallback = forceFallback + if #available(iOS 13.0, *), !forceFallback { + nativeSnapshot = .init() + return + } + } + + @available(iOS 13.0, *) + static func from(nativeSnapshot: NSDiffableDataSourceSnapshot) -> Self { + var snapshot = DiffableDataSourceSnapshot() + snapshot.nativeSnapshot = nativeSnapshot + return snapshot + } /// The number of item identifiers in the snapshot. public var numberOfItems: Int { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.numberOfItems + } return itemIdentifiers.count } /// The number of section identifiers in the snapshot. public var numberOfSections: Int { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.numberOfSections + } return sectionIdentifiers.count } /// All section identifiers in the snapshot. public var sectionIdentifiers: [SectionIdentifierType] { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.sectionIdentifiers + } return structure.allSectionIDs } /// All item identifiers in the snapshot. public var itemIdentifiers: [ItemIdentifierType] { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.itemIdentifiers + } return structure.allItemIDs } @@ -33,6 +76,9 @@ public struct DiffableDataSourceSnapshot Int { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.numberOfItems(inSection: identifier) + } return itemIdentifiers(inSection: identifier).count } @@ -43,6 +89,9 @@ public struct DiffableDataSourceSnapshot [ItemIdentifierType] { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.itemIdentifiers(inSection: identifier) + } return structure.items(in: identifier) } @@ -53,6 +102,9 @@ public struct DiffableDataSourceSnapshot SectionIdentifierType? { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.sectionIdentifier(containingItem: identifier) + } return structure.section(containing: identifier) } @@ -63,6 +115,9 @@ public struct DiffableDataSourceSnapshot Int? { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.indexOfItem(identifier) + } return itemIdentifiers.firstIndex { $0.isEqualHash(to: identifier) } } @@ -73,6 +128,9 @@ public struct DiffableDataSourceSnapshot Int? { + if #available(iOS 13.0, *), !forceFallback { + return nativeSnapshot.indexOfSection(identifier) + } return sectionIdentifiers.firstIndex { $0.isEqualHash(to: identifier) } } @@ -82,6 +140,9 @@ public struct DiffableDataSourceSnapshot DiffableDataSourceSnapshot { - var snapshot = DiffableDataSourceSnapshot() + func snapshot(forceFallback: Bool) -> DiffableDataSourceSnapshot { + var snapshot = DiffableDataSourceSnapshot(forceFallback: forceFallback) snapshot.structure.sections = currentSnapshot.structure.sections return snapshot } diff --git a/Sources/UIKit/CollectionViewDiffableDataSource.swift b/Sources/UIKit/CollectionViewDiffableDataSource.swift index 8c13d99..43c47eb 100644 --- a/Sources/UIKit/CollectionViewDiffableDataSource.swift +++ b/Sources/UIKit/CollectionViewDiffableDataSource.swift @@ -19,17 +19,45 @@ open class CollectionViewDiffableDataSource() + private let forceFallback: Bool + private var _nativeDataSource: Any? + @available(iOS 13.0, *) + private var nativeDataSource: UICollectionViewDiffableDataSource { + get { + guard let nativeDataSource = _nativeDataSource as? UICollectionViewDiffableDataSource else { + fatalError() + } + return nativeDataSource + } + set { + _nativeDataSource = newValue + } + } + + @available(iOS 13.0, *) + private func createNativeDataSource(for collectionView: UICollectionView, cellProvider: @escaping CellProvider) { + _nativeDataSource = UICollectionViewDiffableDataSource(collectionView: collectionView, cellProvider: cellProvider) + } /// Creates a new data source. /// /// - Parameters: /// - collectionView: A collection view instance to be managed. /// - cellProvider: A closure to dequeue the cell for items. - public init(collectionView: UICollectionView, cellProvider: @escaping CellProvider) { + public convenience init(collectionView: UICollectionView, cellProvider: @escaping CellProvider) { + self.init(collectionView: collectionView, forceFallback: false, cellProvider: cellProvider) + } + + internal init(collectionView: UICollectionView, forceFallback: Bool, cellProvider: @escaping CellProvider) { self.collectionView = collectionView self.cellProvider = cellProvider + self.forceFallback = forceFallback super.init() + if #available(iOS 13, *), !forceFallback { + createNativeDataSource(for: collectionView, cellProvider: cellProvider) + return + } collectionView.dataSource = self } @@ -42,13 +70,17 @@ open class CollectionViewDiffableDataSource, animatingDifferences: Bool = true, completion: (() -> Void)? = nil) { + if #available(iOS 13, *), !forceFallback { + nativeDataSource.apply(snapshot.nativeSnapshot, animatingDifferences: animatingDifferences, completion: completion) + return + } core.apply( snapshot, view: collectionView, animatingDifferences: animatingDifferences, performUpdates: { collectionView, changeset, setSections in collectionView.reload(using: changeset, setData: setSections) - }, + }, completion: completion ) } @@ -57,7 +89,10 @@ open class CollectionViewDiffableDataSource DiffableDataSourceSnapshot { - return core.snapshot() + if #available(iOS 13, *), !forceFallback { + return .from(nativeSnapshot: nativeDataSource.snapshot()) + } + return core.snapshot(forceFallback: forceFallback) } /// Returns an item identifier for given index path. @@ -67,6 +102,9 @@ open class CollectionViewDiffableDataSource ItemIdentifierType? { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.itemIdentifier(for: indexPath) + } return core.itemIdentifier(for: indexPath) } @@ -77,6 +115,9 @@ open class CollectionViewDiffableDataSource IndexPath? { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.indexPath(for: itemIdentifier) + } return core.indexPath(for: itemIdentifier) } @@ -87,6 +128,9 @@ open class CollectionViewDiffableDataSource Int { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.numberOfSections(in: collectionView) + } return core.numberOfSections() } @@ -98,6 +142,9 @@ open class CollectionViewDiffableDataSource Int { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.collectionView(collectionView, numberOfItemsInSection: section) + } return core.numberOfItems(inSection: section) } @@ -109,6 +156,9 @@ open class CollectionViewDiffableDataSource UICollectionViewCell { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.collectionView(collectionView, cellForItemAt: indexPath) + } let itemIdentifier = core.unsafeItemIdentifier(for: indexPath) guard let cell = cellProvider(collectionView, indexPath, itemIdentifier) else { universalError("UICollectionView dataSource returned a nil cell for item at index path: \(indexPath), collectionView: \(collectionView), itemIdentifier: \(itemIdentifier)") @@ -126,6 +176,9 @@ open class CollectionViewDiffableDataSource UICollectionReusableView { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.collectionView(collectionView, viewForSupplementaryElementOfKind: kind, at: indexPath) + } guard let view = supplementaryViewProvider?(collectionView, kind, indexPath) else { return UICollectionReusableView() } diff --git a/Sources/UIKit/TableViewDiffableDataSource.swift b/Sources/UIKit/TableViewDiffableDataSource.swift index 0bb1f2e..ad28ad6 100644 --- a/Sources/UIKit/TableViewDiffableDataSource.swift +++ b/Sources/UIKit/TableViewDiffableDataSource.swift @@ -16,17 +16,45 @@ open class TableViewDiffableDataSource() + private let forceFallback: Bool + private var _nativeDataSource: Any? + @available(iOS 13.0, *) + private var nativeDataSource: UITableViewDiffableDataSource { + get { + guard let nativeDataSource = _nativeDataSource as? UITableViewDiffableDataSource else { + fatalError() + } + return nativeDataSource + } + set { + _nativeDataSource = newValue + } + } + + @available(iOS 13.0, *) + private func createNativeDataSource(for tableView: UITableView, cellProvider: @escaping CellProvider) { + _nativeDataSource = UITableViewDiffableDataSource(tableView: tableView, cellProvider: cellProvider) + } /// Creates a new data source. /// /// - Parameters: /// - tableView: A table view instance to be managed. /// - cellProvider: A closure to dequeue the cell for rows. - public init(tableView: UITableView, cellProvider: @escaping CellProvider) { + public convenience init(tableView: UITableView, cellProvider: @escaping CellProvider) { + self.init(tableView: tableView, forceFallback: false, cellProvider: cellProvider) + } + + internal init(tableView: UITableView, forceFallback: Bool, cellProvider: @escaping CellProvider) { self.tableView = tableView self.cellProvider = cellProvider + self.forceFallback = forceFallback super.init() + if #available(iOS 13, *), !forceFallback { + createNativeDataSource(for: tableView, cellProvider: cellProvider) + return + } tableView.dataSource = self } @@ -39,13 +67,17 @@ open class TableViewDiffableDataSource, animatingDifferences: Bool = true, completion: (() -> Void)? = nil) { + if #available(iOS 13, *), !forceFallback { + nativeDataSource.apply(snapshot.nativeSnapshot, animatingDifferences: animatingDifferences, completion: completion) + return + } core.apply( snapshot, view: tableView, animatingDifferences: animatingDifferences, performUpdates: { tableView, changeset, setSections in tableView.reload(using: changeset, with: self.defaultRowAnimation, setData: setSections) - }, + }, completion: completion ) } @@ -54,7 +86,10 @@ open class TableViewDiffableDataSource DiffableDataSourceSnapshot { - return core.snapshot() + if #available(iOS 13, *), !forceFallback { + return .from(nativeSnapshot: nativeDataSource.snapshot()) + } + return core.snapshot(forceFallback: forceFallback) } /// Returns an item identifier for given index path. @@ -64,6 +99,9 @@ open class TableViewDiffableDataSource ItemIdentifierType? { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.itemIdentifier(for: indexPath) + } return core.itemIdentifier(for: indexPath) } @@ -74,6 +112,9 @@ open class TableViewDiffableDataSource IndexPath? { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.indexPath(for: itemIdentifier) + } return core.indexPath(for: itemIdentifier) } @@ -84,6 +125,9 @@ open class TableViewDiffableDataSource Int { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.numberOfSections(in: tableView) + } return core.numberOfSections() } @@ -95,6 +139,9 @@ open class TableViewDiffableDataSource Int { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.tableView(tableView, numberOfRowsInSection: section) + } return core.numberOfItems(inSection: section) } @@ -128,6 +175,9 @@ open class TableViewDiffableDataSource UITableViewCell { + if #available(iOS 13, *), !forceFallback { + return nativeDataSource.tableView(tableView, cellForRowAt: indexPath) + } let itemIdentifier = core.unsafeItemIdentifier(for: indexPath) guard let cell = cellProvider(tableView, indexPath, itemIdentifier) else { universalError("UITableView dataSource returned a nil cell for row at index path: \(indexPath), tableView: \(tableView), itemIdentifier: \(itemIdentifier)") @@ -143,7 +193,7 @@ open class TableViewDiffableDataSource Bool { + open func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return false } @@ -154,7 +204,7 @@ open class TableViewDiffableDataSource Bool { + open func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool { return false } diff --git a/Tests/CollectionViewDiffableDataSourceTests.swift b/Tests/CollectionViewDiffableDataSourceTests.swift index 212eff5..bcc7450 100644 --- a/Tests/CollectionViewDiffableDataSourceTests.swift +++ b/Tests/CollectionViewDiffableDataSourceTests.swift @@ -7,7 +7,7 @@ import UIKit final class CollectionViewDiffableDataSourceTests: XCTestCase { func testInit() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } @@ -16,11 +16,11 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testApply() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) let e1 = expectation(description: "testApply() e1") dataSource.apply(snapshot, completion: e1.fulfill) @@ -50,7 +50,7 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testSnapshot() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } @@ -65,7 +65,7 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { XCTAssertEqual(snapshot3.sectionIdentifiers, []) XCTAssertEqual(snapshot3.itemIdentifiers, []) - var snapshotToApply = DiffableDataSourceSnapshot() + var snapshotToApply = DiffableDataSourceSnapshot(forceFallback: true) snapshotToApply.appendSections([0, 1, 2]) snapshotToApply.appendItems([0, 1, 2]) dataSource.apply(snapshotToApply) @@ -92,11 +92,11 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testItemIdentifier() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -107,11 +107,11 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testIndexPath() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -122,13 +122,13 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testNumberOfSections() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } XCTAssertEqual(dataSource.numberOfSections(in: collectionView), 0) - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -138,11 +138,11 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testNumberOfRowsInSection() { let collectionView = MockCollectionView() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in UICollectionViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -153,11 +153,11 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testCellForRowAt() { let collectionView = MockCollectionView() let cell = UICollectionViewCell() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in cell } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -171,11 +171,11 @@ final class CollectionViewDiffableDataSourceTests: XCTestCase { func testCanMoveRowAt() { let collectionView = MockCollectionView() let cell = UICollectionViewCell() - let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView) { _, _, _ in + let dataSource = CollectionViewDiffableDataSource(collectionView: collectionView, forceFallback: true) { _, _, _ in cell } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) diff --git a/Tests/DiffableDataSourceTests.swift b/Tests/DiffableDataSourceTests.swift index 7adf171..368dc01 100644 --- a/Tests/DiffableDataSourceTests.swift +++ b/Tests/DiffableDataSourceTests.swift @@ -16,7 +16,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.appendSections(test.append) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -33,7 +33,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.appendSections(test.append) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -51,7 +51,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.insertSections(test.insert, beforeSection: test.before) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -67,7 +67,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.insertSections(test.insert, beforeSection: test.before) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -86,7 +86,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.insertSections(test.insert, afterSection: test.after) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -102,7 +102,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.insertSections(test.insert, afterSection: test.after) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -122,7 +122,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.deleteSections(test.delete) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -140,7 +140,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.moveSection(test.move, beforeSection: test.before) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -158,7 +158,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.moveSection(test.move, afterSection: test.after) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -194,7 +194,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) snapshot.reloadSections(test.reload) XCTAssertEqual(snapshot.sectionIdentifiers, test.initial) @@ -213,7 +213,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1]) snapshot.appendItems(test.initial) snapshot.appendItems(test.append) @@ -231,7 +231,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1]) snapshot.appendItems(test.initial) snapshot.appendItems(test.append) @@ -253,7 +253,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items) @@ -276,7 +276,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items) @@ -302,7 +302,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1]) snapshot.appendItems(test.initial) snapshot.insertItems(test.insert, beforeItem: test.before) @@ -320,7 +320,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1]) snapshot.appendItems(test.initial) snapshot.insertItems(test.insert, beforeItem: test.before) @@ -341,7 +341,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1]) snapshot.appendItems(test.initial) snapshot.insertItems(test.insert, afterItem: test.after) @@ -359,7 +359,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1]) snapshot.appendItems(test.initial) snapshot.insertItems(test.insert, afterItem: test.after) @@ -382,7 +382,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -409,7 +409,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -435,7 +435,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -463,7 +463,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -539,7 +539,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -564,7 +564,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -583,7 +583,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -602,7 +602,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) XCTAssertEqual(snapshot.numberOfSections, test.expected) @@ -618,7 +618,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) XCTAssertEqual(snapshot.numberOfSections, test.expected) @@ -636,7 +636,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -655,7 +655,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -674,7 +674,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -690,7 +690,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) XCTAssertEqual(snapshot.sectionIdentifiers, test.expected) @@ -708,7 +708,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -727,7 +727,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -748,7 +748,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -767,7 +767,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -789,7 +789,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -808,7 +808,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -830,7 +830,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -849,7 +849,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) for (section, items) in test.initial.enumerated() { snapshot.appendSections([section]) snapshot.appendItems(items, toSection: section) @@ -870,7 +870,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) XCTAssertEqual(snapshot.indexOfSection(test.section), test.expectedIndex) @@ -886,7 +886,7 @@ final class DiffableDataSourceSnapshotTests: XCTestCase { ] for test in tests { - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections(test.initial) XCTAssertEqual(snapshot.indexOfSection(test.section), test.expectedIndex) diff --git a/Tests/TableViewDiffableDataSourceTests.swift b/Tests/TableViewDiffableDataSourceTests.swift index 8cec845..a6e2c66 100644 --- a/Tests/TableViewDiffableDataSourceTests.swift +++ b/Tests/TableViewDiffableDataSourceTests.swift @@ -7,7 +7,7 @@ import UIKit final class TableViewDiffableDataSourceTests: XCTestCase { func testInit() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } @@ -16,11 +16,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testApply() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) let e1 = expectation(description: "testApply() e1") dataSource.apply(snapshot, completion: e1.fulfill) @@ -50,7 +50,7 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testSnapshot() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } @@ -65,7 +65,7 @@ final class TableViewDiffableDataSourceTests: XCTestCase { XCTAssertEqual(snapshot3.sectionIdentifiers, []) XCTAssertEqual(snapshot3.itemIdentifiers, []) - var snapshotToApply = DiffableDataSourceSnapshot() + var snapshotToApply = DiffableDataSourceSnapshot(forceFallback: true) snapshotToApply.appendSections([0, 1, 2]) snapshotToApply.appendItems([0, 1, 2]) dataSource.apply(snapshotToApply) @@ -92,11 +92,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testItemIdentifier() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -107,11 +107,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testIndexPath() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -122,13 +122,13 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testNumberOfSections() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } XCTAssertEqual(dataSource.numberOfSections(in: tableView), 0) - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -138,11 +138,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testNumberOfRowsInSection() { let tableView = MockTableView() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in UITableViewCell() } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -153,11 +153,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testCellForRowAt() { let tableView = MockTableView() let cell = UITableViewCell() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in cell } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -171,11 +171,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testCanEditRowAt() { let tableView = MockTableView() let cell = UITableViewCell() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in cell } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot) @@ -189,11 +189,11 @@ final class TableViewDiffableDataSourceTests: XCTestCase { func testCanMoveRowAt() { let tableView = MockTableView() let cell = UITableViewCell() - let dataSource = TableViewDiffableDataSource(tableView: tableView) { _, _, _ in + let dataSource = TableViewDiffableDataSource(tableView: tableView, forceFallback: true) { _, _, _ in cell } - var snapshot = DiffableDataSourceSnapshot() + var snapshot = DiffableDataSourceSnapshot(forceFallback: true) snapshot.appendSections([0, 1, 2]) snapshot.appendItems([0, 1, 2], toSection: 0) dataSource.apply(snapshot)