Skip to content

Commit

Permalink
Add tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
D8H committed Nov 24, 2023
1 parent c3580fd commit 79cd327
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 7 deletions.
7 changes: 5 additions & 2 deletions GDJS/tests/tests/Extensions/TestRuntimeScene.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
*/
gdjs.TestRuntimeScene = class TestRuntimeScene extends gdjs.RuntimeScene {
/**
* @param {gdjs.RuntimeGame} runtimeGame
* @param {gdjs.RuntimeGame} runtimeGame
*/
constructor(runtimeGame) {
constructor(runtimeGame, layerNames = ['']) {
super(runtimeGame);

this.addLayer({ name: '', cameras: [], effects: [] });
for (const layerName of layerNames) {
this.addLayer({ name: layerName, cameras: [], effects: [] });
}
}

/**
Expand Down
32 changes: 27 additions & 5 deletions GDJS/tests/tests/Extensions/testspriteruntimeobject.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,33 @@
/** @type {?float} */
_customCenterY = null;

constructor(runtimeScene, objectData) {
constructor(runtimeScene, objectData = {
name: 'MySprite',
type: '',
behaviors: [],
effects: [],
animations: [
{
name: 'animation',
directions: [
{
sprites: [
{
originPoint: { x: 0, y: 0 },
centerPoint: { x: 0, y: 0 },
points: [
{ name: 'Center', x: 0, y: 0 },
{ name: 'Origin', x: 0, y: 0 },
],
hasCustomCollisionMask: false,
customCollisionMask: null,
},
],
},
],
},
],
}) {
// *ALWAYS* call the base gdjs.RuntimeObject constructor.
super(runtimeScene, objectData);

Expand Down Expand Up @@ -50,10 +76,6 @@
this.invalidateHitboxes();
}

getRendererObject() {
return null;
}

getWidth() {
return this._customWidth;
}
Expand Down
97 changes: 97 additions & 0 deletions GDJS/tests/tests/runtimescene.culling.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// @ts-check
describe('gdjs.RuntimeScene culling tests', () => {

it('should hide objects moving outside of the screen', () => {
const game = gdjs.getPixiRuntimeGame();
const scene = new gdjs.TestRuntimeScene(game, ['', 'MyLayer']);

scene.getLayer('MyLayer').setCameraX(8000);

const object = new gdjs.TestSpriteRuntimeObject(scene);
object.setUnscaledWidthAndHeight(100, 100);
object.setCustomWidthAndHeight(100, 100);
scene.addObject(object);

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(true);

object.setY(8000);

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(false);
});

it('should show objects moving back in the screen', () => {
const game = gdjs.getPixiRuntimeGame();
const scene = new gdjs.TestRuntimeScene(game, ['']);

const object = new gdjs.TestSpriteRuntimeObject(scene);
object.setUnscaledWidthAndHeight(100, 100);
object.setCustomWidthAndHeight(100, 100);
scene.addObject(object);
object.setY(8000);

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(false);

object.setY(200);

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(true);
});

it('should handle objects changing of layer', () => {
const game = gdjs.getPixiRuntimeGame();
const scene = new gdjs.TestRuntimeScene(game, ['']);

const object = new gdjs.TestSpriteRuntimeObject(scene);
object.setUnscaledWidthAndHeight(100, 100);
object.setCustomWidthAndHeight(100, 100);
scene.addObject(object);

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(true);

object.setLayer('MyLayer');

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(false);
});

it('should allow objects to sleep at the end of the 1st frame', () => {
const game = gdjs.getPixiRuntimeGame();
const scene = new gdjs.TestRuntimeScene(game, ['']);

const object = new gdjs.TestSpriteRuntimeObject(scene);
object.setUnscaledWidthAndHeight(100, 100);
object.setCustomWidthAndHeight(100, 100);
scene.addObject(object);

scene.renderAndStep(1000 / 60);
expect(object.getRendererObject().visible).to.be(true);
expect(object.getSpatialSearchSleepState().isAwake()).to.be(false);

object.setY(200);
expect(object.getSpatialSearchSleepState().isAwake()).to.be(true);
});

it('should put objects to sleep when they don\'t move for 2 seconds', () => {
const game = gdjs.getPixiRuntimeGame();
const scene = new gdjs.TestRuntimeScene(game, ['']);

const object = new gdjs.TestSpriteRuntimeObject(scene);
object.setUnscaledWidthAndHeight(100, 100);
object.setCustomWidthAndHeight(100, 100);
scene.addObject(object);

scene.renderAndStep(1000 / 60);
object.setY(200);
expect(object.getSpatialSearchSleepState().isAwake()).to.be(true);

for (let index = 0; index < 60 + 64; index++) {
scene.renderAndStep(1000 / 60);
}
expect(object.getSpatialSearchSleepState().isAwake()).to.be(false);
expect(object.getRendererObject().visible).to.be(true);
});
});

0 comments on commit 79cd327

Please sign in to comment.