Aleksey Bekh-Ivanov (WMDE) has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/354231 )
Change subject: JS LexemeDeserializer also serializes statements on forms ...................................................................... JS LexemeDeserializer also serializes statements on forms Change-Id: Ic0707ef8df72187366d8a273e63b18936e70c514 --- M resources/datamodel/LexemeForm.js M resources/serialization/LexemeDeserializer.js M tests/qunit/serialization/LexemeDeserializer.tests.js 3 files changed, 89 insertions(+), 23 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseLexeme refs/changes/31/354231/1 diff --git a/resources/datamodel/LexemeForm.js b/resources/datamodel/LexemeForm.js index cbd19a9..47111e3 100644 --- a/resources/datamodel/LexemeForm.js +++ b/resources/datamodel/LexemeForm.js @@ -2,15 +2,19 @@ 'use strict'; /** + * @class wikibase.lexeme.datamodel.LexemeForm + * @mixes wikibase.datamodel.StatementProvider + * * @param {string} id * @param {string} representation */ var LexemeForm = util.inherit( 'LexemeForm', - function ( id, representation, grammaticalFeatures ) { + function ( id, representation, grammaticalFeatures, statementGroupSet ) { this._id = id; this._representation = representation; this._grammaticalFeatures = grammaticalFeatures; + wb.datamodel.StatementProvider.call( this, statementGroupSet ); }, { @@ -63,4 +67,6 @@ wb.lexeme.datamodel.LexemeForm = LexemeForm; + wb.datamodel.StatementProvider.mixInto( LexemeForm ); + }( wikibase, util ) ); diff --git a/resources/serialization/LexemeDeserializer.js b/resources/serialization/LexemeDeserializer.js index 4b17d39..53ff3d9 100644 --- a/resources/serialization/LexemeDeserializer.js +++ b/resources/serialization/LexemeDeserializer.js @@ -29,11 +29,30 @@ var statementGroupSetDeserializer = new SERIALIZER.StatementGroupSetDeserializer(), termMapDeserializer = new SERIALIZER.TermMapDeserializer(); - return new wikibase.datamodel.Lexeme( + var forms = serialization.forms || []; + var deserializedForms = forms.map( function ( form ) { + return this.deserializeForm( form ); + }.bind( this ) ); + + var lexeme = new wikibase.datamodel.Lexeme( serialization.id, termMapDeserializer.deserialize( serialization.labels ), statementGroupSetDeserializer.deserialize( serialization.claims ) ); + + // TODO switch to setter/constructor + lexeme.forms = deserializedForms; + return lexeme; + }, + + deserializeForm: function ( formSerialization ) { + var statementGroupSetDeserializer = new SERIALIZER.StatementGroupSetDeserializer(); + return new wb.lexeme.datamodel.LexemeForm( + formSerialization.id, + formSerialization.representation, + formSerialization.gramaaticalFeatures, + statementGroupSetDeserializer.deserialize( formSerialization.claims ) + ); } } ); diff --git a/tests/qunit/serialization/LexemeDeserializer.tests.js b/tests/qunit/serialization/LexemeDeserializer.tests.js index 8418b02..dbda4fc 100644 --- a/tests/qunit/serialization/LexemeDeserializer.tests.js +++ b/tests/qunit/serialization/LexemeDeserializer.tests.js @@ -7,37 +7,40 @@ QUnit.module( 'wikibase.lexeme.serialization.LexemeDeserializer' ); + var claimsSerialization = { + P1: [ + { + id: 'L1$1', + mainsnak: { + snaktype: 'novalue', + property: 'P1' + }, + type: 'statement', + rank: 'normal' + } + ] + }; var serialization = { type: 'lexeme', id: 'L1', lemmas: {}, lexicalCategory: 'Q2', language: 'Q2', - claims: { - P1: [ - { - id: 'L1$1', - mainsnak: { - snaktype: 'novalue', - property: 'P1' - }, - type: 'statement', - rank: 'normal' - } - ] - } + claims: claimsSerialization }; + var expectedStatementGroupSet = new wb.datamodel.StatementGroupSet( [ + new wb.datamodel.StatementGroup( 'P1', new wb.datamodel.StatementList( [ + new wb.datamodel.Statement( new wb.datamodel.Claim( + new wb.datamodel.PropertyNoValueSnak( 'P1' ), null, 'L1$1' ) ) + ] ) ) + ] ); var expectedDataModel = new wikibase.datamodel.Lexeme( - 'L1', - null, - new wb.datamodel.StatementGroupSet( [ - new wb.datamodel.StatementGroup( 'P1', new wb.datamodel.StatementList( [ - new wb.datamodel.Statement( new wb.datamodel.Claim( - new wb.datamodel.PropertyNoValueSnak( 'P1' ), null, 'L1$1' ) ) - ] ) ) - ] ) + 'L1', + null, + expectedStatementGroupSet ); + expectedDataModel.forms = []; QUnit.test( 'deserialize()', 2, function ( assert ) { var ds = new wb.lexeme.serialization.LexemeDeserializer(); @@ -54,4 +57,42 @@ ); } ); + QUnit.test( 'deserialize() deserializes forms', function ( assert ) { + var ds = new wb.lexeme.serialization.LexemeDeserializer(); + + var result = ds.deserialize( { + type: 'lexeme', + id: 'L1', + forms: [ { + id: 'F1', + representation: 'some representation', + gramaaticalFeatures: [ 'Q1' ], + claims: claimsSerialization + } ] + } ); + + assert.ok( result.forms, 'Deserialized data model should contain form' ); + + var form = result.forms[ 0 ]; + assert.ok( + form instanceof wb.lexeme.datamodel.LexemeForm, + 'Data model should contain instance of LexemeForm' + ); + assert.equal( form.getId(), 'F1', 'Data model should contain form id' ); + assert.equal( + form.getRepresentation(), + 'some representation', + 'Data model should contain form representation' + ); + assert.deepEqual( + form.getGrammaticalFeatures(), + [ 'Q1' ], + 'Data model should contain form grammatical features' + ); + assert.ok( + form.getStatements().equals( expectedStatementGroupSet ), + 'Data model should have statements on form' + ); + } ); + }( jQuery, wikibase, QUnit ) ); -- To view, visit https://gerrit.wikimedia.org/r/354231 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic0707ef8df72187366d8a273e63b18936e70c514 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikibaseLexeme Gerrit-Branch: master Gerrit-Owner: Aleksey Bekh-Ivanov (WMDE) <aleksey.bekh-iva...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits