123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- const DeserializerManager = require('../src/deserializer-manager');
- describe('DeserializerManager', function() {
- let manager = null;
- class Foo {
- static deserialize({ name }) {
- return new Foo(name);
- }
- constructor(name) {
- this.name = name;
- }
- }
- beforeEach(() => (manager = new DeserializerManager()));
- describe('::add(deserializer)', () =>
- it('returns a disposable that can be used to remove the manager', function() {
- const disposable = manager.add(Foo);
- expect(
- manager.deserialize({ deserializer: 'Foo', name: 'Bar' })
- ).toBeDefined();
- disposable.dispose();
- spyOn(console, 'warn');
- expect(
- manager.deserialize({ deserializer: 'Foo', name: 'Bar' })
- ).toBeUndefined();
- }));
- describe('::deserialize(state)', function() {
- beforeEach(() => manager.add(Foo));
- it("calls deserialize on the manager for the given state object, or returns undefined if one can't be found", function() {
- spyOn(console, 'warn');
- const object = manager.deserialize({ deserializer: 'Foo', name: 'Bar' });
- expect(object.name).toBe('Bar');
- expect(manager.deserialize({ deserializer: 'Bogus' })).toBeUndefined();
- });
- describe('when the manager has a version', function() {
- beforeEach(() => (Foo.version = 2));
- describe('when the deserialized state has a matching version', () =>
- it('attempts to deserialize the state', function() {
- const object = manager.deserialize({
- deserializer: 'Foo',
- version: 2,
- name: 'Bar'
- });
- expect(object.name).toBe('Bar');
- }));
- describe('when the deserialized state has a non-matching version', () =>
- it('returns undefined', function() {
- expect(
- manager.deserialize({
- deserializer: 'Foo',
- version: 3,
- name: 'Bar'
- })
- ).toBeUndefined();
- expect(
- manager.deserialize({
- deserializer: 'Foo',
- version: 1,
- name: 'Bar'
- })
- ).toBeUndefined();
- expect(
- manager.deserialize({ deserializer: 'Foo', name: 'Bar' })
- ).toBeUndefined();
- }));
- });
- });
- });
|