Skip to content

Commit 9b3d901

Browse files
committed
chore: test with vijest
# Conflicts: # packages/@interactjs/arrange/ArrangeEvent.ts # packages/@interactjs/arrange/arrange.spec.ts # packages/@interactjs/multi-target/multiTarget.spec.ts # packages/@interactjs/snappers/elements.spec.ts
1 parent b9c8a8c commit 9b3d901

File tree

18 files changed

+754
-637
lines changed

18 files changed

+754
-637
lines changed

jest.config.ts

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { Config } from '@jest/types'
2-
import { defaults } from 'jest-config' // eslint-disable-line import/no-extraneous-dependencies
32

4-
import { sourcesGlob } from './scripts/utils'
3+
// import { sourcesGlob } from './scripts/utils'
54

65
const config: Config.InitialOptions = {
6+
preset: 'vijest',
77
coverageThreshold: {
88
global: {
99
statements: 59,
@@ -12,21 +12,10 @@ const config: Config.InitialOptions = {
1212
lines: 59,
1313
},
1414
},
15-
collectCoverageFrom: [sourcesGlob],
16-
coveragePathIgnorePatterns: [
17-
'[\\\\/]_',
18-
'\\.d\\.ts$',
19-
'@interactjs[\\\\/](rebound|symbol-tree)[\\\\/]',
20-
],
21-
coverageReporters: [
22-
'json',
23-
'text',
24-
['lcov', { projectRoot: 'packages/@interactjs' }],
25-
],
26-
moduleFileExtensions: [...defaults.moduleFileExtensions, 'vue'],
27-
transform: {
28-
'^.+\\.(ts|js|vue)$': ['babel-jest', require('./babel.config')],
29-
},
15+
// collectCoverage: true,
16+
// collectCoverageFrom: [sourcesGlob],
17+
coveragePathIgnorePatterns: ['[\\\\/]_', '\\.d\\.ts$', '@interactjs[\\\\/](rebound|symbol-tree)[\\\\/]'],
18+
coverageReporters: ['json', 'text', ['lcov', { projectRoot: 'packages/@interactjs' }]],
3019
}
3120

3221
export default config

package.json

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
"@babel/runtime": "^7.15.3",
3434
"@types/jest": "^27.0.1",
3535
"@types/node": "^16.7.4",
36-
"@types/puppeteer": "^5.4.4",
3736
"@types/react": "^17.0.19",
3837
"@types/shelljs": "^0.8.9",
3938
"@types/tape": "^4.13.2",
@@ -47,7 +46,6 @@
4746
"@vue/runtime-dom": "^3.2.6",
4847
"@vue/test-utils": "^1.2.2",
4948
"babel-helper-vue-jsx-merge-props": "^2.0.3",
50-
"babel-jest": "^27.1.0",
5149
"babel-plugin-syntax-jsx": "^6.18.0",
5250
"babelify": "^10.0.0",
5351
"browser-pack-flat": "^3.4.2",
@@ -76,18 +74,15 @@
7674
"hash-sum": "^2.0.0",
7775
"husky": "5",
7876
"jest": "^27.1.0",
79-
"jest-puppeteer": "^5.0.4",
8077
"jsdoc": "https://github.com/taye/jsdoc/tarball/6b210948",
8178
"jsdoc-babel": "^0.5.0",
8279
"jsdoc-stale": "https://github.com/taye/jsdoc-stale/tarball/749bf17",
83-
"jsdom": "^17.0.0",
8480
"lint-staged": "^11.1.2",
8581
"mkdirp": "^1.0.4",
8682
"nodemon": "^2.0.12",
8783
"p-queue": "^7.1.0",
8884
"prettier": "^2.3.2",
8985
"promise-polyfill": "^8.2.0",
90-
"puppeteer": "^10.2.0",
9186
"react": "^17.0.2",
9287
"react-dom": "^17.0.2",
9388
"rebound": "^0.1.0",
@@ -101,9 +96,9 @@
10196
"ts-node": "^10.2.1",
10297
"tslint": "^6.1.3",
10398
"typescript": "^4.4.2",
99+
"vijest": "^0.0.0",
104100
"vite": "^2.5.1",
105101
"vue": "^3.2.6",
106-
"vue-jest": "4",
107102
"yargs": "^17.1.1"
108103
},
109104
"engines": {

packages/@interactjs/actions/drop/DropEvent.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ import * as arr from '@interactjs/utils/arr'
77
import type { DropState } from './plugin'
88

99
export class DropEvent extends BaseEvent<'drag'> {
10-
target: Element
10+
declare target: Element
1111
dropzone: Interactable
1212
dragEvent: InteractEvent<'drag'>
1313
relatedTarget: Element
1414
draggable: Interactable
15-
timeStamp: number
1615
propagationStopped = false
1716
immediatePropagationStopped = false
1817

packages/@interactjs/auto-start/autoStart.spec.ts

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,65 @@ import * as helpers from '@interactjs/core/tests/_helpers'
44
import autoStart from './base'
55

66
test('autoStart', () => {
7-
const rect = { top: 100, left: 200, bottom: 300, right: 400 }
8-
const { interaction, interactable, event, coords, target: element } = helpers.testEnv({
7+
window.PointerEvent = null
8+
9+
document.body.innerHTML = `
10+
<style>
11+
#target { position: absolute; top: 100px; left: 200px; bottom: 300px; right: 400px }
12+
</style>
13+
<div id=target></div>
14+
`
15+
16+
Object.assign(document.body.style)
17+
18+
const {
19+
interaction,
20+
interactable,
21+
event,
22+
coords,
23+
target: element,
24+
down,
25+
} = helpers.testEnv({
926
plugins: [autoStart, drag],
10-
rect,
27+
target: document.getElementById('target'),
1128
})
1229

1330
interactable.draggable(true)
1431
interaction.pointerType = coords.pointerType = 'mouse'
1532
coords.buttons = 1
1633

17-
interaction.pointerDown(event, event, element)
34+
down()
1835

1936
// prepares action
2037
expect(interaction.prepared).toEqual({ name: 'drag', axis: 'xy', edges: undefined })
2138

2239
// set interaction.rect
23-
expect(interaction.rect).toEqual({ ...rect, width: rect.right - rect.left, height: rect.bottom - rect.top })
40+
expect(interaction.rect).toEqual(
41+
helpers.getProps(element.getBoundingClientRect(), ['top', 'left', 'bottom', 'right', 'width', 'height']),
42+
)
2443

2544
// sets drag cursor
2645
expect(element.style.cursor).toBe('move')
2746

28-
let checkerArgs: any[]
47+
const cursorChecker = jest.fn(() => 'pointer')
2948

3049
interactable.draggable({
31-
cursorChecker (...args) {
32-
checkerArgs = args
33-
34-
return 'custom-cursor'
35-
},
50+
cursorChecker,
3651
})
3752

3853
interaction.pointerDown(event, event, element)
3954

4055
// calls cursorChecker with expected args
41-
expect(checkerArgs).toEqual([{ name: 'drag', axis: 'xy', edges: undefined }, interactable, element, false])
56+
expect(cursorChecker).toHaveBeenCalledWith(
57+
{ name: 'drag', axis: 'xy', edges: undefined },
58+
interactable,
59+
element,
60+
false,
61+
)
4262

4363
interaction.pointerDown(event, event, element)
4464
// uses cursorChecker value
45-
expect(element.style.cursor).toBe('custom-cursor')
65+
expect(element.style.cursor).toBe('pointer')
4666

4767
coords.page.x += 10
4868
coords.client.x += 10
@@ -51,5 +71,10 @@ test('autoStart', () => {
5171
expect(interaction._interacting).toBe(true)
5272

5373
// calls cursorChecker with true for interacting arg
54-
expect(checkerArgs).toEqual([{ name: 'drag', axis: 'xy', edges: undefined }, interactable, element, true])
74+
expect(cursorChecker).toHaveBeenCalledWith(
75+
{ name: 'drag', axis: 'xy', edges: undefined },
76+
interactable,
77+
element,
78+
true,
79+
)
5580
})

packages/@interactjs/core/BaseEvent.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import type { Interaction, InteractionProxy } from '@interactjs/core/Interaction
33
import type { ActionName } from '@interactjs/core/scope'
44

55
export class BaseEvent<T extends ActionName | null = never> {
6-
type: string
7-
target: EventTarget
8-
currentTarget: Node
9-
interactable: Interactable
10-
_interaction: Interaction<T>
11-
timeStamp: any
6+
declare type: string
7+
declare target: EventTarget
8+
declare currentTarget: Node
9+
declare interactable: Interactable
10+
declare _interaction: Interaction<T>
11+
declare timeStamp: number
1212
immediatePropagationStopped = false
1313
propagationStopped = false
1414

packages/@interactjs/core/InteractEvent.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { ActionName } from '@interactjs/core/scope'
21
import type { Point, FullRect, PointerEventType, Element } from '@interactjs/types/index'
32
import extend from '@interactjs/utils/extend'
43
import getOriginXY from '@interactjs/utils/getOriginXY'
@@ -7,6 +6,7 @@ import hypot from '@interactjs/utils/hypot'
76
import { BaseEvent } from './BaseEvent'
87
import type { Interaction } from './Interaction'
98
import { defaults } from './options'
9+
import type { ActionName } from './scope'
1010

1111
export type EventPhase = keyof PhaseMap
1212

@@ -34,10 +34,10 @@ export interface InteractEvent {
3434

3535
export class InteractEvent<
3636
T extends ActionName = never,
37-
P extends EventPhase = EventPhase
37+
P extends EventPhase = EventPhase,
3838
> extends BaseEvent<T> {
39-
target: Element
40-
currentTarget: Element
39+
declare target: Element
40+
declare currentTarget: Element
4141
relatedTarget: Element | null = null
4242
screenX?: number
4343
screenY?: number
@@ -61,7 +61,6 @@ export class InteractEvent<
6161
velocity: Point
6262
speed: number
6363
swipe: ReturnType<InteractEvent<T>['getSwipe']>
64-
timeStamp: any
6564
// resize
6665
axes?: 'x' | 'y' | 'xy'
6766
preEnd?: boolean

packages/@interactjs/core/Interaction.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { ActionDefaults } from '@interactjs/core/options'
21
import type {
32
Element,
43
EdgeOptions,
@@ -14,6 +13,8 @@ import { warnOnce, copyAction } from '@interactjs/utils/misc'
1413
import * as pointerUtils from '@interactjs/utils/pointerUtils'
1514
import * as rectUtils from '@interactjs/utils/rect'
1615

16+
import type { ActionDefaults } from '@interactjs/core/options'
17+
1718
import type { EventPhase } from './InteractEvent'
1819
import { InteractEvent } from './InteractEvent'
1920
import type { Interactable } from './Interactable'
@@ -110,18 +111,18 @@ let idCounter = 0
110111

111112
export class Interaction<T extends ActionName | null = ActionName> {
112113
// current interactable being interacted with
113-
interactable: Interactable = null
114+
interactable: Interactable | null = null
114115

115116
// the target element of the interactable
116-
element: Element = null
117-
rect: FullRect
117+
element: Element | null = null
118+
rect: FullRect | null = null
118119
_rects?: {
119120
start: FullRect
120121
corrected: FullRect
121122
previous: FullRect
122123
delta: FullRect
123124
}
124-
edges: EdgeOptions
125+
edges: EdgeOptions | null = null
125126

126127
_scopeFire: Scope['fire']
127128

@@ -138,7 +139,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
138139
pointers: PointerInfo[] = []
139140

140141
// pointerdown/mousedown/touchstart event
141-
downEvent: PointerEventType = null
142+
downEvent: PointerEventType | null = null
142143

143144
downPointer: PointerType = {} as PointerType
144145

@@ -160,7 +161,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
160161
_interacting = false
161162
_ending = false
162163
_stopped = true
163-
_proxy: InteractionProxy<T> = null
164+
_proxy: InteractionProxy<T> | null = null
164165

165166
simulation = null
166167

@@ -227,7 +228,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
227228
pointerIndex,
228229
pointerInfo,
229230
type: 'down',
230-
interaction: (this as unknown) as Interaction<never>,
231+
interaction: this as unknown as Interaction<never>,
231232
})
232233
}
233234

@@ -324,7 +325,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
324325
dx,
325326
dy,
326327
duplicate: duplicateMove,
327-
interaction: (this as unknown) as Interaction<never>,
328+
interaction: this as unknown as Interaction<never>,
328329
}
329330

330331
if (!duplicateMove) {
@@ -403,7 +404,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
403404
eventTarget,
404405
type: type as any,
405406
curEventTarget,
406-
interaction: (this as unknown) as Interaction<never>,
407+
interaction: this as unknown as Interaction<never>,
407408
})
408409

409410
if (!this.simulation) {
@@ -418,7 +419,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
418419
this._scopeFire('interactions:blur', {
419420
event,
420421
type: 'blur',
421-
interaction: (this as unknown) as Interaction<never>,
422+
interaction: this as unknown as Interaction<never>,
422423
})
423424
}
424425

@@ -538,7 +539,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
538539
down,
539540
pointerInfo,
540541
pointerIndex,
541-
interaction: (this as unknown) as Interaction<never>,
542+
interaction: this as unknown as Interaction<never>,
542543
})
543544

544545
return pointerIndex
@@ -557,7 +558,7 @@ export class Interaction<T extends ActionName | null = ActionName> {
557558
eventTarget: null,
558559
pointerIndex,
559560
pointerInfo,
560-
interaction: (this as unknown) as Interaction<never>,
561+
interaction: this as unknown as Interaction<never>,
561562
})
562563

563564
this.pointers.splice(pointerIndex, 1)

packages/@interactjs/core/interactablePreventDefault.spec.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import interactablePreventDefault from './interactablePreventDefault'
55
import * as helpers from './tests/_helpers'
66

77
test('core/interactablePreventDefault', () => {
8+
window.PointerEvent = null
9+
810
const { scope, interactable } = helpers.testEnv({
911
plugins: [interactablePreventDefault, autoStart, drag],
1012
})
@@ -13,12 +15,12 @@ test('core/interactablePreventDefault', () => {
1315

1416
interactable.draggable({})
1517

16-
const mouseEvent: MouseEvent = new MouseEvent('mousedown', { bubbles: true })
18+
const mouseDown: MouseEvent = new MouseEvent('mousedown', { bubbles: true })
1719
const nativeDragStart: Event = new Event('dragstart', { bubbles: true })
1820

1921
nativeDragStart.preventDefault = jest.fn()
2022

21-
scope.document.body.dispatchEvent(mouseEvent)
23+
scope.document.body.dispatchEvent(mouseDown)
2224
scope.document.body.dispatchEvent(nativeDragStart)
2325

2426
// native dragstart is prevented on interactable

0 commit comments

Comments
 (0)