Skip to content

Commit 8a9f9cf

Browse files
test: default serializer for widgets
1 parent 89dc514 commit 8a9f9cf

File tree

4 files changed

+68
-2
lines changed

4 files changed

+68
-2
lines changed

packages/base/test/karma-cov.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module.exports = function (config) {
1515
],
1616
},
1717
mochaReporter: {
18-
showDiff: true
18+
showDiff: true,
1919
},
2020
port: 9876,
2121
colors: true,

packages/base/test/karma.conf.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module.exports = function (config) {
44
frameworks: ['mocha'],
55
reporters: ['mocha'],
66
mochaReporter: {
7-
showDiff: true
7+
showDiff: true,
88
},
99
files: ['test/build/bundle.js'],
1010
port: 9876,

packages/base/test/src/dummy-manager.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,35 @@ class BinaryWidgetView extends TestWidgetView {
133133
_rendered = 0;
134134
}
135135

136+
class ContainerWidget extends TestWidget {
137+
static serializers = {
138+
...widgets.WidgetModel.serializers,
139+
children: { deserialize: widgets.unpack_models },
140+
};
141+
defaults(): Backbone.ObjectHash {
142+
return {
143+
...super.defaults(),
144+
_model_name: 'ContainerWidget',
145+
_view_name: 'ContainerWidgetView',
146+
children: [],
147+
};
148+
}
149+
}
150+
151+
class ContainerWidgetView extends TestWidgetView {
152+
render(): void {
153+
this._rendered += 1;
154+
}
155+
_rendered = 0;
156+
}
157+
136158
const testWidgets = {
137159
TestWidget,
138160
TestWidgetView,
139161
BinaryWidget,
140162
BinaryWidgetView,
163+
ContainerWidget,
164+
ContainerWidgetView,
141165
};
142166

143167
export class DummyManager implements widgets.IWidgetManager {

packages/base/test/src/widget_test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,48 @@ describe('unpack_models', function () {
7171
});
7272
});
7373

74+
describe('serialize/deserialize', function () {
75+
before(async function () {
76+
this.manager = new DummyManager();
77+
this.widgetChild = await this.manager.new_widget({
78+
model_name: 'WidgetModel',
79+
model_module: '@jupyter-widgets/base',
80+
model_module_version: '1.2.0',
81+
view_name: 'WidgetView',
82+
view_module: '@jupyter-widgets/base',
83+
view_module_version: '1.2.0',
84+
model_id: 'widgetChild',
85+
});
86+
87+
this.widgetContainer = await this.manager.new_widget(
88+
{
89+
model_name: 'ContainerWidget',
90+
model_module: 'test-widgets',
91+
model_module_version: '1.2.0',
92+
view_name: 'ContainerWidgetView',
93+
view_module: 'test-widgets',
94+
view_module_version: '1.2.0',
95+
model_id: 'widgetContainer',
96+
},
97+
{ children: [`IPY_MODEL_${this.widgetChild.model_id}`] }
98+
);
99+
});
100+
it('serializes', function () {
101+
const state = this.widgetContainer.get_state(false);
102+
const serializedState = this.widgetContainer.serialize(state);
103+
expect(serializedState).to.deep.equal({
104+
_model_module: 'test-widgets',
105+
_model_module_version: '1.0.0',
106+
_model_name: 'ContainerWidget',
107+
_view_count: null,
108+
_view_module: 'test-widgets',
109+
_view_module_version: '1.0.0',
110+
_view_name: 'ContainerWidgetView',
111+
children: ['IPY_MODEL_widgetChild'],
112+
});
113+
});
114+
});
115+
74116
describe('WidgetModel', function () {
75117
before(async function () {
76118
this.setup = async function (): Promise<void> {

0 commit comments

Comments
 (0)