From 630863d9db64a129371f23755be649e2b0bd015e Mon Sep 17 00:00:00 2001 From: Rachel Fenichel Date: Mon, 6 Feb 2017 14:47:45 -0800 Subject: [PATCH] Add isEditable to field, and add tests --- core/field.js | 11 ++++++ tests/jsunit/field_test.js | 77 ++++++++++++++++++++++++++++++++++++++ tests/jsunit/index.html | 1 + 3 files changed, 89 insertions(+) create mode 100644 tests/jsunit/field_test.js diff --git a/core/field.js b/core/field.js index d89c9c779..7558718be 100644 --- a/core/field.js +++ b/core/field.js @@ -194,6 +194,17 @@ Blockly.Field.prototype.updateEditable = function() { } }; +/** + * Check whether this field is currently editable. Some fields are never + * editable (e.g. text labels). Those fields are not serialized to XML. Other + * fields may be editable, and therefore serialized, but may exist on + * non-editable blocks. + * @return {boolean} whether this field is editable and on an editable block + */ +Blockly.Field.prototype.isEditable = function() { + return this.EDITABLE && !!this.sourceBlock_ && this.sourceBlock_.isEditable(); +}; + /** * Gets whether this editable field is visible or not. * @return {boolean} True if visible. diff --git a/tests/jsunit/field_test.js b/tests/jsunit/field_test.js new file mode 100644 index 000000000..2af26d60d --- /dev/null +++ b/tests/jsunit/field_test.js @@ -0,0 +1,77 @@ +/** + * @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() { + 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.isEditable()); + + // Setting EDITABLE to false doesn't matter. + field = new Blockly.Field("Dummy text"); + field.EDITABLE = false; + assertFalse('Field without a block is not editable', field.isEditable()); + + // Tests with an editable source block. + var editableBlock = { + isEditable: function() { + return true; + } + }; + + field = new Blockly.Field("Dummy text"); + field.sourceBlock_ = editableBlock; + + assertTrue('Editable field with editable block is editable', + field.isEditable()); + + field = new Blockly.Field("Dummy text"); + field.sourceBlock_ = editableBlock; + field.EDITABLE = false; + + assertFalse('Non-editable field with editable block is not editable', + field.isEditable()); + + // Tests with a non-editable source block. + var nonEditableBlock = { + isEditable: function() { + return false; + } + }; + + field = new Blockly.Field("Dummy text"); + field.sourceBlock_ = nonEditableBlock; + + assertFalse('Editable field with non-editable block is not editable', + field.isEditable()); + + field = new Blockly.Field("Dummy text"); + field.sourceBlock_ = nonEditableBlock; + field.EDITABLE = false; + + assertFalse('Non-editable field with non-editable block is not editable', + field.isEditable()); +} diff --git a/tests/jsunit/index.html b/tests/jsunit/index.html index 71623d384..c24a395ee 100644 --- a/tests/jsunit/index.html +++ b/tests/jsunit/index.html @@ -11,6 +11,7 @@ +