 		
 		XCTAssertTrue(completed)
 	}
+
+    func testScrollViewWillBeginDragging() {
+        var completed = false
+
+        autoreleasepool {
+            let scrollView = UIScrollView()
+            var willBeginDragging = false
+
+            _ = scrollView.rx.willBeginDragging.subscribe(onNext: {
+                willBeginDragging = true
+            }, onCompleted: {
+                completed = true
+            })
+
+            XCTAssertFalse(willBeginDragging)
+
+            scrollView.delegate!.scrollViewWillBeginDragging!(scrollView)
+
+            XCTAssertTrue(willBeginDragging)
+        }
+
+        XCTAssertTrue(completed)
+    }
 	
 	func testScrollViewDidEndDragging() {
 		var completed = false

        XCTAssertTrue(completed)
    }
	
	
	func testScrollViewDidEndDecelerating() {
		var completed = false

        
        XCTAssertTrue(completed)
    }

    func testScrollViewWillBeginZooming() {
        var completed = false

        autoreleasepool {
            let scrollView = UIScrollView()
            let zoomView = UIView()
            var results: [UIView?] = []

            _ = scrollView.rx.willBeginZooming.subscribe(onNext: { value in
                results.append(value)
            }, onCompleted: {
                completed = true
            })

            XCTAssertTrue(results.isEmpty)

            scrollView.delegate!.scrollViewWillBeginZooming!(scrollView, with: zoomView)
            scrollView.delegate!.scrollViewWillBeginZooming!(scrollView, with: nil)

            XCTAssertEqual(results[0], zoomView)
            XCTAssertNil(results[1])
        }

        XCTAssertTrue(completed)
    }

    func testScrollViewDidEndZooming() {
        var completed = false

        autoreleasepool {
            let scrollView = UIScrollView()
            let zoomView = UIView()
            var viewResults: [UIView?] = []
            var scaleResults: [CGFloat] = []

            _ = scrollView.rx.didEndZooming.subscribe(onNext: { (view, scale) in
                viewResults.append(view)
                scaleResults.append(scale)
            }, onCompleted: {
                completed = true
            })

            XCTAssertTrue(viewResults.isEmpty)
            XCTAssertTrue(scaleResults.isEmpty)

            scrollView.delegate!.scrollViewDidEndZooming!(scrollView, with: zoomView, atScale: 0)
            scrollView.delegate!.scrollViewDidEndZooming!(scrollView, with: nil, atScale: 2)

            XCTAssertEqual(viewResults[0], zoomView)
            XCTAssertNil(viewResults[1])
            XCTAssertEqual(scaleResults, [0, 2])
        }

        XCTAssertTrue(completed)
    }
}

@objc final class MockScrollViewDelegate
