Files
blockly/tests/mocha/field_registry_test.js
Christopher Allen ce22f42868 chore: Organise imports (#8527)
* chore(deps): Add pretter-plugin-organize-imports

* chore: Remove insignificant blank lines in import sections

  Since prettier-plugin-organize-imports sorts imports within
  sections separated by blank lines, but preserves the section
  divisions, remove any blank lines that are not dividing imports
  into meaningful sections.

  Do not remove blank lines separating side-effect-only imports
  from main imports.

* chore: Remove unneded eslint-disable directives

* chore: Organise imports
2024-08-15 03:16:14 +01:00

116 lines
3.3 KiB
JavaScript

/**
* @license
* Copyright 2019 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import * as Blockly from '../../build/src/core/blockly.js';
import {assert} from '../../node_modules/chai/chai.js';
import {
sharedTestSetup,
sharedTestTeardown,
} from './test_helpers/setup_teardown.js';
suite('Field Registry', function () {
class CustomFieldType extends Blockly.Field {
constructor(value) {
super(value);
}
static fromJson(options) {
return new CustomFieldType(options['value']);
}
}
setup(function () {
sharedTestSetup.call(this);
});
teardown(function () {
sharedTestTeardown.call(this);
if (Blockly.registry.TEST_ONLY.typeMap['field']['field_custom_test']) {
delete Blockly.registry.TEST_ONLY.typeMap['field']['field_custom_test'];
}
});
suite('Registration', function () {
test('Simple', function () {
Blockly.fieldRegistry.register('field_custom_test', CustomFieldType);
});
test('fromJson as Key', function () {
assert.throws(function () {
Blockly.fieldRegistry.register(CustomFieldType.fromJson, '');
}, 'Invalid name');
});
test('No fromJson', function () {
class IncorrectField {}
assert.throws(function () {
Blockly.fieldRegistry.register('field_custom_test', IncorrectField);
}, 'must have a fromJson function');
});
test('fromJson not a function', function () {
const fromJson = CustomFieldType.fromJson;
CustomFieldType.fromJson = true;
assert.throws(function () {
Blockly.fieldRegistry.register('field_custom_test', CustomFieldType);
}, 'must have a fromJson function');
CustomFieldType.fromJson = fromJson;
});
});
suite('Retrieval', function () {
test('Simple', function () {
Blockly.fieldRegistry.register('field_custom_test', CustomFieldType);
const json = {
type: 'field_custom_test',
value: 'ok',
};
const field = Blockly.fieldRegistry.fromJson(json);
assert.isNotNull(field);
assert.equal(field.getValue(), 'ok');
});
test('Not Registered', function () {
const json = {
type: 'field_custom_test',
value: 'ok',
};
const spy = sinon.stub(console, 'warn');
const field = Blockly.fieldRegistry.fromJson(json);
assert.isNull(field);
assert.isTrue(spy.called);
spy.restore();
});
test('Case Different', function () {
Blockly.fieldRegistry.register('field_custom_test', CustomFieldType);
const json = {
type: 'FIELD_CUSTOM_TEST',
value: 'ok',
};
const field = Blockly.fieldRegistry.fromJson(json);
assert.isNotNull(field);
assert.equal(field.getValue(), 'ok');
});
test('Did not override fromJson', function () {
// This class will have a fromJson method, so it can be registered
// but it doesn't override the abstract class's method so it throws
class IncorrectField extends Blockly.Field {}
Blockly.fieldRegistry.register('field_custom_test', IncorrectField);
const json = {
type: 'field_custom_test',
value: 'ok',
};
assert.throws(function () {
Blockly.fieldRegistry.fromJson(json);
}, 'Attempted to instantiate a field from the registry');
});
});
});