@@ -110,4 +110,42 @@ - (void)testSizeInversion
110110 XCTAssertTrue (FBSizeFuzzyEqualToSize (screenSizeLandscape, FBAdjustDimensionsForApplication (screenSizeLandscape, UIInterfaceOrientationLandscapeRight), t));
111111}
112112
113+ - (void )testScrollGestureOffsetsWithMatchingFrames
114+ {
115+ CGRect frame = CGRectMake (20 , 200 , 300 , 400 );
116+ CGVector proportion = CGVectorMake (0.5 , 0.75 );
117+ CGVector vector = CGVectorMake (0 , -200 );
118+ CGVector startOffset, endOffset;
119+ XCTAssertTrue (FBScrollGestureOffsets (frame, frame, proportion, vector, &startOffset, &endOffset));
120+ XCTAssertTrue (FBVectorFuzzyEqualToVector (startOffset, CGVectorMake (0.5 , 0.75 ), 0.01 ));
121+ XCTAssertTrue (FBVectorFuzzyEqualToVector (endOffset, CGVectorMake (0.5 , 0.25 ), 0.01 ));
122+ }
123+
124+ - (void )testScrollGestureOffsetsWithRescaledAnchorFrame
125+ {
126+ // Simulates a compatibility-mode window: anchorFrame is scrollingFrame scaled by ~2.19x,
127+ // same origin - offsets should still land within [0, 1] instead of drifting outside it.
128+ CGRect scrollingFrame = CGRectMake (20 , 202 , 335 , 420 );
129+ CGRect anchorFrame = CGRectMake (20 , 202 , 733 , 920 );
130+ CGVector proportion = CGVectorMake (0.5 , 0.75 );
131+ CGVector vector = CGVectorMake (0 , -250 );
132+ CGVector startOffset, endOffset;
133+ XCTAssertTrue (FBScrollGestureOffsets (scrollingFrame, anchorFrame, proportion, vector, &startOffset, &endOffset));
134+ XCTAssertTrue (startOffset.dx >= 0 && startOffset.dx <= 1 );
135+ XCTAssertTrue (startOffset.dy >= 0 && startOffset.dy <= 1 );
136+ XCTAssertTrue (endOffset.dx >= 0 && endOffset.dx <= 1 );
137+ XCTAssertTrue (endOffset.dy >= 0 && endOffset.dy <= 1 );
138+ }
139+
140+ - (void )testScrollGestureOffsetsWithEmptyFrame
141+ {
142+ CGVector startOffset = CGVectorMake (-1 , -1 );
143+ CGVector endOffset = CGVectorMake (-1 , -1 );
144+ XCTAssertFalse (FBScrollGestureOffsets (CGRectZero, CGRectMake (0 , 0 , 100 , 100 ), CGVectorMake (0.5 , 0.5 ), CGVectorMake (0 , -50 ), &startOffset, &endOffset));
145+ XCTAssertFalse (FBScrollGestureOffsets (CGRectMake (0 , 0 , 100 , 100 ), CGRectZero, CGVectorMake (0.5 , 0.5 ), CGVectorMake (0 , -50 ), &startOffset, &endOffset));
146+ // Untouched on failure
147+ XCTAssertTrue (startOffset.dx == -1 && startOffset.dy == -1 );
148+ XCTAssertTrue (endOffset.dx == -1 && endOffset.dy == -1 );
149+ }
150+
113151@end
0 commit comments