From 06c6d8335507c05d187919251a9c114e9b3e5485 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Fri, 24 May 2019 16:13:21 -0700 Subject: [PATCH] Changed colour field class validator to accept all documented values. --- core/field_colour.js | 8 +++- tests/mocha/field_colour_test.js | 66 ++++++++++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/core/field_colour.js b/core/field_colour.js index f9be4933b..e92328bb2 100644 --- a/core/field_colour.js +++ b/core/field_colour.js @@ -32,6 +32,7 @@ goog.require('Blockly.Events.BlockChange'); goog.require('Blockly.Field'); goog.require('goog.math.Size'); +goog.require('goog.color'); /** @@ -176,8 +177,11 @@ Blockly.FieldColour.prototype.render_ = function() { * @protected */ Blockly.FieldColour.prototype.doClassValidation_ = function(newValue) { - if (Blockly.FieldColour.COLOUR_REGEX.test(newValue)) { - return newValue.toLowerCase(); + if (typeof newValue != 'string') { + return null; + } + if (goog.color.isValidColor(newValue)) { + return goog.color.parse(newValue).hex; } return null; }; diff --git a/tests/mocha/field_colour_test.js b/tests/mocha/field_colour_test.js index 507dd8364..dba8f0438 100644 --- a/tests/mocha/field_colour_test.js +++ b/tests/mocha/field_colour_test.js @@ -58,7 +58,7 @@ suite ('Colour Fields', function() { assertValueDefault(colourField); }); test('Non-Parsable String', function() { - var colourField = new Blockly.FieldColour('bad'); + var colourField = new Blockly.FieldColour('not_a_colour'); assertValueDefault(colourField); }); test('#AAAAAA', function() { @@ -85,6 +85,22 @@ suite ('Colour Fields', function() { var colourField = new Blockly.FieldColour('#bcbcbc'); assertValue(colourField, '#bcbcbc', '#bcbcbc'); }); + test('#AA0', function() { + var colourField = new Blockly.FieldColour('#AA0'); + assertValue(colourField, '#aaaa00', '#aa0'); + }); + test('#aa0', function() { + var colourField = new Blockly.FieldColour('#aa0'); + assertValue(colourField, '#aaaa00', '#aa0'); + }); + test('rgb(170, 170, 0)', function() { + var colourField = new Blockly.FieldColour('rgb(170, 170, 0)'); + assertValue(colourField, '#aaaa00', '#aa0'); + }); + test('red', function() { + var colourField = new Blockly.FieldColour('red'); + assertValue(colourField, '#ff0000', '#f00'); + }); }); suite('fromJson', function() { test('Empty', function() { @@ -100,7 +116,8 @@ suite ('Colour Fields', function() { assertValueDefault(colourField); }); test('Non-Parsable String', function() { - var colourField = new Blockly.FieldColour.fromJson({ colour:'bad' }); + var colourField = new Blockly.FieldColour.fromJson( + { colour:'not_a_colour' }); assertValueDefault(colourField); }); test('#AAAAAA', function() { @@ -127,6 +144,23 @@ suite ('Colour Fields', function() { var colourField = Blockly.FieldColour.fromJson({ colour: '#bcbcbc' }); assertValue(colourField, '#bcbcbc', '#bcbcbc'); }); + test('#AA0', function() { + var colourField = Blockly.FieldColour.fromJson({ colour: '#AA0' }); + assertValue(colourField, '#aaaa00', '#aa0'); + }); + test('#aa0', function() { + var colourField = Blockly.FieldColour.fromJson({ colour: '#aa0' }); + assertValue(colourField, '#aaaa00', '#aa0'); + }); + test('rgb(170, 170, 0)', function() { + var colourField = Blockly.FieldColour.fromJson( + { colour: 'rgb(170, 170, 0)' }); + assertValue(colourField, '#aaaa00', '#aa0'); + }); + test('red', function() { + var colourField = Blockly.FieldColour.fromJson({ colour: 'red' }); + assertValue(colourField, '#ff0000', '#f00'); + }); }); suite('setValue', function() { suite('Empty -> New Value', function() { @@ -142,7 +176,7 @@ suite ('Colour Fields', function() { assertValueDefault(this.colourField); }); test('Non-Parsable String', function() { - this.colourField.setValue('bad'); + this.colourField.setValue('not_a_colour'); assertValueDefault(this.colourField); }); test('#000000', function() { @@ -153,6 +187,18 @@ suite ('Colour Fields', function() { this.colourField.setValue('#bcbcbc'); assertValue(this.colourField, '#bcbcbc', '#bcbcbc'); }); + test('#aa0', function() { + this.colourField.setValue('#aa0'); + assertValue(this.colourField, '#aaaa00', '#aa0'); + }); + test('rgb(170, 170, 0)', function() { + this.colourField.setValue('rgb(170, 170, 0)'); + assertValue(this.colourField, '#aaaa00', '#aa0'); + }); + test('red', function() { + this.colourField.setValue('red'); + assertValue(this.colourField, '#ff0000', '#f00'); + }); }); suite('Value -> New Value', function() { setup(function() { @@ -167,7 +213,7 @@ suite ('Colour Fields', function() { assertValue(this.colourField, '#aaaaaa', '#aaa'); }); test('Non-Parsable String', function() { - this.colourField.setValue('bad'); + this.colourField.setValue('not_a_colour'); assertValue(this.colourField, '#aaaaaa', '#aaa'); }); test('#000000', function() { @@ -178,6 +224,18 @@ suite ('Colour Fields', function() { this.colourField.setValue('#bcbcbc'); assertValue(this.colourField, '#bcbcbc', '#bcbcbc'); }); + test('#aa0', function() { + this.colourField.setValue('#aa0'); + assertValue(this.colourField, '#aaaa00', '#aa0'); + }); + test('rgb(170, 170, 0)', function() { + this.colourField.setValue('rgb(170, 170, 0)'); + assertValue(this.colourField, '#aaaa00', '#aa0'); + }); + test('red', function() { + this.colourField.setValue('red'); + assertValue(this.colourField, '#ff0000', '#f00'); + }); }); }); suite('Validators', function() {