Daniel Werner has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/64542


Change subject: [DataValues] Added tests for JSON related DataValue functions
......................................................................

[DataValues] Added tests for JSON related DataValue functions

* fixes MultilingualTextValue's toJSON()
* add validation for string and bool data values constructor values/BoolValue.js
* documentation updates/fixes

Change-Id: I879751bb6f837a37bcaf95e61d1eaf459df57572
---
M DataValues/resources/DataValue.js
M DataValues/resources/dataValues.js
M DataValues/resources/values/BoolValue.js
M DataValues/resources/values/MonolingualTextValue.js
M DataValues/resources/values/MultilingualTextValue.js
M DataValues/resources/values/StringValue.js
M DataValues/resources/values/UnknownValue.js
M DataValues/tests/qunit/dataValues.DataValue.tests.js
8 files changed, 82 insertions(+), 27 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DataValues 
refs/changes/42/64542/1

diff --git a/DataValues/resources/DataValue.js 
b/DataValues/resources/DataValue.js
index 031b7f9..38bd2ef 100644
--- a/DataValues/resources/DataValue.js
+++ b/DataValues/resources/DataValue.js
@@ -48,7 +48,7 @@
         *
         * @since 0.1
         *
-        * @return String|Number
+        * @return string|number
         */
        getSortKey: dv.util.abstractMember,
 
@@ -57,7 +57,7 @@
         *
         * @since 0.1
         *
-        * @return Object
+        * @return *
         */
        toJSON: dv.util.abstractMember,
 
@@ -68,7 +68,7 @@
         *
         * @param dataValue DataValue
         *
-        * @return Boolean
+        * @return boolean
         */
        equals: dv.util.abstractMember,
 
