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