diff --git a/tests/core.test.ts b/tests/core.test.ts index 7d7b937..2f5bc9a 100644 --- a/tests/core.test.ts +++ b/tests/core.test.ts @@ -55,3 +55,33 @@ test('next/prev clamp to range and scroll to target offset', () => { c.next(); expect(track.scrollTo).toHaveBeenCalled(); }); + +test('change fires with new index when a slide intersects', () => { + const c = createCarousel(track); + const seen: number[] = []; + c.on('change', (i) => seen.push(i)); + (IOShim.last as IOShim).emit(2); // user swiped to slide 2 + expect(seen).toEqual([2]); + expect(c.index).toBe(2); +}); + +test('change does not re-fire for the same index', () => { + const c = createCarousel(track); + const seen: number[] = []; + c.on('change', (i) => seen.push(i)); + (IOShim.last as IOShim).emit(1); + (IOShim.last as IOShim).emit(1); + expect(seen).toEqual([1]); +}); + +test('unsubscribe stops delivery; destroy disconnects observer', () => { + const c = createCarousel(track); + const seen: number[] = []; + const off = c.on('change', (i) => seen.push(i)); + off(); + (IOShim.last as IOShim).emit(2); + expect(seen).toEqual([]); + const spy = vi.spyOn(IOShim.last as IOShim, 'disconnect'); + c.destroy(); + expect(spy).toHaveBeenCalled(); +});