         }
         super.deleteSections(sections)
     }
+    #endif
 
+    #if swift(>=3.0)
+    override func insertItems(at indexPaths: [IndexPath]) {
+        self.insertionRowIndexPaths.append(contentsOf: indexPaths)
+        if let callback = self.insertRowsCallback {
+            callback(indexPaths: indexPaths)
+        }
+        super.insertItems(at: indexPaths)
+    }
+    #else
     override func insertItemsAtIndexPaths(indexPaths: [NSIndexPath]) {
         self.insertionRowIndexPaths.appendContentsOf(indexPaths)
         if let callback = self.insertRowsCallback {

        }
        super.deleteItemsAtIndexPaths(indexPaths)
    }
}

class MockCollectionViewCell: UICollectionViewCell {


class MockCollectionView: UICollectionView {

    var insertRowsCallback: ((indexPaths: [IndexPathway]) -> Void)?
    var deleteRowsCallback: ((indexPaths: [IndexPathway]) -> Void)?
    var insertSectionsCallback: ((indexSet: NSIndexSet) -> Void)?
    var deleteSectionsCallback: ((indexSet: NSIndexSet) -> Void)?

    var insertionRowIndexPaths: [IndexPathway] = []
    var deletionRowIndexPaths: [IndexPathway] = []
    var insertionSectionIndexSet: NSMutableIndexSet = NSMutableIndexSet()
    var deletionSectionIndexSet: NSMutableIndexSet = NSMutableIndexSet()

    #if swift(>=3.0)
    override func insertSections(_ sections: IndexSet) {
        self.insertionSectionIndexSet.add(sections)
        if let callback = insertSectionsCallback {
            callback(indexSet: sections)
        }
        super.insertSections(sections)
    }
    #else
    override func insertSections(sections: NSIndexSet) {
        self.insertionSectionIndexSet.addIndexes(sections)
        if let callback = insertSectionsCallback {
