From 16c59d2ffc2bf9a092952d5f8f456f7e4844dce1 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Thu, 8 Aug 2019 15:48:28 -0700 Subject: [PATCH] Added tests and remove jsunit fields test file. --- core/utils/field.js | 3 +- tests/jsunit/field_test.js | 126 ------------------------------- tests/jsunit/index.html | 1 - tests/mocha/index.html | 1 + tests/mocha/utils_field_test.js | 127 ++++++++++++++++++++++++++++++++ 5 files changed, 130 insertions(+), 128 deletions(-) delete mode 100644 tests/jsunit/field_test.js create mode 100644 tests/mocha/utils_field_test.js diff --git a/core/utils/field.js b/core/utils/field.js index 2b95cf2f8..531fad10c 100644 --- a/core/utils/field.js +++ b/core/utils/field.js @@ -53,7 +53,8 @@ Blockly.utils.fields.typeMap_ = {}; */ Blockly.utils.fields.register = function(type, fieldClass) { if ((typeof type != 'string') || (type.trim() == '')) { - throw Error('Invalid field type "' + type + '"'); + throw Error('Invalid field type "' + type + '". The type must be a' + + ' non-empty string.'); } if (!fieldClass || (typeof fieldClass.fromJson != 'function')) { throw Error('Field "' + fieldClass + '" must have a fromJson function'); diff --git a/tests/jsunit/field_test.js b/tests/jsunit/field_test.js deleted file mode 100644 index 2da04834d..000000000 --- a/tests/jsunit/field_test.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * @license - * Visual Blocks Editor - * - * Copyright 2017 Google Inc. - * https://developers.google.com/blockly/ - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - /** - * @fileoverview Tests for Blockly.Field - * @author fenichel@google.com (Rachel Fenichel) - */ -'use strict'; - -function test_field_isEditable_simple() { - var field = new Blockly.Field("Dummy text"); - // EDITABLE is true by default, but without a source block a field can't be - // edited. - assertFalse('Field without a block is not editable', - field.isCurrentlyEditable()); -} - -function test_field_isEditable_false() { - // Setting EDITABLE to false doesn't matter. - var field = new Blockly.Field("Dummy text"); - field.EDITABLE = false; - assertFalse('Field without a block is not editable', - field.isCurrentlyEditable()); -} - -function test_field_isEditable_editableBlock() { - var editableBlock = { - isEditable: function() { - return true; - } - }; - - var field = new Blockly.Field("Dummy text"); - field.sourceBlock_ = editableBlock; - - assertTrue('Editable field with editable block is editable', - field.isCurrentlyEditable()); -} - -function test_field_isEditable_editableBlock_false() { - var editableBlock = { - isEditable: function() { - return true; - } - }; - - var field = new Blockly.Field("Dummy text"); - field.sourceBlock_ = editableBlock; - field.EDITABLE = false; - - assertFalse('Non-editable field with editable block is not editable', - field.isCurrentlyEditable()); -} - -function test_field_isEditable_nonEditableBlock() { - var nonEditableBlock = { - isEditable: function() { - return false; - } - }; - - var field = new Blockly.Field("Dummy text"); - field.sourceBlock_ = nonEditableBlock; - - assertFalse('Editable field with non-editable block is not editable', - field.isCurrentlyEditable()); -} - -function test_field_isEditable_nonEditableBlock_false() { - var nonEditableBlock = { - isEditable: function() { - return false; - } - }; - - var field = new Blockly.Field("Dummy text"); - field.sourceBlock_ = nonEditableBlock; - field.EDITABLE = false; - - assertFalse('Non-editable field with non-editable block is not editable', - field.isCurrentlyEditable()); -} - -function test_field_register_with_custom_field() { - var CustomFieldType = function(value) { - CustomFieldType.superClass_.constructor.call(this, value); - }; - goog.inherits(CustomFieldType, Blockly.Field); - - CustomFieldType.fromJson = function(options) { - return new CustomFieldType(options['value']); - }; - - var json = { - type: 'field_custom_test', - value: 'ok' - }; - - // before registering - var field = Blockly.Field.fromJson(json); - assertNull(field); - - Blockly.Field.register('field_custom_test', CustomFieldType); - - // after registering - field = Blockly.Field.fromJson(json); - assertNotNull(field); - assertEquals(field.getValue(), 'ok'); -} diff --git a/tests/jsunit/index.html b/tests/jsunit/index.html index 038d20faf..3cf5307f9 100644 --- a/tests/jsunit/index.html +++ b/tests/jsunit/index.html @@ -18,7 +18,6 @@ - diff --git a/tests/mocha/index.html b/tests/mocha/index.html index 736f577ae..26a5ce34d 100644 --- a/tests/mocha/index.html +++ b/tests/mocha/index.html @@ -48,6 +48,7 @@ +
diff --git a/tests/mocha/utils_field_test.js b/tests/mocha/utils_field_test.js new file mode 100644 index 000000000..367ee7579 --- /dev/null +++ b/tests/mocha/utils_field_test.js @@ -0,0 +1,127 @@ +/** + * @license + * Visual Blocks Editor + * + * Copyright 2019 Google Inc. + * https://developers.google.com/blockly/ + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @fileoverview Tests for Blockly.utils.fields + * @author bekawestberg@gmail.com (Beka WEstberg) + */ +'use strict'; + +suite('Field Utils', function() { + function CustomFieldType(value) { + CustomFieldType.superClass_.constructor.call(this, value); + } + goog.inherits(CustomFieldType, Blockly.Field); + CustomFieldType.fromJson = function(options) { + return new CustomFieldType(options['value']); + }; + + teardown(function() { + if (Blockly.utils.fields.typeMap_['field_custom_test']) { + delete Blockly.utils.fields.typeMap_['field_custom_test']; + } + }); + suite('Registration', function() { + test('Simple', function() { + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + }); + test('Empty String Key', function() { + chai.assert.throws(function() { + Blockly.utils.fields.register('', CustomFieldType); + }.bind(this), 'Invalid field type'); + }); + test('Class as Key', function() { + chai.assert.throws(function() { + Blockly.utils.fields.register(CustomFieldType, ''); + }.bind(this), 'Invalid field type'); + }); + test('fromJson as Key', function() { + chai.assert.throws(function() { + Blockly.utils.fields.register(CustomFieldType.fromJson, ''); + }.bind(this), 'Invalid field type'); + }); + // TODO (#2788): What do you want it to do if you overwrite a key? + test('Overwrite a Key', function() { + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + }); + test('Null Value', function() { + chai.assert.throws(function() { + Blockly.utils.fields.register('field_custom_test', null); + }.bind(this), 'fromJson function'); + }); + test('No fromJson', function() { + var fromJson = CustomFieldType.fromJson; + delete CustomFieldType.fromJson; + chai.assert.throws(function() { + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + }.bind(this), 'fromJson function'); + CustomFieldType.fromJson = fromJson; + }); + test('fromJson not a function', function() { + var fromJson = CustomFieldType.fromJson; + CustomFieldType.fromJson = true; + chai.assert.throws(function() { + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + }.bind(this), 'fromJson function'); + CustomFieldType.fromJson = fromJson; + }); + }); + suite('Retrieval', function() { + test('Simple', function() { + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + + var json = { + type: 'field_custom_test', + value: 'ok' + }; + + var field = Blockly.utils.fields.fromJson(json); + chai.assert.isNotNull(field); + chai.assert.equal('ok', field.getValue()); + }); + test('Not Registered', function() { + var json = { + type: 'field_custom_test', + value: 'ok' + }; + + var spy = sinon.stub(console, 'warn'); + var field = Blockly.utils.fields.fromJson(json); + chai.assert.isNull(field); + chai.assert.isTrue(spy.called); + spy.restore(); + }); + // TODO: Is this supposed to be case sensitive? + test.skip('Case Different', function() { + Blockly.utils.fields.register('field_custom_test', CustomFieldType); + + var json = { + type: 'FIELD_CUSTOM_TEST', + value: 'ok' + }; + + var field = Blockly.utils.fields.fromJson(json); + chai.assert.isNotNull(field); + chai.assert.equal('ok', field.getValue()); + }); + }); +});