|
2 | 2 | // SPDX-License-Identifier: Apache-2.0 |
3 | 3 | import { |
4 | 4 | calculatePosition, |
| 5 | + clampRectStart, |
5 | 6 | intersectRectangles, |
6 | 7 | isCenterOutside, |
7 | 8 | PRIORITY_MAPPING, |
@@ -280,3 +281,48 @@ describe('isCenterOutside', () => { |
280 | 281 | ).toBe(false); |
281 | 282 | }); |
282 | 283 | }); |
| 284 | + |
| 285 | +describe('clampRectStart', () => { |
| 286 | + const parent = { insetInlineStart: 100, insetBlockStart: 100, inlineSize: 400, blockSize: 300 }; |
| 287 | + |
| 288 | + test('clamps insetInlineStart to parent start when track is before parent', () => { |
| 289 | + const track = { insetInlineStart: 50, insetBlockStart: 200, inlineSize: 20, blockSize: 20 }; |
| 290 | + expect(clampRectStart(track, parent).insetInlineStart).toBe(100); |
| 291 | + }); |
| 292 | + |
| 293 | + test('clamps insetBlockStart to parent start when track is above parent', () => { |
| 294 | + const track = { insetInlineStart: 200, insetBlockStart: 50, inlineSize: 20, blockSize: 20 }; |
| 295 | + expect(clampRectStart(track, parent).insetBlockStart).toBe(100); |
| 296 | + }); |
| 297 | + |
| 298 | + test('clamps insetInlineStart to parent end when track is past parent', () => { |
| 299 | + const track = { insetInlineStart: 600, insetBlockStart: 200, inlineSize: 20, blockSize: 20 }; |
| 300 | + expect(clampRectStart(track, parent).insetInlineStart).toBe(500); |
| 301 | + }); |
| 302 | + |
| 303 | + test('clamps insetBlockStart to parent end when track is below parent', () => { |
| 304 | + const track = { insetInlineStart: 200, insetBlockStart: 500, inlineSize: 20, blockSize: 20 }; |
| 305 | + expect(clampRectStart(track, parent).insetBlockStart).toBe(400); |
| 306 | + }); |
| 307 | + |
| 308 | + test('does not clamp when track is within parent bounds', () => { |
| 309 | + const track = { insetInlineStart: 200, insetBlockStart: 250, inlineSize: 20, blockSize: 20 }; |
| 310 | + const result = clampRectStart(track, parent); |
| 311 | + expect(result.insetInlineStart).toBe(200); |
| 312 | + expect(result.insetBlockStart).toBe(250); |
| 313 | + }); |
| 314 | + |
| 315 | + test('clamps both axes simultaneously', () => { |
| 316 | + const track = { insetInlineStart: 10, insetBlockStart: 500, inlineSize: 20, blockSize: 20 }; |
| 317 | + const result = clampRectStart(track, parent); |
| 318 | + expect(result.insetInlineStart).toBe(100); |
| 319 | + expect(result.insetBlockStart).toBe(400); |
| 320 | + }); |
| 321 | + |
| 322 | + test('preserves inlineSize and blockSize of the track', () => { |
| 323 | + const track = { insetInlineStart: 50, insetBlockStart: 50, inlineSize: 20, blockSize: 30 }; |
| 324 | + const result = clampRectStart(track, parent); |
| 325 | + expect(result.inlineSize).toBe(20); |
| 326 | + expect(result.blockSize).toBe(30); |
| 327 | + }); |
| 328 | +}); |
0 commit comments