mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-19 14:52:19 +02:00
[WIP] fix things
This commit is contained in:
parent
93f261257e
commit
ae139bdf0e
@ -13,7 +13,7 @@ pre-push:
|
||||
commands:
|
||||
biome-lint:
|
||||
glob: "*.{js,ts,jsx,tsx}"
|
||||
run: npx @biomejs/biome check --write --reporter=summary {push_files} --no-errors-on-unmatched
|
||||
run: npx @biomejs/biome check --reporter=summary {push_files} --no-errors-on-unmatched
|
||||
|
||||
post-merge:
|
||||
commands:
|
||||
|
174
package-lock.json
generated
174
package-lock.json
generated
@ -29,7 +29,7 @@
|
||||
"@types/node": "^20.12.13",
|
||||
"@typescript-eslint/eslint-plugin": "^8.0.0-alpha.54",
|
||||
"@typescript-eslint/parser": "^8.0.0-alpha.54",
|
||||
"@vitest/coverage-istanbul": "^2.1.9",
|
||||
"@vitest/coverage-istanbul": "^3.0.9",
|
||||
"dependency-cruiser": "^16.3.10",
|
||||
"eslint": "^9.7.0",
|
||||
"eslint-plugin-import-x": "^4.2.1",
|
||||
@ -43,7 +43,7 @@
|
||||
"typescript-eslint": "^8.0.0-alpha.54",
|
||||
"vite": "^5.4.14",
|
||||
"vite-tsconfig-paths": "^4.3.2",
|
||||
"vitest": "^2.1.9",
|
||||
"vitest": "^3.0.9",
|
||||
"vitest-canvas-mock": "^0.3.3"
|
||||
},
|
||||
"engines": {
|
||||
@ -2312,14 +2312,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/coverage-istanbul": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-2.1.9.tgz",
|
||||
"integrity": "sha512-vdYE4FkC/y2lxcN3Dcj54Bw+ericmDwiex0B8LV5F/YNYEYP1mgVwhPnHwWGAXu38qizkjOuyczKbFTALfzFKw==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.0.9.tgz",
|
||||
"integrity": "sha512-/TXh2qmOhclmVPjOnPTpIO4Xr6l2P5EwyXQygenwq4/ZQ/vPsrz+GCRZF9kBeQi6xrGcHv368Si9PGImWQawVg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@istanbuljs/schema": "^0.1.3",
|
||||
"debug": "^4.3.7",
|
||||
"debug": "^4.4.0",
|
||||
"istanbul-lib-coverage": "^3.2.2",
|
||||
"istanbul-lib-instrument": "^6.0.3",
|
||||
"istanbul-lib-report": "^3.0.1",
|
||||
@ -2327,48 +2327,48 @@
|
||||
"istanbul-reports": "^3.1.7",
|
||||
"magicast": "^0.3.5",
|
||||
"test-exclude": "^7.0.1",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
"tinyrainbow": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vitest": "2.1.9"
|
||||
"vitest": "3.0.9"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/expect": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz",
|
||||
"integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.9.tgz",
|
||||
"integrity": "sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "2.1.9",
|
||||
"@vitest/utils": "2.1.9",
|
||||
"chai": "^5.1.2",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
"@vitest/spy": "3.0.9",
|
||||
"@vitest/utils": "3.0.9",
|
||||
"chai": "^5.2.0",
|
||||
"tinyrainbow": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/mocker": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz",
|
||||
"integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.9.tgz",
|
||||
"integrity": "sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/spy": "2.1.9",
|
||||
"@vitest/spy": "3.0.9",
|
||||
"estree-walker": "^3.0.3",
|
||||
"magic-string": "^0.30.12"
|
||||
"magic-string": "^0.30.17"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"msw": "^2.4.9",
|
||||
"vite": "^5.0.0"
|
||||
"vite": "^5.0.0 || ^6.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"msw": {
|
||||
@ -2380,51 +2380,51 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/pretty-format": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz",
|
||||
"integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.9.tgz",
|
||||
"integrity": "sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tinyrainbow": "^1.2.0"
|
||||
"tinyrainbow": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/runner": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz",
|
||||
"integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.9.tgz",
|
||||
"integrity": "sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/utils": "2.1.9",
|
||||
"pathe": "^1.1.2"
|
||||
"@vitest/utils": "3.0.9",
|
||||
"pathe": "^2.0.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/snapshot": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz",
|
||||
"integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.9.tgz",
|
||||
"integrity": "sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": "2.1.9",
|
||||
"magic-string": "^0.30.12",
|
||||
"pathe": "^1.1.2"
|
||||
"@vitest/pretty-format": "3.0.9",
|
||||
"magic-string": "^0.30.17",
|
||||
"pathe": "^2.0.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/spy": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz",
|
||||
"integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.9.tgz",
|
||||
"integrity": "sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@ -2435,15 +2435,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@vitest/utils": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz",
|
||||
"integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.9.tgz",
|
||||
"integrity": "sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/pretty-format": "2.1.9",
|
||||
"loupe": "^3.1.2",
|
||||
"tinyrainbow": "^1.2.0"
|
||||
"@vitest/pretty-format": "3.0.9",
|
||||
"loupe": "^3.1.3",
|
||||
"tinyrainbow": "^2.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
@ -2738,9 +2738,9 @@
|
||||
"license": "CC-BY-4.0"
|
||||
},
|
||||
"node_modules/chai": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz",
|
||||
"integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==",
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
|
||||
"integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@ -5450,9 +5450,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/pathe": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
|
||||
"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
|
||||
"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
@ -6308,9 +6308,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tinyrainbow": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
|
||||
"integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
|
||||
"integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@ -6677,23 +6677,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vite-node": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz",
|
||||
"integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.9.tgz",
|
||||
"integrity": "sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cac": "^6.7.14",
|
||||
"debug": "^4.3.7",
|
||||
"es-module-lexer": "^1.5.4",
|
||||
"pathe": "^1.1.2",
|
||||
"vite": "^5.0.0"
|
||||
"debug": "^4.4.0",
|
||||
"es-module-lexer": "^1.6.0",
|
||||
"pathe": "^2.0.3",
|
||||
"vite": "^5.0.0 || ^6.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"vite-node": "vite-node.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.0.0 || >=20.0.0"
|
||||
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
@ -6720,47 +6720,48 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vitest": {
|
||||
"version": "2.1.9",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz",
|
||||
"integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==",
|
||||
"version": "3.0.9",
|
||||
"resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.9.tgz",
|
||||
"integrity": "sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitest/expect": "2.1.9",
|
||||
"@vitest/mocker": "2.1.9",
|
||||
"@vitest/pretty-format": "^2.1.9",
|
||||
"@vitest/runner": "2.1.9",
|
||||
"@vitest/snapshot": "2.1.9",
|
||||
"@vitest/spy": "2.1.9",
|
||||
"@vitest/utils": "2.1.9",
|
||||
"chai": "^5.1.2",
|
||||
"debug": "^4.3.7",
|
||||
"@vitest/expect": "3.0.9",
|
||||
"@vitest/mocker": "3.0.9",
|
||||
"@vitest/pretty-format": "^3.0.9",
|
||||
"@vitest/runner": "3.0.9",
|
||||
"@vitest/snapshot": "3.0.9",
|
||||
"@vitest/spy": "3.0.9",
|
||||
"@vitest/utils": "3.0.9",
|
||||
"chai": "^5.2.0",
|
||||
"debug": "^4.4.0",
|
||||
"expect-type": "^1.1.0",
|
||||
"magic-string": "^0.30.12",
|
||||
"pathe": "^1.1.2",
|
||||
"magic-string": "^0.30.17",
|
||||
"pathe": "^2.0.3",
|
||||
"std-env": "^3.8.0",
|
||||
"tinybench": "^2.9.0",
|
||||
"tinyexec": "^0.3.1",
|
||||
"tinypool": "^1.0.1",
|
||||
"tinyrainbow": "^1.2.0",
|
||||
"vite": "^5.0.0",
|
||||
"vite-node": "2.1.9",
|
||||
"tinyexec": "^0.3.2",
|
||||
"tinypool": "^1.0.2",
|
||||
"tinyrainbow": "^2.0.0",
|
||||
"vite": "^5.0.0 || ^6.0.0",
|
||||
"vite-node": "3.0.9",
|
||||
"why-is-node-running": "^2.3.0"
|
||||
},
|
||||
"bin": {
|
||||
"vitest": "vitest.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.0.0 || >=20.0.0"
|
||||
"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://opencollective.com/vitest"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@edge-runtime/vm": "*",
|
||||
"@types/node": "^18.0.0 || >=20.0.0",
|
||||
"@vitest/browser": "2.1.9",
|
||||
"@vitest/ui": "2.1.9",
|
||||
"@types/debug": "^4.1.12",
|
||||
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
|
||||
"@vitest/browser": "3.0.9",
|
||||
"@vitest/ui": "3.0.9",
|
||||
"happy-dom": "*",
|
||||
"jsdom": "*"
|
||||
},
|
||||
@ -6768,6 +6769,9 @@
|
||||
"@edge-runtime/vm": {
|
||||
"optional": true
|
||||
},
|
||||
"@types/debug": {
|
||||
"optional": true
|
||||
},
|
||||
"@types/node": {
|
||||
"optional": true
|
||||
},
|
||||
|
12
package.json
12
package.json
@ -9,10 +9,10 @@
|
||||
"build": "vite build",
|
||||
"build:beta": "vite build --mode beta",
|
||||
"preview": "vite preview",
|
||||
"test": "vitest run --project pre && vitest run --project main",
|
||||
"test:cov": "vitest run --project pre && vitest run --project main --coverage",
|
||||
"test:watch": "vitest run --project pre && vitest watch --project main --coverage",
|
||||
"test:silent": "vitest run --project pre && vitest run --project main --silent",
|
||||
"test": "vitest run --project main",
|
||||
"test:cov": "vitest run --project main --coverage",
|
||||
"test:watch": "vitest watch --project main --coverage",
|
||||
"test:silent": "vitest run --project main --silent",
|
||||
"typecheck": "tsc --noEmit",
|
||||
"eslint": "eslint --fix .",
|
||||
"eslint-ci": "eslint .",
|
||||
@ -36,7 +36,7 @@
|
||||
"@types/node": "^20.12.13",
|
||||
"@typescript-eslint/eslint-plugin": "^8.0.0-alpha.54",
|
||||
"@typescript-eslint/parser": "^8.0.0-alpha.54",
|
||||
"@vitest/coverage-istanbul": "^2.1.9",
|
||||
"@vitest/coverage-istanbul": "^3.0.9",
|
||||
"dependency-cruiser": "^16.3.10",
|
||||
"eslint": "^9.7.0",
|
||||
"eslint-plugin-import-x": "^4.2.1",
|
||||
@ -50,7 +50,7 @@
|
||||
"typescript-eslint": "^8.0.0-alpha.54",
|
||||
"vite": "^5.4.14",
|
||||
"vite-tsconfig-paths": "^4.3.2",
|
||||
"vitest": "^2.1.9",
|
||||
"vitest": "^3.0.9",
|
||||
"vitest-canvas-mock": "^0.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
|
16
src/@types/DexData.ts
Normal file
16
src/@types/DexData.ts
Normal file
@ -0,0 +1,16 @@
|
||||
/**
|
||||
* Dex entry for a single Pokemon Species
|
||||
*/
|
||||
export interface DexEntry {
|
||||
seenAttr: bigint;
|
||||
caughtAttr: bigint;
|
||||
natureAttr: number;
|
||||
seenCount: number;
|
||||
caughtCount: number;
|
||||
hatchedCount: number;
|
||||
ivs: number[];
|
||||
}
|
||||
|
||||
export interface DexData {
|
||||
[key: number]: DexEntry;
|
||||
}
|
@ -98,12 +98,13 @@ export function getDataTypeKey(dataType: GameDataType, slotId = 0): string {
|
||||
switch (dataType) {
|
||||
case GameDataType.SYSTEM:
|
||||
return "data";
|
||||
case GameDataType.SESSION:
|
||||
case GameDataType.SESSION: {
|
||||
let ret = "sessionData";
|
||||
if (slotId) {
|
||||
ret += slotId;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
case GameDataType.SETTINGS:
|
||||
return "settings";
|
||||
case GameDataType.TUTORIALS:
|
||||
@ -1553,16 +1554,18 @@ export class GameData {
|
||||
try {
|
||||
dataName = GameDataType[dataType].toLowerCase();
|
||||
switch (dataType) {
|
||||
case GameDataType.SYSTEM:
|
||||
case GameDataType.SYSTEM: {
|
||||
dataStr = this.convertSystemDataStr(dataStr);
|
||||
const systemData = this.parseSystemData(dataStr);
|
||||
valid = !!systemData.dexData && !!systemData.timestamp;
|
||||
break;
|
||||
case GameDataType.SESSION:
|
||||
}
|
||||
case GameDataType.SESSION: {
|
||||
const sessionData = this.parseSessionData(dataStr);
|
||||
valid = !!sessionData.party && !!sessionData.enemyParty && !!sessionData.timestamp;
|
||||
break;
|
||||
case GameDataType.RUN_HISTORY:
|
||||
}
|
||||
case GameDataType.RUN_HISTORY: {
|
||||
const data = JSON.parse(dataStr);
|
||||
const keys = Object.keys(data);
|
||||
dataName = i18next.t("menuUiHandler:RUN_HISTORY").toLowerCase();
|
||||
@ -1572,6 +1575,7 @@ export class GameData {
|
||||
["isFavorite", "isVictory", "entry"].every(v => entryKeys.includes(v)) && entryKeys.length === 3;
|
||||
});
|
||||
break;
|
||||
}
|
||||
case GameDataType.SETTINGS:
|
||||
case GameDataType.TUTORIALS:
|
||||
valid = true;
|
||||
|
@ -1,22 +1,40 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import type { PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { MoveResult } from "#app/field/pokemon";
|
||||
import BattleScene from "#app/battle-scene";
|
||||
import type BattleScene from "#app/battle-scene";
|
||||
import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-tags";
|
||||
import { Moves } from "#app/enums/moves";
|
||||
import { PokemonAnimType } from "#app/enums/pokemon-anim-type";
|
||||
import * as messages from "#app/messages";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import type { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||
import GameManager from "#test/testUtils/gameManager";
|
||||
|
||||
describe("BattlerTag - SubstituteTag", () => {
|
||||
let phaserGame: Phaser.Game;
|
||||
let game: GameManager;
|
||||
|
||||
beforeAll(() => {
|
||||
phaserGame = new Phaser.Game({
|
||||
type: Phaser.HEADLESS,
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
game.phaseInterceptor.restoreOg();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
game = new GameManager(phaserGame);
|
||||
});
|
||||
|
||||
let mockPokemon: Pokemon;
|
||||
|
||||
describe("onAdd behavior", () => {
|
||||
beforeEach(() => {
|
||||
mockPokemon = {
|
||||
scene: new BattleScene(),
|
||||
scene: game.scene,
|
||||
hp: 101,
|
||||
id: 0,
|
||||
getMaxHp: vi.fn().mockReturnValue(101) as Pokemon["getMaxHp"],
|
||||
@ -77,7 +95,7 @@ describe("BattlerTag - SubstituteTag", () => {
|
||||
describe("onRemove behavior", () => {
|
||||
beforeEach(() => {
|
||||
mockPokemon = {
|
||||
scene: new BattleScene(),
|
||||
scene: game.scene,
|
||||
hp: 101,
|
||||
id: 0,
|
||||
isFainted: vi.fn().mockReturnValue(false) as Pokemon["isFainted"],
|
||||
@ -109,7 +127,7 @@ describe("BattlerTag - SubstituteTag", () => {
|
||||
describe("lapse behavior", () => {
|
||||
beforeEach(() => {
|
||||
mockPokemon = {
|
||||
scene: new BattleScene(),
|
||||
scene: game.scene,
|
||||
hp: 101,
|
||||
id: 0,
|
||||
turnData: { acted: true } as PokemonTurnData,
|
||||
|
@ -6,13 +6,19 @@ import type {
|
||||
} from "#app/@types/PokerogueSystemSavedataApi";
|
||||
import { PokerogueSystemSavedataApi } from "#app/plugins/api/pokerogue-system-savedata-api";
|
||||
import type { SystemSaveData } from "#app/system/game-data";
|
||||
import { initServerForApiTests } from "#test/testUtils/testFileInitialization";
|
||||
import { getApiBaseUrl } from "#test/testUtils/testUtils";
|
||||
import { http, HttpResponse } from "msw";
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const apiBase = getApiBaseUrl();
|
||||
const systemSavedataApi = new PokerogueSystemSavedataApi(getApiBaseUrl());
|
||||
const { server } = global;
|
||||
|
||||
let server;
|
||||
|
||||
beforeAll(async () => {
|
||||
server = await initServerForApiTests();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
server.resetHandlers();
|
||||
|
@ -1,6 +0,0 @@
|
||||
import Overrides, { defaultOverrides } from "#app/overrides";
|
||||
import { expect, test } from "vitest";
|
||||
|
||||
test("Overrides are default values", () => {
|
||||
expect(Overrides).toEqual(defaultOverrides);
|
||||
});
|
@ -1,21 +1,12 @@
|
||||
/* eslint-disable */
|
||||
// @ts-nocheck
|
||||
import BattleScene, * as battleScene from "#app/battle-scene";
|
||||
import { MoveAnim } from "#app/data/battle-anims";
|
||||
import Pokemon from "#app/field/pokemon";
|
||||
import * as Utils from "#app/utils";
|
||||
import { blobToString } from "#test/testUtils/gameManagerUtils";
|
||||
import { MockClock } from "#test/testUtils/mocks/mockClock";
|
||||
import mockConsoleLog from "#test/testUtils/mocks/mockConsoleLog";
|
||||
import { MockFetch } from "#test/testUtils/mocks/mockFetch";
|
||||
import MockLoader from "#test/testUtils/mocks/mockLoader";
|
||||
import mockLocalStorage from "#test/testUtils/mocks/mockLocalStorage";
|
||||
import MockImage from "#test/testUtils/mocks/mocksContainer/mockImage";
|
||||
import MockTextureManager from "#test/testUtils/mocks/mockTextureManager";
|
||||
import fs from "node:fs";
|
||||
import Phaser from "phaser";
|
||||
import InputText from "phaser3-rex-plugins/plugins/inputtext";
|
||||
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||
import { vi } from "vitest";
|
||||
import { MockGameObjectCreator } from "./mocks/mockGameObjectCreator";
|
||||
import InputManager = Phaser.Input.InputManager;
|
||||
@ -27,51 +18,6 @@ import UpdateList = Phaser.GameObjects.UpdateList;
|
||||
import { version } from "../../package.json";
|
||||
import { MockTimedEventManager } from "./mocks/mockTimedEventManager";
|
||||
|
||||
Object.defineProperty(window, "localStorage", {
|
||||
value: mockLocalStorage(),
|
||||
});
|
||||
Object.defineProperty(window, "console", {
|
||||
value: mockConsoleLog(false),
|
||||
});
|
||||
|
||||
BBCodeText.prototype.destroy = () => null;
|
||||
BBCodeText.prototype.resize = () => null;
|
||||
InputText.prototype.setElement = () => null;
|
||||
InputText.prototype.resize = () => null;
|
||||
Phaser.GameObjects.Image = MockImage;
|
||||
window.URL.createObjectURL = (blob: Blob) => {
|
||||
blobToString(blob).then((data: string) => {
|
||||
localStorage.setItem("toExport", data);
|
||||
});
|
||||
return null;
|
||||
};
|
||||
navigator.getGamepads = () => [];
|
||||
global.fetch = vi.fn(MockFetch);
|
||||
Utils.setCookie(Utils.sessionIdKey, "fake_token");
|
||||
|
||||
window.matchMedia = () => ({
|
||||
matches: false,
|
||||
});
|
||||
|
||||
/**
|
||||
* Sets this object's position relative to another object with a given offset
|
||||
* @param guideObject {@linkcode Phaser.GameObjects.GameObject} to base the position off of
|
||||
* @param x The relative x position
|
||||
* @param y The relative y position
|
||||
*/
|
||||
const setPositionRelative = function (guideObject: any, x: number, y: number) {
|
||||
const offsetX = guideObject.width * (-0.5 + (0.5 - guideObject.originX));
|
||||
const offsetY = guideObject.height * (-0.5 + (0.5 - guideObject.originY));
|
||||
this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y);
|
||||
};
|
||||
|
||||
Phaser.GameObjects.Container.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Sprite.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Image.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.NineSlice.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Text.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Rectangle.prototype.setPositionRelative = setPositionRelative;
|
||||
|
||||
export default class GameWrapper {
|
||||
public game: Phaser.Game;
|
||||
public scene: BattleScene;
|
||||
@ -240,6 +186,8 @@ export default class GameWrapper {
|
||||
this.scene.time = new MockClock(this.scene);
|
||||
this.scene.remove = vi.fn(); // TODO: this should be stubbed differently
|
||||
this.scene.eventManager = new MockTimedEventManager(); // Disable Timed Events
|
||||
|
||||
Pokemon.prototype.updateInfo = async () => {};
|
||||
}
|
||||
}
|
||||
|
||||
|
41
test/testUtils/listenersManager.ts
Normal file
41
test/testUtils/listenersManager.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import { expect } from "vitest";
|
||||
|
||||
/**
|
||||
* Whether or not it is currently the first time running this manager.
|
||||
*/
|
||||
let firstTime = true;
|
||||
|
||||
/**
|
||||
* The list of listeners that were present during the first time this manager is run.
|
||||
* These initial listeners are needed throughout the entire test suite, so we never remove them.
|
||||
*/
|
||||
const initialListeners: NodeJS.MessageListener[] = [];
|
||||
|
||||
/**
|
||||
* The current listener that is only needed for the current test file.
|
||||
* We plan to delete it during the next test file, when it is no longer needed.
|
||||
*/
|
||||
let currentListener: NodeJS.MessageListener | null;
|
||||
|
||||
export function manageListeners() {
|
||||
if (firstTime) {
|
||||
initialListeners.push(...process.listeners("message"));
|
||||
} else {
|
||||
expect(process.listeners("message").length).toBeLessThan(7);
|
||||
|
||||
// Remove the listener that was used during the previous test file
|
||||
if (currentListener) {
|
||||
process.removeListener("message", currentListener);
|
||||
currentListener = null;
|
||||
}
|
||||
|
||||
// Find the new listener that is being used for the current test file
|
||||
process.listeners("message").forEach(fn => {
|
||||
if (!initialListeners.includes(fn)) {
|
||||
currentListener = fn;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
firstTime = false;
|
||||
}
|
@ -1,65 +1,67 @@
|
||||
const MockConsoleLog = (_logDisabled = false, _phaseText = false) => {
|
||||
let logs: any[] = [];
|
||||
const logDisabled: boolean = _logDisabled;
|
||||
const phaseText: boolean = _phaseText;
|
||||
const originalLog = console.log;
|
||||
const originalError = console.error;
|
||||
const originalDebug = console.debug;
|
||||
const originalWarn = console.warn;
|
||||
const notified: any[] = [];
|
||||
|
||||
const blacklist = ["Phaser", "variant icon does not exist", 'Texture "%s" not found'];
|
||||
const whitelist = ["Phase"];
|
||||
|
||||
return {
|
||||
log(...args) {
|
||||
export class MockConsoleLog {
|
||||
constructor(
|
||||
private logDisabled = false,
|
||||
private phaseText = false,
|
||||
) {}
|
||||
private logs: any[] = [];
|
||||
private notified: any[] = [];
|
||||
|
||||
public log(...args) {
|
||||
const argsStr = this.getStr(args);
|
||||
logs.push(argsStr);
|
||||
if (logDisabled && !phaseText) {
|
||||
this.logs.push(argsStr);
|
||||
if (this.logDisabled && !this.phaseText) {
|
||||
return;
|
||||
}
|
||||
if ((phaseText && !whitelist.some(b => argsStr.includes(b))) || blacklist.some(b => argsStr.includes(b))) {
|
||||
if ((this.phaseText && !whitelist.some(b => argsStr.includes(b))) || blacklist.some(b => argsStr.includes(b))) {
|
||||
return;
|
||||
}
|
||||
originalLog(args);
|
||||
},
|
||||
error(...args) {
|
||||
}
|
||||
public error(...args) {
|
||||
const argsStr = this.getStr(args);
|
||||
logs.push(argsStr);
|
||||
this.logs.push(argsStr);
|
||||
originalError(args); // Appelle le console.error originel
|
||||
},
|
||||
debug(...args) {
|
||||
}
|
||||
public debug(...args) {
|
||||
const argsStr = this.getStr(args);
|
||||
logs.push(argsStr);
|
||||
if (logDisabled && !phaseText) {
|
||||
this.logs.push(argsStr);
|
||||
if (this.logDisabled && !this.phaseText) {
|
||||
return;
|
||||
}
|
||||
if (!whitelist.some(b => argsStr.includes(b)) || blacklist.some(b => argsStr.includes(b))) {
|
||||
return;
|
||||
}
|
||||
originalDebug(args);
|
||||
},
|
||||
}
|
||||
warn(...args) {
|
||||
const argsStr = this.getStr(args);
|
||||
logs.push(args);
|
||||
if (logDisabled && !phaseText) {
|
||||
this.logs.push(args);
|
||||
if (this.logDisabled && !this.phaseText) {
|
||||
return;
|
||||
}
|
||||
if (!whitelist.some(b => argsStr.includes(b)) || blacklist.some(b => argsStr.includes(b))) {
|
||||
return;
|
||||
}
|
||||
originalWarn(args);
|
||||
},
|
||||
}
|
||||
notify(msg) {
|
||||
originalLog(msg);
|
||||
notified.push(msg);
|
||||
},
|
||||
this.notified.push(msg);
|
||||
}
|
||||
getLogs() {
|
||||
return logs;
|
||||
},
|
||||
return this.logs;
|
||||
}
|
||||
clearLogs() {
|
||||
logs = [];
|
||||
},
|
||||
this.logs = [];
|
||||
}
|
||||
getStr(...args) {
|
||||
return args
|
||||
.map(arg => {
|
||||
@ -71,12 +73,8 @@ const MockConsoleLog = (_logDisabled = false, _phaseText = false) => {
|
||||
// Handle BigInt values
|
||||
return arg.toString();
|
||||
}
|
||||
// Handle all other types
|
||||
return arg.toString();
|
||||
})
|
||||
.join(";");
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default MockConsoleLog;
|
||||
}
|
||||
}
|
||||
|
26
test/testUtils/mocks/mockContextCanvas.ts
Normal file
26
test/testUtils/mocks/mockContextCanvas.ts
Normal file
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* A minimal stub object to mock HTMLCanvasElement
|
||||
*/
|
||||
export const mockCanvas: any = {
|
||||
width: 0,
|
||||
getContext() {
|
||||
return mockContext;
|
||||
},
|
||||
};
|
||||
/**
|
||||
* A minimal stub object to mock CanvasRenderingContext2D
|
||||
*/
|
||||
export const mockContext: any = {
|
||||
font: "",
|
||||
measureText: () => {
|
||||
return {};
|
||||
},
|
||||
save: () => {},
|
||||
scale: () => {},
|
||||
clearRect: () => {},
|
||||
fillRect: () => {},
|
||||
fillText: () => {},
|
||||
getImageData: () => {},
|
||||
canvas: mockCanvas,
|
||||
restore: () => {},
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
const mockLocalStorage = () => {
|
||||
export const mockLocalStorage = () => {
|
||||
let store = {} as Storage;
|
||||
|
||||
return {
|
||||
@ -23,5 +23,3 @@ const mockLocalStorage = () => {
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default mockLocalStorage;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer";
|
||||
import MockImage from "#test/testUtils/mocks/mocksContainer/mockImage";
|
||||
import { MockImage } from "#test/testUtils/mocks/mocksContainer/mockImage";
|
||||
import MockNineslice from "#test/testUtils/mocks/mocksContainer/mockNineslice";
|
||||
import MockPolygon from "#test/testUtils/mocks/mocksContainer/mockPolygon";
|
||||
import MockRectangle from "#test/testUtils/mocks/mocksContainer/mockRectangle";
|
||||
|
@ -1,6 +1,6 @@
|
||||
import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer";
|
||||
|
||||
export default class MockImage extends MockContainer {
|
||||
export class MockImage extends MockContainer {
|
||||
private texture;
|
||||
|
||||
constructor(textureManager, x, y, texture) {
|
||||
|
114
test/testUtils/testFileInitialization.ts
Normal file
114
test/testUtils/testFileInitialization.ts
Normal file
@ -0,0 +1,114 @@
|
||||
import { initLoggedInUser } from "#app/account";
|
||||
import { SESSION_ID_COOKIE_NAME } from "#app/constants";
|
||||
import { initAbilities } from "#app/data/ability";
|
||||
import { allMoves, initMoves } from "#app/data/moves/move";
|
||||
import { initBiomes } from "#app/data/balance/biomes";
|
||||
import { initEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters";
|
||||
import { initPokemonForms } from "#app/data/pokemon-forms";
|
||||
import { initSpecies } from "#app/data/pokemon-species";
|
||||
import { initAchievements } from "#app/system/achv";
|
||||
import { initVouchers } from "#app/system/voucher";
|
||||
import { initStatsKeys } from "#app/ui/game-stats-ui-handler";
|
||||
import { setCookie } from "#app/utils";
|
||||
import { blobToString } from "#test/testUtils/gameManagerUtils";
|
||||
import { MockConsoleLog } from "#test/testUtils/mocks/mockConsoleLog";
|
||||
import { mockContext } from "#test/testUtils/mocks/mockContextCanvas";
|
||||
import { mockLocalStorage } from "#test/testUtils/mocks/mockLocalStorage";
|
||||
import { MockImage } from "#test/testUtils/mocks/mocksContainer/mockImage";
|
||||
import Phaser from "phaser";
|
||||
import InputText from "phaser3-rex-plugins/plugins/inputtext";
|
||||
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||
import { manageListeners } from "./listenersManager";
|
||||
|
||||
/**
|
||||
* An initialization function that is run at the beginning of every test file (via `beforeAll()`).
|
||||
*/
|
||||
export function initTestFile() {
|
||||
// Set the timezone to UTC for tests.
|
||||
process.env.TZ = "UTC";
|
||||
|
||||
Object.defineProperty(window, "localStorage", {
|
||||
value: mockLocalStorage(),
|
||||
});
|
||||
Object.defineProperty(window, "console", {
|
||||
value: new MockConsoleLog(false),
|
||||
});
|
||||
Object.defineProperty(document, "fonts", {
|
||||
writable: true,
|
||||
value: {
|
||||
add: () => {},
|
||||
},
|
||||
});
|
||||
|
||||
BBCodeText.prototype.destroy = () => null;
|
||||
// @ts-ignore
|
||||
BBCodeText.prototype.resize = () => null;
|
||||
InputText.prototype.setElement = () => null as any;
|
||||
InputText.prototype.resize = () => null as any;
|
||||
Phaser.GameObjects.Image = MockImage as any;
|
||||
window.URL.createObjectURL = (blob: Blob) => {
|
||||
blobToString(blob).then((data: string) => {
|
||||
localStorage.setItem("toExport", data);
|
||||
});
|
||||
return null as any;
|
||||
};
|
||||
navigator.getGamepads = () => [];
|
||||
setCookie(SESSION_ID_COOKIE_NAME, "fake_token");
|
||||
|
||||
window.matchMedia = () =>
|
||||
({
|
||||
matches: false,
|
||||
}) as any;
|
||||
|
||||
/**
|
||||
* Sets this object's position relative to another object with a given offset
|
||||
* @param guideObject {@linkcode Phaser.GameObjects.GameObject} to base the position off of
|
||||
* @param x The relative x position
|
||||
* @param y The relative y position
|
||||
*/
|
||||
const setPositionRelative = function (guideObject: any, x: number, y: number) {
|
||||
const offsetX = guideObject.width * (-0.5 + (0.5 - guideObject.originX));
|
||||
const offsetY = guideObject.height * (-0.5 + (0.5 - guideObject.originY));
|
||||
this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y);
|
||||
};
|
||||
|
||||
Phaser.GameObjects.Container.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Sprite.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Image.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.NineSlice.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Text.prototype.setPositionRelative = setPositionRelative;
|
||||
Phaser.GameObjects.Rectangle.prototype.setPositionRelative = setPositionRelative;
|
||||
HTMLCanvasElement.prototype.getContext = () => mockContext;
|
||||
|
||||
// Initialize all of these things if and only if they have not been initialized yet
|
||||
if (allMoves.length === 0) {
|
||||
initVouchers();
|
||||
initAchievements();
|
||||
initStatsKeys();
|
||||
initPokemonPrevolutions();
|
||||
initBiomes();
|
||||
initEggMoves();
|
||||
initPokemonForms();
|
||||
initSpecies();
|
||||
initMoves();
|
||||
initAbilities();
|
||||
initLoggedInUser();
|
||||
initMysteryEncounters();
|
||||
}
|
||||
|
||||
manageListeners();
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the current mock server and initializes a new mock server.
|
||||
* This is run at the beginning of every API test file.
|
||||
*/
|
||||
export async function initServerForApiTests() {
|
||||
global.server?.close();
|
||||
const { setupServer } = await import("msw/node");
|
||||
global.server = setupServer();
|
||||
global.server.listen({ onUnhandledRequest: "error" });
|
||||
return global.server;
|
||||
}
|
@ -1,21 +1,6 @@
|
||||
import "vitest-canvas-mock";
|
||||
|
||||
import { initLoggedInUser } from "#app/account";
|
||||
import { initAbilities } from "#app/data/ability";
|
||||
import { initBiomes } from "#app/data/balance/biomes";
|
||||
import { initEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { initMoves } from "#app/data/moves/move";
|
||||
import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters";
|
||||
import { initPokemonForms } from "#app/data/pokemon-forms";
|
||||
import { initSpecies } from "#app/data/pokemon-species";
|
||||
import { initAchievements } from "#app/system/achv";
|
||||
import { initVouchers } from "#app/system/voucher";
|
||||
import { initStatsKeys } from "#app/ui/game-stats-ui-handler";
|
||||
import { afterAll, beforeAll, vi } from "vitest";
|
||||
|
||||
/** Set the timezone to UTC for tests. */
|
||||
process.env.TZ = "UTC";
|
||||
import { initTestFile } from "./testUtils/testFileInitialization";
|
||||
|
||||
/** Mock the override import to always return default values, ignoring any custom overrides. */
|
||||
vi.mock("#app/overrides", async importOriginal => {
|
||||
@ -24,8 +9,9 @@ vi.mock("#app/overrides", async importOriginal => {
|
||||
|
||||
return {
|
||||
default: defaultOverrides,
|
||||
defaultOverrides,
|
||||
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
||||
// Export `defaultOverrides` as a *copy*.
|
||||
// This ensures we can easily reset `overrides` back to its default values after modifying it.
|
||||
defaultOverrides: { ...defaultOverrides },
|
||||
} satisfies typeof import("#app/overrides");
|
||||
});
|
||||
|
||||
@ -63,28 +49,14 @@ vi.mock("i18next", async importOriginal => {
|
||||
return await importOriginal();
|
||||
});
|
||||
|
||||
initVouchers();
|
||||
initAchievements();
|
||||
initStatsKeys();
|
||||
initPokemonPrevolutions();
|
||||
initBiomes();
|
||||
initEggMoves();
|
||||
initPokemonForms();
|
||||
initSpecies();
|
||||
initMoves();
|
||||
initAbilities();
|
||||
initLoggedInUser();
|
||||
initMysteryEncounters();
|
||||
|
||||
global.testFailed = false;
|
||||
|
||||
beforeAll(() => {
|
||||
Object.defineProperty(document, "fonts", {
|
||||
writable: true,
|
||||
value: {
|
||||
add: () => {},
|
||||
},
|
||||
});
|
||||
console.log("=====================================");
|
||||
console.log("Initializing test file...");
|
||||
initTestFile();
|
||||
console.log("Test file initialized!");
|
||||
console.log("=====================================");
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
|
@ -1,20 +1,31 @@
|
||||
import { defineProject } from "vitest/config";
|
||||
import { defaultConfig } from "./vite.config";
|
||||
import { BaseSequencer, type TestSpecification } from "vitest/node";
|
||||
|
||||
function getTestOrder(testName: string): number {
|
||||
if (testName.includes("battle_scene.test.ts")) {
|
||||
return 1;
|
||||
}
|
||||
if (testName.includes("inputs.test.ts")) {
|
||||
return 2;
|
||||
}
|
||||
return 3;
|
||||
}
|
||||
|
||||
export default defineProject(({ mode }) => ({
|
||||
...defaultConfig,
|
||||
test: {
|
||||
testTimeout: 20000,
|
||||
setupFiles: ["./test/fontFace.setup.ts", "./test/vitest.setup.ts"],
|
||||
server: {
|
||||
deps: {
|
||||
inline: ["vitest-canvas-mock"],
|
||||
//@ts-ignore
|
||||
optimizer: {
|
||||
web: {
|
||||
include: ["vitest-canvas-mock"],
|
||||
},
|
||||
},
|
||||
sequence: {
|
||||
sequencer: class CustomSequencer extends BaseSequencer {
|
||||
async sort(files: TestSpecification[]) {
|
||||
// use default sorting at first.
|
||||
files = await super.sort(files);
|
||||
// Except, forcibly reorder
|
||||
|
||||
return files.sort((a, b) => getTestOrder(a.moduleId) - getTestOrder(b.moduleId));
|
||||
}
|
||||
},
|
||||
},
|
||||
environment: "jsdom" as const,
|
||||
@ -34,7 +45,6 @@ export default defineProject(({ mode }) => ({
|
||||
},
|
||||
name: "main",
|
||||
include: ["./test/**/*.{test,spec}.ts"],
|
||||
exclude: ["./test/pre.test.ts"],
|
||||
},
|
||||
esbuild: {
|
||||
pure: mode === "production" ? ["console.log"] : [],
|
||||
|
Loading…
Reference in New Issue
Block a user