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

Reply via email to