Files

345 lines
10 KiB
JavaScript

// Note: there are also test extensions for the IDE (for the Storybook and for the IDE tests).
// Search for "TestExtensions.js" in the codebase.
module.exports = {
/**
* Create dummy extensions into gd.JsPlatform
* @param gd The GD instance to use to create the extensions and find the platform.
*/
makeTestExtensions: (gd) => {
const platform = gd.JsPlatform.get();
const declareFakeAdmod = () => {
const extension = new gd.PlatformExtension();
extension
.setExtensionInformation(
'AdMob',
'AdMob',
'Some fake extension mimicking the AdMob extension',
'Florian Rival',
'MIT'
)
.setExtensionHelpPath('/all-features/admob');
extension
.registerProperty('AdMobAppIdAndroid')
.setLabel('AdMob Android App ID')
.setDescription('ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY')
.setType('string');
extension
.registerProperty('AdMobAppIdIos')
.setLabel('AdMob iOS App ID')
.setDescription('ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY')
.setType('string');
extension
.addDependency()
.setName('AdMob Cordova plugin')
.setDependencyType('cordova')
.setExportName('gdevelop-cordova-admob-plus')
.setVersion('0.43.0')
.setExtraSetting(
'APP_ID_ANDROID',
new gd.PropertyDescriptor('AdMobAppIdAndroid').setType(
'ExtensionProperty'
)
)
.setExtraSetting(
'APP_ID_IOS',
new gd.PropertyDescriptor('AdMobAppIdIos').setType(
'ExtensionProperty'
)
)
.onlyIfSomeExtraSettingsNonEmpty();
extension
.addAction(
'ShowInterstitial',
'Show interstitial',
'Fake action that would show an interstitial screen.',
'Show the loaded interstitial',
'AdMob',
'JsPlatform/Extensions/admobicon24.png',
'JsPlatform/Extensions/admobicon16.png'
)
.getCodeExtraInformation()
.setIncludeFile('Extensions/FakeAdMob/admobtools.js')
.setFunctionName('gdjs.fakeAdMob.showInterstitial');
platform.addNewExtension(extension);
extension.delete(); // Release the extension as it was copied inside gd.JsPlatform
};
declareFakeAdmod();
const declareFakeObjectWithUnsupportedCapability = () => {
const extension = new gd.PlatformExtension();
extension.setExtensionInformation(
'FakeObjectWithUnsupportedCapability',
'Fake object not supporting the "effect" capability',
'Fake object not supporting the "effect" capability',
'',
'MIT'
);
const fakeObject = new gd.ObjectJsImplementation();
fakeObject.updateProperty = function (
propertyName,
newValue
) {
return false;
};
fakeObject.getProperties = function () {
const objectProperties = new gd.MapStringPropertyDescriptor();
const objectContent = this.content;
objectProperties
.getOrCreate('text')
.setValue(objectContent.text)
.setType('multilinestring')
.setLabel('Text');
return objectProperties;
};
fakeObject.content = {
text: 'Some text.',
};
fakeObject.updateInitialInstanceProperty = function (
instance,
propertyName,
newValue
) {
return false;
};
fakeObject.getInitialInstanceProperties = function (
instance
) {
var instanceProperties = new gd.MapStringPropertyDescriptor();
return instanceProperties;
};
platform.addNewExtension(extension);
extension.delete(); // Release the extension as it was copied inside gd.JsPlatform
};
declareFakeObjectWithUnsupportedCapability();
const declareFakeObjectWithAsyncAction = () => {
const extension = new gd.PlatformExtension();
extension.setExtensionInformation(
'FakeObjectWithAsyncAction',
'Fake object with an async action',
'Fake object with an async action',
'',
'MIT'
);
const fakeObject = new gd.ObjectJsImplementation();
fakeObject.updateProperty = function (
propertyName,
newValue
) {
return false;
};
fakeObject.getProperties = function () {
const objectProperties = new gd.MapStringPropertyDescriptor();
return objectProperties;
};
fakeObject.content = {};
fakeObject.updateInitialInstanceProperty = function (
instance,
propertyName,
newValue
) {
return false;
};
fakeObject.getInitialInstanceProperties = function (
instance
) {
var instanceProperties = new gd.MapStringPropertyDescriptor();
return instanceProperties;
};
const object = extension.addObject(
'FakeObjectWithAsyncAction',
'FakeObjectWithAsyncAction',
'This is FakeObjectWithAsyncAction',
'',
fakeObject
);
object
.addScopedAction(
'DoAsyncAction',
'Some async action',
'Some async action.',
'Do some async action with _PARAM0_',
'',
'res/icon.png',
'res/icon.png'
)
.addParameter('object', 'Object', 'FakeObjectWithAsyncAction', false)
.getCodeExtraInformation()
.setAsyncFunctionName('doFakeAsyncAction');
object
.addScopedAction(
'DoOptionallyAsyncAction',
'Some optionally async action',
'Some optionally async action.',
'Do some optionally async action with _PARAM0_',
'',
'res/icon.png',
'res/icon.png'
)
.addParameter('object', 'Object', 'FakeObjectWithAsyncAction', false)
.getCodeExtraInformation()
.setFunctionName('noop')
.setAsyncFunctionName('doFakeAsyncAction');
platform.addNewExtension(extension);
extension.delete(); // Release the extension as it was copied inside gd.JsPlatform
};
declareFakeObjectWithAsyncAction();
const declareFakeOptionallyAsyncAction = () => {
const extension = new gd.PlatformExtension();
extension.setExtensionInformation(
'FakeOptionallyAsyncAction',
'Fake optionally async action',
'Fake optionally async action',
'',
'MIT'
);
extension
.addAction(
'DoOptionallyAsyncAction',
'Some optionally async action',
'Some optionally async action.',
'Optionally async action with _PARAM0_',
'',
'res/icon.png',
'res/icon.png'
)
.addParameter('expression', 'Wait time', '', false)
.getCodeExtraInformation()
.setFunctionName('gdjs.evtTools.runtimeScene.noop')
.setAsyncFunctionName('gdjs.evtTools.runtimeScene.wait');
platform.addNewExtension(extension);
extension.delete(); // Release the extension as it was copied inside gd.JsPlatform
};
declareFakeOptionallyAsyncAction();
const declareFakeBehaviorWithSharedData = () => {
const extension = new gd.PlatformExtension();
extension.setExtensionInformation(
'FakeBehaviorWithSharedData',
'Fake behavior with shared data',
'Fake behavior with shared data',
'',
'MIT'
);
// Declare a behavior with shared data between the behaviors
// In addition to the usual behavior:
// Create a new gd.BehaviorSharedDataJsImplementation object and implement the methods
// that are called to get and set the properties of the shared data.
const dummyBehaviorWithSharedData = new gd.BehaviorJsImplementation();
// $FlowExpectedError - ignore Flow warning as we're creating a behavior
dummyBehaviorWithSharedData.updateProperty = function (
behaviorContent,
propertyName,
newValue
) {
if (propertyName === 'MyBehaviorProperty') {
behaviorContent.setStringAttribute('MyBehaviorProperty', newValue);
return true;
}
return false;
};
dummyBehaviorWithSharedData.getProperties = function (behaviorContent) {
const behaviorProperties = new gd.MapStringPropertyDescriptor();
behaviorProperties
.getOrCreate('MyBehaviorProperty')
.setValue(behaviorContent.getStringAttribute('MyBehaviorProperty'));
return behaviorProperties;
};
dummyBehaviorWithSharedData.initializeContent = function (
behaviorContent
) {
behaviorContent.setStringAttribute(
'MyBehaviorProperty',
'Initial value 1'
);
};
const sharedData = new gd.BehaviorSharedDataJsImplementation();
sharedData.updateProperty = function (
sharedContent,
propertyName,
newValue
) {
if (propertyName === 'MySharedProperty') {
sharedContent.setStringAttribute('MySharedProperty', newValue);
return true;
}
return false;
};
sharedData.getProperties = function (sharedContent) {
const sharedProperties = new gd.MapStringPropertyDescriptor();
sharedProperties
.getOrCreate('MySharedProperty')
.setValue(sharedContent.getStringAttribute('MySharedProperty'));
return sharedProperties;
};
sharedData.initializeContent = function (behaviorContent) {
behaviorContent.setStringAttribute(
'MySharedProperty',
'Initial shared value 1'
);
};
extension
.addBehavior(
'DummyBehaviorWithSharedData',
'Dummy behavior with shared data for testing',
'DummyBehaviorWithSharedData',
'Do nothing but use shared data.',
'',
'CppPlatform/Extensions/topdownmovementicon.png',
'DummyBehaviorWithSharedData',
dummyBehaviorWithSharedData,
sharedData
)
.setIncludeFile(
'Extensions/ExampleJsExtension/dummywithshareddataruntimebehavior.js'
)
// You can optionally include more than one file when the behavior is used:
.addIncludeFile(
'Extensions/ExampleJsExtension/examplejsextensiontools.js'
);
platform.addNewExtension(extension);
extension.delete(); // Release the extension as it was copied inside gd.JsPlatform
};
declareFakeBehaviorWithSharedData();
},
};