This commit is contained in:
@@ -24,16 +24,25 @@ afterEach(() => {
|
||||
})
|
||||
|
||||
describe('建筑外观与馆内楼层自动切换状态机', () => {
|
||||
it('连续放大 14.9% 不进入,达到 15% 并保持 500ms 后进入', () => {
|
||||
it('连续放大 14.9% 不进入,达到 15% 后进入', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.beginInput(100, 'gesture')
|
||||
machine.updateDistance(85.1, { source: 'gesture' })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(400)
|
||||
expect(requests).toEqual([])
|
||||
|
||||
machine.updateDistance(85, { source: 'gesture' })
|
||||
vi.advanceTimersByTime(499)
|
||||
vi.advanceTimersByTime(120)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
})
|
||||
|
||||
it('进入条件必须连续保持 120ms', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.beginInput(100, 'wheel')
|
||||
machine.updateDistance(85, { source: 'wheel' })
|
||||
vi.advanceTimersByTime(119)
|
||||
expect(requests).toEqual([])
|
||||
vi.advanceTimersByTime(1)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
@@ -46,12 +55,12 @@ describe('建筑外观与馆内楼层自动切换状态机', () => {
|
||||
machine.updateDistance(95, { source: 'wheel' })
|
||||
machine.beginInput(95, 'wheel')
|
||||
machine.updateDistance(90, { source: 'wheel' })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(400)
|
||||
|
||||
expect(requests).toEqual([])
|
||||
})
|
||||
|
||||
it('相对楼层初始距离拉远 19.9% 不退出,达到 20% 并保持 500ms 后退出', () => {
|
||||
it('相对楼层初始距离拉远 19.9% 不退出,达到 20% 后退出', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.setView('floor')
|
||||
@@ -61,37 +70,59 @@ describe('建筑外观与馆内楼层自动切换状态机', () => {
|
||||
expect(requests).toEqual([])
|
||||
|
||||
machine.updateDistance(120)
|
||||
vi.advanceTimersByTime(499)
|
||||
vi.advanceTimersByTime(400)
|
||||
expect(requests).toEqual(['exit-overview'])
|
||||
})
|
||||
|
||||
it('退出条件必须连续保持 400ms', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.setView('floor')
|
||||
machine.setFloorInitialDistance(100)
|
||||
machine.updateDistance(120)
|
||||
vi.advanceTimersByTime(399)
|
||||
expect(requests).toEqual([])
|
||||
vi.advanceTimersByTime(1)
|
||||
expect(requests).toEqual(['exit-overview'])
|
||||
})
|
||||
|
||||
it('条件满足后反向缩放会取消防抖任务并重置进入基准', () => {
|
||||
it('0.8% 内的触控反向抖动不重置进入基准,也不取消候选状态', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.beginInput(100, 'touch', { resetBaseline: true })
|
||||
machine.updateDistance(85, { source: 'touch' })
|
||||
vi.advanceTimersByTime(300)
|
||||
machine.updateDistance(88, { source: 'touch' })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(60)
|
||||
machine.updateDistance(85.6, { source: 'touch' })
|
||||
vi.advanceTimersByTime(60)
|
||||
|
||||
expect(requests).toEqual([])
|
||||
|
||||
machine.updateDistance(74.8, { source: 'touch' })
|
||||
vi.advanceTimersByTime(500)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
})
|
||||
|
||||
it('退出条件满足后回到 20% 阈值内会取消防抖任务', () => {
|
||||
it('明确反向缩放超过 0.8% 后取消候选并重置进入基准', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.beginInput(100, 'touch', { resetBaseline: true })
|
||||
machine.updateDistance(85, { source: 'touch' })
|
||||
vi.advanceTimersByTime(60)
|
||||
machine.updateDistance(86, { source: 'touch' })
|
||||
vi.advanceTimersByTime(120)
|
||||
|
||||
expect(requests).toEqual([])
|
||||
|
||||
machine.updateDistance(73, { source: 'touch' })
|
||||
vi.advanceTimersByTime(120)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
})
|
||||
|
||||
it('退出候选明确反向超过 0.8% 后会取消防抖任务', () => {
|
||||
const { machine, requests } = createMachine()
|
||||
|
||||
machine.setView('floor')
|
||||
machine.setFloorInitialDistance(100)
|
||||
machine.updateDistance(120)
|
||||
vi.advanceTimersByTime(300)
|
||||
machine.updateDistance(119.9)
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(200)
|
||||
machine.updateDistance(118.9)
|
||||
vi.advanceTimersByTime(400)
|
||||
|
||||
expect(requests).toEqual([])
|
||||
})
|
||||
@@ -101,13 +132,13 @@ describe('建筑外观与馆内楼层自动切换状态机', () => {
|
||||
|
||||
machine.beginInput(100, 'wheel')
|
||||
machine.updateDistance(90, { source: 'wheel' })
|
||||
vi.advanceTimersByTime(1201)
|
||||
vi.advanceTimersByTime(2001)
|
||||
machine.updateDistance(80, { previousDistance: 90, source: 'wheel' })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(120)
|
||||
expect(requests).toEqual([])
|
||||
|
||||
machine.updateDistance(76.5, { source: 'wheel' })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(120)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
})
|
||||
|
||||
@@ -116,7 +147,7 @@ describe('建筑外观与馆内楼层自动切换状态机', () => {
|
||||
|
||||
machine.beginInput(100, 'wheel')
|
||||
machine.updateDistance(85, { source: 'wheel' })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(120)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
|
||||
machine.markTransitionSucceeded()
|
||||
@@ -136,11 +167,11 @@ describe('建筑外观与馆内楼层自动切换状态机', () => {
|
||||
|
||||
machine.beginInput(100, source, { resetBaseline: source === 'touch' })
|
||||
machine.updateDistance(85.1, { source })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(400)
|
||||
expect(requests).toEqual([])
|
||||
|
||||
machine.updateDistance(85, { source })
|
||||
vi.advanceTimersByTime(500)
|
||||
vi.advanceTimersByTime(120)
|
||||
expect(requests).toEqual(['enter-floor'])
|
||||
}
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user