mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
1 Commits
40c576bc2d
...
cursor/upd
Author | SHA1 | Date | |
---|---|---|---|
![]() |
903b36e9c8 |
57
GDJS/tests/MIGRATION.md
Normal file
57
GDJS/tests/MIGRATION.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# Migration from Karma to Vitest
|
||||
|
||||
This document describes the migration from Karma to Vitest browser testing for GDJS tests.
|
||||
|
||||
## Changes Made
|
||||
|
||||
### 1. Updated package.json
|
||||
- Replaced Karma-related dependencies with Vitest and Playwright
|
||||
- Updated test scripts to use Vitest commands
|
||||
- Removed mocha dependency (Vitest has its own test runner)
|
||||
|
||||
### 2. New Configuration Files
|
||||
- `vitest.config.js` - Main Vitest configuration for regular tests
|
||||
- `vitest.benchmark.config.js` - Vitest configuration for benchmark tests
|
||||
- `index.html` - HTML file that loads all GDJS engine files in correct order
|
||||
- `vitest-setup.js` - Setup file for globals and compatibility layers
|
||||
|
||||
### 3. Removed Files
|
||||
- `karma.conf.js` - Old Karma configuration (no longer needed)
|
||||
|
||||
### 4. Test Compatibility
|
||||
- Tests continue to use `expect.js` assertion library for compatibility
|
||||
- Mocha-style `describe()`, `it()`, `beforeEach()` functions are available
|
||||
- Simple Sinon polyfill added for basic mocking functionality
|
||||
|
||||
## Running Tests
|
||||
|
||||
### Regular Tests
|
||||
```bash
|
||||
npm test # Run all tests (headless Chrome)
|
||||
npm run test:watch # Run tests in watch mode
|
||||
npm run test:firefox # Run tests in Firefox
|
||||
npm run test:chrome # Run tests in Chrome (visible browser)
|
||||
```
|
||||
|
||||
### Benchmarks
|
||||
```bash
|
||||
npm run test-benchmark # Run benchmarks (headless)
|
||||
npm run test-benchmark:watch # Run benchmarks in watch mode
|
||||
```
|
||||
|
||||
## Key Differences from Karma
|
||||
|
||||
1. **File Loading**: Instead of Karma's file loading configuration, we use an `index.html` file to load all GDJS engine scripts in order.
|
||||
|
||||
2. **Browser Support**: Vitest browser mode uses Playwright, providing better browser automation and debugging capabilities.
|
||||
|
||||
3. **Configuration**: Vitest configuration is more declarative and easier to understand than Karma's plugin-based approach.
|
||||
|
||||
4. **Performance**: Vitest generally provides faster test execution and better watch mode performance.
|
||||
|
||||
## Migration Notes
|
||||
|
||||
- All existing test files should work without modification
|
||||
- The test structure (`describe`, `it`, `expect`) remains the same
|
||||
- GDJS engine loading order is preserved through the index.html file
|
||||
- Assets and utilities are still accessible in the same way
|
91
GDJS/tests/index.html
Normal file
91
GDJS/tests/index.html
Normal file
@@ -0,0 +1,91 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>GDJS Tests</title>
|
||||
|
||||
<!-- expect.js for compatibility -->
|
||||
<script src="./node_modules/expect.js/index.js"></script>
|
||||
|
||||
<!-- GDJS game engine files (Order is important) -->
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/libs/jshashtable.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/logger.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/gd.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/AsyncTasksManager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/libs/rbush.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/pixi.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/three.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/pixi-filters-tools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/pixi-image-manager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/pixi-bitmapfont-manager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/layer-pixi-renderer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/loadingscreen-pixi-renderer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/runtimegame-pixi-renderer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/RuntimeInstanceContainer-pixi-renderer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/pixi-renderers/runtimescene-pixi-renderer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/howler-sound-manager/howler.min.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/howler-sound-manager/howler-sound-manager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/fontfaceobserver-font-manager/fontfaceobserver.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/fontfaceobserver-font-manager/fontfaceobserver-font-manager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/Model3DManager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/jsonmanager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/ResourceLoader.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/ResourceCache.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/timemanager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/polygon.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/runtimeobject.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/RuntimeInstanceContainer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/runtimescene.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/scenestack.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/profiler.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/force.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/RuntimeLayer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/layer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/RuntimeCustomObjectLayer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/timer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/inputmanager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/capturemanager.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/runtimegame.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/runtimewatermark.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/variable.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/variablescontainer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/oncetriggers.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/runtimebehavior.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/SpriteAnimator.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/spriteruntimeobject.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/CustomRuntimeObject.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/CustomRuntimeObject2D.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/CustomRuntimeObjectInstanceContainer.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/commontools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/runtimescenetools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/inputtools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/networktools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/objecttools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/cameratools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/soundtools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/storagetools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/stringtools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/events-tools/windowtools.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/debugger-client/hot-reloader.js"></script>
|
||||
<script src="../../newIDE/app/resources/GDJS/Runtime/affinetransformation.js"></script>
|
||||
|
||||
<!-- Test extensions -->
|
||||
<script src="./tests/Extensions/MockedResourceLoader.js"></script>
|
||||
<script src="./tests/Extensions/TestRuntimeScene.js"></script>
|
||||
<script src="./tests/Extensions/testruntimebehavior.js"></script>
|
||||
<script src="./tests/Extensions/testruntimeobject.js"></script>
|
||||
<script src="./tests/Extensions/testruntimeobjectwithfakerenderer.js"></script>
|
||||
<script src="./tests/Extensions/testspriteruntimeobject.js"></script>
|
||||
|
||||
<!-- Test helpers -->
|
||||
<script src="../../Extensions/PlatformBehavior/tests/PlatformerTestHelper.js"></script>
|
||||
|
||||
<!-- Test utilities -->
|
||||
<script src="./tests-utils/init.pixiruntimegamewithassets.js"></script>
|
||||
<script src="./tests-utils/init.pixiruntimegame.js"></script>
|
||||
<script src="./tests-utils/MockedCustomObject.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="vitest-ui"></div>
|
||||
</body>
|
||||
</html>
|
@@ -1,199 +0,0 @@
|
||||
module.exports = function (config) {
|
||||
const testFiles = [
|
||||
'./Extensions/**/tests/**.spec.js',
|
||||
'./GDJS/tests/tests/**/*.js',
|
||||
];
|
||||
|
||||
const benchmarkFiles = [
|
||||
'./GDJS/tests/benchmarks/init.js',
|
||||
'./Extensions/**/benchmark/**.benchmark.js',
|
||||
'./GDJS/tests/benchmarks/**/*.js',
|
||||
];
|
||||
|
||||
config.set({
|
||||
frameworks: ['mocha', 'sinon'],
|
||||
browserNoActivityTimeout: 400000,
|
||||
browsers: ['ChromeHeadless', 'EdgeHeadless', 'Chrome', 'Edge', 'Firefox'],
|
||||
plugins: [
|
||||
require('karma-chrome-launcher'),
|
||||
require('@chiragrupani/karma-chromium-edge-launcher'),
|
||||
require('karma-firefox-launcher'),
|
||||
require('karma-mocha'),
|
||||
require('karma-sinon'),
|
||||
],
|
||||
client: {
|
||||
mocha: {
|
||||
reporter: 'html',
|
||||
timeout: 10000, // Give a bit more time for CIs (the default 2s can be too low sometimes, as a real browser is involved).
|
||||
},
|
||||
},
|
||||
basePath: '../..',
|
||||
proxies: {
|
||||
'/base/tests-utils/': '/base/GDJS/tests/tests-utils/',
|
||||
},
|
||||
files: [
|
||||
'./GDJS/tests/node_modules/expect.js/index.js',
|
||||
|
||||
//GDJS game engine files: (Order is important)
|
||||
'./newIDE/app/resources/GDJS/Runtime/libs/jshashtable.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/logger.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/gd.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/AsyncTasksManager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/libs/rbush.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/pixi-renderers/pixi.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/pixi-renderers/three.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/pixi-renderers/*.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/howler-sound-manager/howler.min.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/howler-sound-manager/howler-sound-manager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/fontfaceobserver-font-manager/fontfaceobserver.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/fontfaceobserver-font-manager/fontfaceobserver-font-manager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Model3DManager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/jsonmanager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/ResourceLoader.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/ResourceCache.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/timemanager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/polygon.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/runtimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/RuntimeInstanceContainer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/runtimescene.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/scenestack.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/profiler.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/force.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/RuntimeLayer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/layer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/RuntimeCustomObjectLayer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/timer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/inputmanager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/capturemanager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/runtimegame.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/runtimewatermark.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/variable.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/variablescontainer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/oncetriggers.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/runtimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/SpriteAnimator.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/spriteruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/CustomRuntimeObject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/CustomRuntimeObject2D.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/CustomRuntimeObjectInstanceContainer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/commontools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/runtimescenetools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/inputtools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/networktools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/objecttools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/cameratools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/soundtools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/storagetools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/stringtools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/events-tools/windowtools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/debugger-client/hot-reloader.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/affinetransformation.js',
|
||||
|
||||
//Extensions:
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/DraggableBehavior/draggableruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/AnchorBehavior/anchorruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PlatformBehavior/platformerobjectruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PlatformBehavior/platformruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/LinkedObjects/linkedobjects.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Inventory/inventory.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Inventory/inventorytools.js',
|
||||
{
|
||||
pattern:
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Physics2Behavior/Box2D_v2.3.1_min.wasm.wasm',
|
||||
watched: true,
|
||||
included: false,
|
||||
served: true,
|
||||
nocache: false,
|
||||
},
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Physics2Behavior/Box2D_v2.3.1_min.wasm.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Physics2Behavior/physics2tools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Leaderboards/leaderboardstools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PlayerAuthentication/playerauthenticationtools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PlayerAuthentication/playerauthenticationcomponents.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Multiplayer/messageManager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Multiplayer/multiplayerVariablesManager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Multiplayer/multiplayertools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Multiplayer/multiplayercomponents.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Multiplayer/multiplayerobjectruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Lighting/lightruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Lighting/lightruntimeobject-pixi-renderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Lighting/lightobstacleruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PathfindingBehavior/PathTools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PathfindingBehavior/pathfindingobstacleruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PathfindingBehavior/pathfindingruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/PrimitiveDrawing/shapepainterruntimeobject-pixi-renderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TextInput/textinputruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TextObject/textruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TextObject/textruntimeobject-pixi-renderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/3D/A_RuntimeObject3D.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/3D/A_RuntimeObject3DRenderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/3D/Cube3DRuntimeObject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/3D/Cube3DRuntimeObjectPixiRenderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TopDownMovementBehavior/topdownmovementruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TweenBehavior/TweenManager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TweenBehavior/tweentools.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TweenBehavior/tweenruntimebehavior.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Firebase/A_firebasejs/*.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Firebase/B_firebasetools/*.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Effects/outline-pixi-filter.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Effects/pixi-filters/filter-outline.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Effects/kawase-blur-pixi-filter.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Effects/pixi-filters/filter-kawase-blur.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/tilemapcollisionmaskruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/TileMapRuntimeManager.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/tilemapruntimeobject-pixi-renderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/tilemapruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/collision/TileMapCollisionMaskRenderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/collision/TransformedTileMap.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/helper/TileMapHelper.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/TileMap/pako/dist/pako.min.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Spine/pixi-spine/pixi-spine.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Spine/spineruntimeobject.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Spine/spineruntimeobject-pixi-renderer.js',
|
||||
'./newIDE/app/resources/GDJS/Runtime/Extensions/Spine/managers/*.js',
|
||||
|
||||
// Test extensions:
|
||||
'./GDJS/tests/tests/Extensions/**.js',
|
||||
|
||||
// Other test initialization files:
|
||||
'./GDJS/tests/tests-utils/init.js',
|
||||
'./GDJS/tests/tests-utils/init.pixiruntimegamewithassets.js',
|
||||
'./GDJS/tests/tests-utils/init.pixiruntimegame.js',
|
||||
'./GDJS/tests/tests-utils/MockedCustomObject.js',
|
||||
|
||||
// Test helpers
|
||||
'./Extensions/PlatformBehavior/tests/PlatformerTestHelper.js',
|
||||
|
||||
// Source maps
|
||||
{
|
||||
pattern: './newIDE/app/resources/GDJS/Runtime/**/*.map',
|
||||
watched: false,
|
||||
included: false,
|
||||
served: true,
|
||||
nocache: true,
|
||||
},
|
||||
|
||||
// Assets
|
||||
{
|
||||
pattern: './GDJS/tests/tests-utils/assets/*.jpg',
|
||||
watched: false,
|
||||
included: false,
|
||||
served: true,
|
||||
nocache: false,
|
||||
},
|
||||
{
|
||||
pattern: './GDJS/tests/tests-utils/simple-tiled-map/*.json',
|
||||
watched: false,
|
||||
included: false,
|
||||
served: true,
|
||||
nocache: false,
|
||||
},
|
||||
|
||||
...testFiles,
|
||||
...(config.enableBenchmarks ? benchmarkFiles : []),
|
||||
],
|
||||
});
|
||||
};
|
10974
GDJS/tests/package-lock.json
generated
10974
GDJS/tests/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -5,16 +5,16 @@
|
||||
"main": "index.js",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"test": "karma start --browsers ChromeHeadless --single-run",
|
||||
"test:watch": "karma start --browsers ChromeHeadless",
|
||||
"test-benchmark": "karma start --browsers ChromeHeadless --single-run --enableBenchmarks",
|
||||
"test-benchmark:watch": "karma start --browsers ChromeHeadless --enableBenchmarks",
|
||||
"test:firefox": "karma start --browsers Firefox --single-run",
|
||||
"test:firefox:watch": "karma start --browsers Firefox",
|
||||
"test:chrome": "karma start --browsers Chrome --single-run",
|
||||
"test:chrome:watch": "karma start --browsers Chrome",
|
||||
"test:edge": "karma start --browsers EdgeHeadless --single-run",
|
||||
"test:edge:watch": "karma start --browsers EdgeHeadless"
|
||||
"test": "vitest run --browser.name=chromium --browser.headless",
|
||||
"test:watch": "vitest --browser.name=chromium --browser.headless",
|
||||
"test-benchmark": "vitest run --browser.name=chromium --browser.headless --config=vitest.benchmark.config.js",
|
||||
"test-benchmark:watch": "vitest --browser.name=chromium --browser.headless --config=vitest.benchmark.config.js",
|
||||
"test:firefox": "vitest run --browser.name=firefox --browser.headless",
|
||||
"test:firefox:watch": "vitest --browser.name=firefox --browser.headless",
|
||||
"test:chrome": "vitest run --browser.name=chromium --browser.headless",
|
||||
"test:chrome:watch": "vitest --browser.name=chromium --browser.headless",
|
||||
"test:edge": "vitest run --browser.name=chromium --browser.headless",
|
||||
"test:edge:watch": "vitest --browser.name=chromium --browser.headless"
|
||||
},
|
||||
"keywords": [
|
||||
"HTML5",
|
||||
@@ -26,16 +26,11 @@
|
||||
"author": "Florian Rival",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^1.21.4"
|
||||
"expect.js": "^0.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@chiragrupani/karma-chromium-edge-launcher": "2.1.1",
|
||||
"karma": "^1.7.1",
|
||||
"karma-chrome-launcher": "^2.2.0",
|
||||
"karma-firefox-launcher": "^1.1.0",
|
||||
"karma-mocha": "^1.3.0",
|
||||
"karma-sinon": "^1.0.5",
|
||||
"sinon": "^15.0.1"
|
||||
"@vitest/browser": "^2.1.8",
|
||||
"playwright": "^1.49.1",
|
||||
"vitest": "^2.1.8"
|
||||
}
|
||||
}
|
||||
|
59
GDJS/tests/vitest-setup.js
Normal file
59
GDJS/tests/vitest-setup.js
Normal file
@@ -0,0 +1,59 @@
|
||||
// @ts-check
|
||||
/**
|
||||
* Vitest setup file for GDJS tests.
|
||||
* This replaces the initialization that was done by Karma configuration.
|
||||
*/
|
||||
|
||||
// Import expect.js for compatibility with existing tests
|
||||
import expect from 'expect.js';
|
||||
|
||||
// Make expect available globally for compatibility with existing tests
|
||||
globalThis.expect = expect;
|
||||
window.expect = expect;
|
||||
|
||||
// Make mocha globals available for compatibility
|
||||
globalThis.describe = globalThis.describe || describe;
|
||||
globalThis.it = globalThis.it || it;
|
||||
globalThis.beforeEach = globalThis.beforeEach || beforeEach;
|
||||
globalThis.afterEach = globalThis.afterEach || afterEach;
|
||||
// Vitest doesn't have before/after hooks, so we create them as aliases to beforeEach/afterEach
|
||||
globalThis.before = globalThis.before || beforeEach;
|
||||
globalThis.after = globalThis.after || afterEach;
|
||||
|
||||
// Add performance polyfill if needed
|
||||
if (typeof performance === 'undefined') {
|
||||
globalThis.performance = {
|
||||
now: () => Date.now()
|
||||
};
|
||||
}
|
||||
|
||||
// Create a simple sinon mock for compatibility
|
||||
if (typeof sinon === 'undefined') {
|
||||
globalThis.sinon = {
|
||||
spy: (obj, method) => {
|
||||
const original = obj[method];
|
||||
const spy = function(...args) {
|
||||
spy.callCount++;
|
||||
spy.calledWith = args;
|
||||
return original?.apply(this, args);
|
||||
};
|
||||
spy.callCount = 0;
|
||||
spy.restore = () => { obj[method] = original; };
|
||||
obj[method] = spy;
|
||||
return spy;
|
||||
},
|
||||
stub: (obj, method) => {
|
||||
const original = obj[method];
|
||||
const stub = function(...args) {
|
||||
stub.callCount++;
|
||||
stub.calledWith = args;
|
||||
return stub.returnValue;
|
||||
};
|
||||
stub.callCount = 0;
|
||||
stub.returns = (value) => { stub.returnValue = value; return stub; };
|
||||
stub.restore = () => { obj[method] = original; };
|
||||
obj[method] = stub;
|
||||
return stub;
|
||||
}
|
||||
};
|
||||
}
|
47
GDJS/tests/vitest.benchmark.config.js
Normal file
47
GDJS/tests/vitest.benchmark.config.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import { defineConfig } from 'vitest/config';
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
browser: {
|
||||
enabled: true,
|
||||
name: 'chromium',
|
||||
provider: 'playwright',
|
||||
headless: true,
|
||||
screenshotFailures: false,
|
||||
indexHtmlPath: './index.html',
|
||||
},
|
||||
globals: true,
|
||||
setupFiles: [
|
||||
'./tests-utils/init.js',
|
||||
'./benchmarks/init.js'
|
||||
],
|
||||
include: [
|
||||
'./benchmarks/**/*.js',
|
||||
'../Extensions/**/benchmark/**/*.benchmark.js'
|
||||
],
|
||||
exclude: [
|
||||
'./games/**',
|
||||
'node_modules/**'
|
||||
],
|
||||
timeout: 400000,
|
||||
testTimeout: 400000,
|
||||
hookTimeout: 400000,
|
||||
},
|
||||
esbuild: {
|
||||
target: 'es2017'
|
||||
},
|
||||
define: {
|
||||
global: 'globalThis',
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
// Map expect.js to the actual file
|
||||
'expect.js': new URL('./node_modules/expect.js/index.js', import.meta.url).pathname,
|
||||
}
|
||||
},
|
||||
server: {
|
||||
fs: {
|
||||
allow: ['../..'] // Allow access to parent directories for GDJS files and Extensions
|
||||
}
|
||||
}
|
||||
});
|
51
GDJS/tests/vitest.config.js
Normal file
51
GDJS/tests/vitest.config.js
Normal file
@@ -0,0 +1,51 @@
|
||||
import { defineConfig } from 'vitest/config';
|
||||
import { resolve } from 'path';
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
browser: {
|
||||
enabled: true,
|
||||
name: 'chromium',
|
||||
provider: 'playwright',
|
||||
headless: true,
|
||||
screenshotFailures: false,
|
||||
indexHtmlPath: './index.html',
|
||||
},
|
||||
globals: true,
|
||||
setupFiles: [
|
||||
'./vitest-setup.js',
|
||||
'./tests-utils/init.js'
|
||||
],
|
||||
include: [
|
||||
'./tests/**/*.js',
|
||||
'./tests/**/*.spec.js'
|
||||
],
|
||||
exclude: [
|
||||
'./games/**',
|
||||
'node_modules/**',
|
||||
'vitest.config.js',
|
||||
'vitest.benchmark.config.js',
|
||||
'vitest-setup.js'
|
||||
],
|
||||
timeout: 10000,
|
||||
testTimeout: 10000,
|
||||
hookTimeout: 10000,
|
||||
},
|
||||
esbuild: {
|
||||
target: 'es2017'
|
||||
},
|
||||
define: {
|
||||
global: 'globalThis',
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
// Map expect.js to the actual file
|
||||
'expect.js': resolve('./node_modules/expect.js/index.js'),
|
||||
}
|
||||
},
|
||||
server: {
|
||||
fs: {
|
||||
allow: ['../..', '.'] // Allow access to parent directories for GDJS files
|
||||
}
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user