mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-21 09:35:27 -04:00
e5d77da357
- Don't show in changelog
255 lines
7.4 KiB
JavaScript
255 lines
7.4 KiB
JavaScript
const initializeGDevelopJs = require('../../Binaries/embuild/GDevelop.js/libGD.js');
|
|
const { makeMinimalGDJSMock } = require('../TestUtils/GDJSMocks.js');
|
|
const {
|
|
generateCompiledEventsForLayout,
|
|
} = require('../TestUtils/CodeGenerationHelpers.js');
|
|
|
|
describe('libGD.js - GDJS Code Generation integration tests', function () {
|
|
let gd = null;
|
|
beforeAll(async () => {
|
|
gd = await initializeGDevelopJs();
|
|
});
|
|
|
|
let project = null;
|
|
let scene = null;
|
|
let object = null;
|
|
beforeEach(() => {
|
|
project = new gd.ProjectHelper.createNewGDJSProject();
|
|
scene = project.insertNewLayout('Scene', 0);
|
|
object = scene
|
|
.getObjects()
|
|
.insertNewObject(project, 'Sprite', 'MyObject', 0);
|
|
const instance = scene.getInitialInstances().insertNewInitialInstance();
|
|
instance.setObjectName('MyObject');
|
|
});
|
|
afterEach(() => {
|
|
project.delete();
|
|
});
|
|
|
|
const generateAndRunActionsForLayout = (actions, logCode = false) => {
|
|
return generateAndRunEventsForLayout(
|
|
[
|
|
{
|
|
type: 'BuiltinCommonInstructions::Standard',
|
|
conditions: [],
|
|
actions,
|
|
events: [],
|
|
},
|
|
],
|
|
logCode
|
|
);
|
|
};
|
|
|
|
const generateAndRunVariableAffectationWithConditions = (
|
|
conditions,
|
|
logCode = false
|
|
) => {
|
|
scene.getVariables().insertNew('SuccessVariable', 0).setValue(0);
|
|
return generateAndRunEventsForLayout(
|
|
[
|
|
{
|
|
type: 'BuiltinCommonInstructions::Standard',
|
|
conditions,
|
|
actions: [
|
|
{
|
|
type: { value: 'SetNumberVariable' },
|
|
parameters: ['SuccessVariable', '=', '1'],
|
|
},
|
|
],
|
|
events: [],
|
|
},
|
|
],
|
|
logCode
|
|
);
|
|
};
|
|
|
|
const generateAndRunEventsForLayout = (events, logCode = false) => {
|
|
const serializedProjectElement = new gd.SerializerElement();
|
|
project.serializeTo(serializedProjectElement);
|
|
|
|
const serializedSceneElement = new gd.SerializerElement();
|
|
scene.serializeTo(serializedSceneElement);
|
|
|
|
const serializedLayoutEvents = gd.Serializer.fromJSObject(events);
|
|
scene.getEvents().unserializeFrom(project, serializedLayoutEvents);
|
|
|
|
const runCompiledEvents = generateCompiledEventsForLayout(
|
|
gd,
|
|
project,
|
|
scene,
|
|
logCode
|
|
);
|
|
|
|
const { gdjs, runtimeScene } = makeMinimalGDJSMock({
|
|
gameData: JSON.parse(gd.Serializer.toJSON(serializedProjectElement)),
|
|
sceneData: JSON.parse(gd.Serializer.toJSON(serializedSceneElement)),
|
|
});
|
|
serializedProjectElement.delete();
|
|
serializedSceneElement.delete();
|
|
|
|
runCompiledEvents(gdjs, runtimeScene, []);
|
|
return runtimeScene;
|
|
};
|
|
|
|
it('can generate a number variable action', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setValue(0);
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'SetNumberObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', '=', '123'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getAsNumber()
|
|
).toBe(123);
|
|
});
|
|
|
|
it('can generate a string variable action', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setString('');
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'SetStringObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', '=', '"Hello"'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getAsString()
|
|
).toBe('Hello');
|
|
});
|
|
|
|
it('can generate a boolean variable action', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setBool(false);
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'SetBooleanObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', 'True'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getAsBoolean()
|
|
).toBe(true);
|
|
});
|
|
|
|
it('can generate a boolean variable toggle', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setBool(false);
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'SetBooleanObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', 'Toggle'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getAsBoolean()
|
|
).toBe(true);
|
|
});
|
|
|
|
it('can generate a push number variable action', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).castTo('Array');
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'PushNumberToObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', '123'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getChild('0')
|
|
.getAsNumber()
|
|
).toBe(123);
|
|
});
|
|
|
|
it('can generate a push string variable action', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).castTo('Array');
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'PushStringToObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', '"Hello"'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getChild('0')
|
|
.getAsString()
|
|
).toBe("Hello");
|
|
});
|
|
|
|
it('can generate a push boolean variable action', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).castTo('Array');
|
|
const runtimeScene = generateAndRunActionsForLayout([
|
|
{
|
|
type: { value: 'PushBooleanToObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', 'True'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene
|
|
.getObjects('MyObject')[0]
|
|
.getVariables()
|
|
.get('MyVariable')
|
|
.getChild('0')
|
|
.getAsBoolean()
|
|
).toBe(true);
|
|
});
|
|
|
|
it('can generate a number variable condition that is true', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setValue(123);
|
|
const runtimeScene = generateAndRunVariableAffectationWithConditions([
|
|
{
|
|
type: { inverted: false, value: 'NumberObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', '=', '123'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene.getVariables().get('SuccessVariable').getAsNumber()
|
|
).toBe(1);
|
|
});
|
|
|
|
it('can generate a boolean variable condition that is true', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setBool(true);
|
|
const runtimeScene = generateAndRunVariableAffectationWithConditions([
|
|
{
|
|
type: { inverted: false, value: 'BooleanObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene.getVariables().get('SuccessVariable').getAsNumber()
|
|
).toBe(1);
|
|
});
|
|
|
|
it('can generate a string variable condition that is true', function () {
|
|
object.getVariables().insertNew('MyVariable', 0).setString('Same value');
|
|
const runtimeScene = generateAndRunVariableAffectationWithConditions([
|
|
{
|
|
type: { inverted: false, value: 'StringObjectVariable' },
|
|
parameters: ['MyObject', 'MyVariable', '=', '"Same value"'],
|
|
},
|
|
]);
|
|
expect(
|
|
runtimeScene.getVariables().get('SuccessVariable').getAsNumber()
|
|
).toBe(1);
|
|
});
|
|
});
|