|
@@ -21,7 +21,7 @@ describe('apputils', () => {
|
|
describe('LayoutRestorer', () => {
|
|
describe('LayoutRestorer', () => {
|
|
describe('#constructor()', () => {
|
|
describe('#constructor()', () => {
|
|
it('should construct a new layout restorer', () => {
|
|
it('should construct a new layout restorer', () => {
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: Promise.resolve<void>(void 0),
|
|
first: Promise.resolve<void>(void 0),
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
@@ -32,7 +32,7 @@ describe('apputils', () => {
|
|
|
|
|
|
describe('#restored', () => {
|
|
describe('#restored', () => {
|
|
it('should be a promise available right away', () => {
|
|
it('should be a promise available right away', () => {
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: Promise.resolve<void>(void 0),
|
|
first: Promise.resolve<void>(void 0),
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
@@ -41,8 +41,8 @@ describe('apputils', () => {
|
|
});
|
|
});
|
|
|
|
|
|
it('should resolve when restorer is done', done => {
|
|
it('should resolve when restorer is done', done => {
|
|
- let ready = new PromiseDelegate<void>();
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ const ready = new PromiseDelegate<void>();
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: ready.promise,
|
|
first: ready.promise,
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
@@ -57,60 +57,51 @@ describe('apputils', () => {
|
|
});
|
|
});
|
|
|
|
|
|
describe('#add()', () => {
|
|
describe('#add()', () => {
|
|
- it('should add a widget to be tracked by the restorer', done => {
|
|
|
|
- let ready = new PromiseDelegate<void>();
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ it('should add a widget to be tracked by the restorer', async () => {
|
|
|
|
+ const ready = new PromiseDelegate<void>();
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: ready.promise,
|
|
first: ready.promise,
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
});
|
|
});
|
|
- let currentWidget = new Widget();
|
|
|
|
- let mode: DockPanel.Mode = 'single-document';
|
|
|
|
- let dehydrated: ApplicationShell.ILayout = {
|
|
|
|
|
|
+ const currentWidget = new Widget();
|
|
|
|
+ const mode: DockPanel.Mode = 'single-document';
|
|
|
|
+ const dehydrated: ApplicationShell.ILayout = {
|
|
mainArea: { currentWidget, dock: null, mode },
|
|
mainArea: { currentWidget, dock: null, mode },
|
|
leftArea: { collapsed: true, currentWidget: null, widgets: null },
|
|
leftArea: { collapsed: true, currentWidget: null, widgets: null },
|
|
rightArea: { collapsed: true, currentWidget: null, widgets: null }
|
|
rightArea: { collapsed: true, currentWidget: null, widgets: null }
|
|
};
|
|
};
|
|
restorer.add(currentWidget, 'test-one');
|
|
restorer.add(currentWidget, 'test-one');
|
|
ready.resolve(void 0);
|
|
ready.resolve(void 0);
|
|
- restorer.restored
|
|
|
|
- .then(() => restorer.save(dehydrated))
|
|
|
|
- .then(() => restorer.fetch())
|
|
|
|
- .then(layout => {
|
|
|
|
- expect(layout.mainArea.currentWidget).to.equal(currentWidget);
|
|
|
|
- expect(layout.mainArea.mode).to.equal(mode);
|
|
|
|
- done();
|
|
|
|
- })
|
|
|
|
- .catch(done);
|
|
|
|
|
|
+ await restorer.restored;
|
|
|
|
+ await restorer.save(dehydrated);
|
|
|
|
+ const layout = await restorer.fetch();
|
|
|
|
+ expect(layout.mainArea.currentWidget).to.equal(currentWidget);
|
|
|
|
+ expect(layout.mainArea.mode).to.equal(mode);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
describe('#fetch()', () => {
|
|
describe('#fetch()', () => {
|
|
- it('should always return a value', done => {
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ it('should always return a value', async () => {
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: Promise.resolve(void 0),
|
|
first: Promise.resolve(void 0),
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
});
|
|
});
|
|
- restorer
|
|
|
|
- .fetch()
|
|
|
|
- .then(layout => {
|
|
|
|
- expect(layout).to.be.not.be(null);
|
|
|
|
- done();
|
|
|
|
- })
|
|
|
|
- .catch(done);
|
|
|
|
|
|
+ const layout = await restorer.fetch();
|
|
|
|
+ expect(layout).to.be.not.be(null);
|
|
});
|
|
});
|
|
|
|
|
|
- it('should fetch saved data', done => {
|
|
|
|
- let ready = new PromiseDelegate<void>();
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ it('should fetch saved data', async () => {
|
|
|
|
+ const ready = new PromiseDelegate<void>();
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: ready.promise,
|
|
first: ready.promise,
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
});
|
|
});
|
|
- let currentWidget = new Widget();
|
|
|
|
|
|
+ const currentWidget = new Widget();
|
|
// The `fresh` attribute is only here to check against the return value.
|
|
// The `fresh` attribute is only here to check against the return value.
|
|
- let dehydrated: ApplicationShell.ILayout = {
|
|
|
|
|
|
+ const dehydrated: ApplicationShell.ILayout = {
|
|
fresh: false,
|
|
fresh: false,
|
|
mainArea: { currentWidget: null, dock: null, mode: null },
|
|
mainArea: { currentWidget: null, dock: null, mode: null },
|
|
leftArea: {
|
|
leftArea: {
|
|
@@ -122,93 +113,75 @@ describe('apputils', () => {
|
|
};
|
|
};
|
|
restorer.add(currentWidget, 'test-one');
|
|
restorer.add(currentWidget, 'test-one');
|
|
ready.resolve(void 0);
|
|
ready.resolve(void 0);
|
|
- restorer.restored
|
|
|
|
- .then(() => restorer.save(dehydrated))
|
|
|
|
- .then(() => restorer.fetch())
|
|
|
|
- .then(layout => {
|
|
|
|
- expect(layout).to.deep.equal(dehydrated);
|
|
|
|
- done();
|
|
|
|
- })
|
|
|
|
- .catch(done);
|
|
|
|
|
|
+ await restorer.restored;
|
|
|
|
+ await restorer.save(dehydrated);
|
|
|
|
+ const layout = await restorer.fetch();
|
|
|
|
+ expect(layout).to.deep.equal(dehydrated);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
describe('#restore()', () => {
|
|
describe('#restore()', () => {
|
|
- it('should restore the widgets in a tracker', done => {
|
|
|
|
- let tracker = new InstanceTracker<Widget>({ namespace: 'foo-widget' });
|
|
|
|
- let registry = new CommandRegistry();
|
|
|
|
- let state = new StateDB({ namespace: NAMESPACE });
|
|
|
|
- let ready = new PromiseDelegate<void>();
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ it('should restore the widgets in a tracker', async () => {
|
|
|
|
+ const tracker = new InstanceTracker<Widget>({
|
|
|
|
+ namespace: 'foo-widget'
|
|
|
|
+ });
|
|
|
|
+ const registry = new CommandRegistry();
|
|
|
|
+ const state = new StateDB({ namespace: NAMESPACE });
|
|
|
|
+ const ready = new PromiseDelegate<void>();
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: ready.promise,
|
|
first: ready.promise,
|
|
registry,
|
|
registry,
|
|
state
|
|
state
|
|
});
|
|
});
|
|
let called = false;
|
|
let called = false;
|
|
- let key = `${tracker.namespace}:${tracker.namespace}`;
|
|
|
|
|
|
+ const key = `${tracker.namespace}:${tracker.namespace}`;
|
|
|
|
|
|
registry.addCommand(tracker.namespace, {
|
|
registry.addCommand(tracker.namespace, {
|
|
execute: () => {
|
|
execute: () => {
|
|
called = true;
|
|
called = true;
|
|
}
|
|
}
|
|
});
|
|
});
|
|
- state
|
|
|
|
- .save(key, { data: null })
|
|
|
|
- .then(() => {
|
|
|
|
- ready.resolve(undefined);
|
|
|
|
- return restorer.restore(tracker, {
|
|
|
|
- args: () => null,
|
|
|
|
- name: () => tracker.namespace,
|
|
|
|
- command: tracker.namespace
|
|
|
|
- });
|
|
|
|
- })
|
|
|
|
- .catch(done);
|
|
|
|
- restorer.restored
|
|
|
|
- .then(() => {
|
|
|
|
- expect(called).to.equal(true);
|
|
|
|
- })
|
|
|
|
- .then(() => state.remove(key))
|
|
|
|
- .then(() => {
|
|
|
|
- done();
|
|
|
|
- })
|
|
|
|
- .catch(done);
|
|
|
|
|
|
+ await state.save(key, { data: null });
|
|
|
|
+ ready.resolve(undefined);
|
|
|
|
+ await restorer.restore(tracker, {
|
|
|
|
+ args: () => null,
|
|
|
|
+ name: () => tracker.namespace,
|
|
|
|
+ command: tracker.namespace
|
|
|
|
+ });
|
|
|
|
+ await restorer.restored;
|
|
|
|
+ expect(called).to.equal(true);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
|
|
describe('#save()', () => {
|
|
describe('#save()', () => {
|
|
- it('should not run before `first` promise', done => {
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ it('should not run before `first` promise', async () => {
|
|
|
|
+ let called = false;
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: new Promise(() => {
|
|
first: new Promise(() => {
|
|
- /* no op */
|
|
|
|
|
|
+ called = true;
|
|
}),
|
|
}),
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
});
|
|
});
|
|
- let dehydrated: ApplicationShell.ILayout = {
|
|
|
|
|
|
+ const dehydrated: ApplicationShell.ILayout = {
|
|
mainArea: { currentWidget: null, dock: null, mode: null },
|
|
mainArea: { currentWidget: null, dock: null, mode: null },
|
|
leftArea: { currentWidget: null, collapsed: true, widgets: null },
|
|
leftArea: { currentWidget: null, collapsed: true, widgets: null },
|
|
rightArea: { collapsed: true, currentWidget: null, widgets: null }
|
|
rightArea: { collapsed: true, currentWidget: null, widgets: null }
|
|
};
|
|
};
|
|
- restorer
|
|
|
|
- .save(dehydrated)
|
|
|
|
- .then(() => {
|
|
|
|
- done('save() ran before `first` promise resolved.');
|
|
|
|
- })
|
|
|
|
- .catch(() => {
|
|
|
|
- done();
|
|
|
|
- });
|
|
|
|
|
|
+ await restorer.save(dehydrated);
|
|
|
|
+ expect(called).to.equal(true);
|
|
});
|
|
});
|
|
|
|
|
|
- it('should save data', done => {
|
|
|
|
- let ready = new PromiseDelegate<void>();
|
|
|
|
- let restorer = new LayoutRestorer({
|
|
|
|
|
|
+ it('should save data', async () => {
|
|
|
|
+ const ready = new PromiseDelegate<void>();
|
|
|
|
+ const restorer = new LayoutRestorer({
|
|
first: ready.promise,
|
|
first: ready.promise,
|
|
registry: new CommandRegistry(),
|
|
registry: new CommandRegistry(),
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
state: new StateDB({ namespace: NAMESPACE })
|
|
});
|
|
});
|
|
- let currentWidget = new Widget();
|
|
|
|
|
|
+ const currentWidget = new Widget();
|
|
// The `fresh` attribute is only here to check against the return value.
|
|
// The `fresh` attribute is only here to check against the return value.
|
|
- let dehydrated: ApplicationShell.ILayout = {
|
|
|
|
|
|
+ const dehydrated: ApplicationShell.ILayout = {
|
|
fresh: false,
|
|
fresh: false,
|
|
mainArea: { currentWidget: null, dock: null, mode: null },
|
|
mainArea: { currentWidget: null, dock: null, mode: null },
|
|
leftArea: {
|
|
leftArea: {
|
|
@@ -220,14 +193,10 @@ describe('apputils', () => {
|
|
};
|
|
};
|
|
restorer.add(currentWidget, 'test-one');
|
|
restorer.add(currentWidget, 'test-one');
|
|
ready.resolve(void 0);
|
|
ready.resolve(void 0);
|
|
- restorer.restored
|
|
|
|
- .then(() => restorer.save(dehydrated))
|
|
|
|
- .then(() => restorer.fetch())
|
|
|
|
- .then(layout => {
|
|
|
|
- expect(layout).to.deep.equal(dehydrated);
|
|
|
|
- done();
|
|
|
|
- })
|
|
|
|
- .catch(done);
|
|
|
|
|
|
+ await restorer.restored;
|
|
|
|
+ await restorer.save(dehydrated);
|
|
|
|
+ const layout = await restorer.fetch();
|
|
|
|
+ expect(layout).to.deep.equal(dehydrated);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|