@@ -77,7 +77,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getType: function() {
                return this.constructor.TYPE;
diff --git a/DataValues/resources/dataValues.js 
b/DataValues/resources/dataValues.js
index 6886a22..87f262b 100644
--- a/DataValues/resources/dataValues.js
+++ b/DataValues/resources/dataValues.js
@@ -42,6 +42,7 @@
         * @since 0.1
         *
         * @throws {Error} If the a unknown data value type is given.
+        * @throws {Error} If the given data is not sufficient for constructing 
the data value.
         *
         * @param {String} dataValueType
         * @param {*} data
diff --git a/DataValues/resources/values/BoolValue.js 
b/DataValues/resources/values/BoolValue.js
index 462a325..be2a1af 100644
--- a/DataValues/resources/values/BoolValue.js
+++ b/DataValues/resources/values/BoolValue.js
@@ -6,12 +6,14 @@
  *
  * @author Jeroen De Dauw < [email protected] >
  */
-( function( dv, $, undefined ) {
+( function( dv, $ ) {
 'use strict';
 
 var PARENT = dv.DataValue,
        constructor = function( value ) {
-               // TODO: validate
+               if( typeof value !== 'boolean' ) {
+                       throw new Error( 'A boolean value has to be given' );
+               }
                this._value = value;
        };
 
@@ -22,7 +24,7 @@
  * @extends dv.DataValue
  * @since 0.1
  *
- * @param {String} value
+ * @param {boolean} value
  */
 dv.BoolValue = dv.util.inherit( 'DvBoolValue', PARENT, constructor, {
 
@@ -31,7 +33,7 @@
         *
         * @since 0.1
         *
-        * @return Number
+        * @return number
         */
        getSortKey: function() {
                return this._value ? 1 : 0;
@@ -42,7 +44,7 @@
         *
         * @since 0.1
         *
-        * @return Boolean
+        * @return boolean
         */
        getValue: function() {
                return this._value;
@@ -65,6 +67,8 @@
         * @see dv.DataValue.toJSON
         *
         * @since 0.1
+        *
+        * @return boolean
         */
        toJSON: function() {
                return this._value;
diff --git a/DataValues/resources/values/MonolingualTextValue.js 
b/DataValues/resources/values/MonolingualTextValue.js
index 0ec689a..aba1182 100644
--- a/DataValues/resources/values/MonolingualTextValue.js
+++ b/DataValues/resources/values/MonolingualTextValue.js
@@ -34,7 +34,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getSortKey: function() {
                return this._languageCode + this._text;
@@ -81,7 +81,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getText: function() {
                return this._text;
@@ -92,7 +92,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getLanguageCode: function() {
                return this._languageCode;
diff --git a/DataValues/resources/values/MultilingualTextValue.js 
b/DataValues/resources/values/MultilingualTextValue.js
index 8a19dd0..d559e24 100644
--- a/DataValues/resources/values/MultilingualTextValue.js
+++ b/DataValues/resources/values/MultilingualTextValue.js
@@ -32,7 +32,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getSortKey: function() {
                return this._texts.length < 1 ? '' : 
this._texts[0].getSortKey();
@@ -43,7 +43,7 @@
         *
         * @since 0.1
         *
-        * @return mixed
+        * @return dataValues.MultilingualTextValue
         */
        getValue: function() {
                return this;
@@ -73,10 +73,10 @@
         * @return Object
         */
        toJSON: function() {
-               var texts = [];
+               var texts = {};
 
                for ( var i in this._texts ) {
-                       texts[this._texts[i].getLanguageCode()] = 
this._texts[i].getText();
+                       texts[ this._texts[i].getLanguageCode() ] = 
this._texts[i].getText();
                }
 
                return texts;
diff --git a/DataValues/resources/values/StringValue.js 
b/DataValues/resources/values/StringValue.js
index f94bd56..0958d9e 100644
--- a/DataValues/resources/values/StringValue.js
+++ b/DataValues/resources/values/StringValue.js
@@ -12,7 +12,9 @@
 
 var PARENT = dv.DataValue,
        constructor = function( value ) {
-               // TODO: validate
+               if( typeof value !== 'string' ) {
+                       throw new Error( 'A string value has to be given' );
+               }
                this._value = value;
        };
 
@@ -23,7 +25,7 @@
  * @extends dv.DataValue
  * @since 0.1
  *
- * @param {String} value
+ * @param {string} value
  */
 dv.StringValue = dv.util.inherit( 'DvStringValue', PARENT, constructor, {
 
@@ -32,7 +34,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getSortKey: function() {
                return this._value;
@@ -43,7 +45,7 @@
         *
         * @since 0.1
         *
-        * @return String
+        * @return string
         */
        getValue: function() {
                return this._value;
@@ -66,6 +68,8 @@
         * @see dv.DataValue.toJSON
         *
         * @since 0.1
+        *
+        * @return string
         */
        toJSON: function() {
                return this._value;
diff --git a/DataValues/resources/values/UnknownValue.js 
b/DataValues/resources/values/UnknownValue.js
index ad2c308..50cbdcb 100644
--- a/DataValues/resources/values/UnknownValue.js
+++ b/DataValues/resources/values/UnknownValue.js
@@ -6,7 +6,7 @@
  *
  * @author Jeroen De Dauw < [email protected] >
  */
-( function( dv, $, undefined ) {
+( function( dv, $ ) {
        'use strict';
 
        var PARENT = dv.DataValue,
@@ -22,7 +22,7 @@
         * @extends dv.DataValue
         * @since 0.1
         *
-        * @param {String} value
+        * @param {string} value
         */
        dv.UnknownValue = dv.util.inherit( 'DvUnknownValue', PARENT, 
constructor, {
 
@@ -31,7 +31,7 @@
                 *
                 * @since 0.1
                 *
-                * @return Number
+                * @return number
                 */
                getSortKey: function() {
                        return 0;
@@ -42,7 +42,7 @@
                 *
                 * @since 0.1
                 *
-                * @return String
+                * @return string
                 */
                getValue: function() {
                        return this._value;
diff --git a/DataValues/tests/qunit/dataValues.DataValue.tests.js 
b/DataValues/tests/qunit/dataValues.DataValue.tests.js
index 3e5b9da..69f3608 100644
--- a/DataValues/tests/qunit/dataValues.DataValue.tests.js
+++ b/DataValues/tests/qunit/dataValues.DataValue.tests.js
@@ -130,7 +130,7 @@
                 *
                 * @since 0.1
                 *
-                * @param {QUnit} assert
+                * @param {QUnit.assert} assert
                 */
                testGetSortKey: function( assert ) {
                        var instances = this.getInstances(),
@@ -148,11 +148,27 @@
                },
 
                /**
+                * Tests whether the data value's constructor has a newFromJSON 
function.
+                *
+                * @since 0.1
+                *
+                * @param {QUnit.assert} assert
+                */
+               testNewFromJSON: function( assert ) {
+                       var fnNewFromJSON = this.getConstructor().newFromJSON;
+
+                       assert.ok(
+                               $.isFunction( fnNewFromJSON ),
+                               'has a related newFromJSON function'
+                       );
+               },
+
+               /**
                 * Tests the toJSON method.
                 *
                 * @since 0.1
                 *
-                * @param {QUnit} assert
+                * @param {QUnit.assert} assert
                 */
                testToJSON: function( assert ) {
                        var instances = this.getInstances(),
@@ -161,7 +177,37 @@
 
                        for ( i in instances ) {
                                jsonValue = instances[i].toJSON();
-                               assert.ok( true ); // TODO: add meaningful 
assertion
+
+                               assert.ok(
+                                       jsonValue !== undefined,
+                                       'toJSON() returned some value'
+                               );
+                       }
+               },
+
+               /**
+                * Gets a data values JSON, constructs a new data value from it 
by using the newFromJSON
+                * and checks whether the two are equal.
+                *
+                * @param {QUnit.assert} assert
+                */
+               testJsonRoundtripping: function( assert ) {
+                       var instances = this.getInstances(),
+                               fnNewFromJSON = 
this.getConstructor().newFromJSON,
+                               i,
+                               value1,
+                               value2,
+                               jsonValue;
+
+                       for ( i in instances ) {
+                               value1 = instances[i];
+                               jsonValue = value1.toJSON();
+                               value2 = fnNewFromJSON( jsonValue );
+
+                               assert.ok(
+                                       value1.equals( value2 ) && 
value2.equals( value1 ),
+                                       'data value created from another data 
values JSON is equal to its donor'
+                               );
                        }
                },
 

-- 
To view, visit https://gerrit.wikimedia.org/r/64542
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I879751bb6f837a37bcaf95e61d1eaf459df57572
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/DataValues
Gerrit-Branch: master
Gerrit-Owner: Daniel Werner <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to