 }
 
 
+private let FakeSupplementaryViewKind = "FakeSupplementaryViewKind"
+
+
+private class FakeFlowLayout: UICollectionViewFlowLayout {
+
+    private override func layoutAttributesForSupplementaryViewOfKind(elementKind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionViewLayoutAttributes! {
+        if elementKind == FakeSupplementaryViewKind {
+            return UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: elementKind, withIndexPath: indexPath)
+        }
+
+        return super.layoutAttributesForSupplementaryViewOfKind(elementKind, atIndexPath: indexPath)
+    }
+}
+
+
 private typealias CellFactory = CollectionViewCellFactory<FakeCollectionCell, FakeCollectionModel>
 private typealias SupplementaryViewFactory = CollectionSupplementaryViewFactory<FakeCollectionSupplementaryView, FakeCollectionModel>
 private typealias Section = CollectionViewSection<FakeCollectionModel>

        super.setUp()

        fakeCollectionView.registerClass(FakeCollectionCell.self, forCellWithReuseIdentifier: fakeCellReuseId)
        fakeCollectionView.registerClass(FakeCollectionSupplementaryView.self, forSupplementaryViewOfKind: fakeSupplementaryViewKind, withReuseIdentifier: fakeSupplementaryViewReuseId)
    }
    
    override func tearDown() {
        super.tearDown()
    }


    let fakeCellReuseId = "fakeCellId"
    let fakeSupplementaryViewReuseId = "fakeSupplementaryId"

    private let fakeCollectionView = FakeCollectionView(frame: CGRect(x: 0, y: 0, width: 320, height: 600), collectionViewLayout: FakeFlowLayout())
    let dequeueCellExpectationName = "collectionview_dequeue_cell_expectation"
    let dequeueSupplementaryViewExpectationName = "collectionview_dequeue_supplementaryview_expectation"

