Skip to content

Commit

Permalink
fix(choice-observers): notify on setValue
Browse files Browse the repository at this point in the history
fixes #251
  • Loading branch information
jdanyow committed Jan 23, 2016
1 parent 6f2dc94 commit 86722fa
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/checked-observer.js
Expand Up @@ -18,6 +18,7 @@ export class CheckedObserver {
if (this.value === newValue) {
return;
}

// unsubscribe from old array.
if (this.arrayObserver) {
this.arrayObserver.unsubscribe(checkedArrayContext, this);
Expand All @@ -29,8 +30,10 @@ export class CheckedObserver {
this.arrayObserver.subscribe(checkedArrayContext, this);
}
// assign and sync element.
this.oldValue = this.value;
this.value = newValue;
this.synchronizeElement();
this.notify();
// queue up an initial sync after the bindings have been evaluated.
if (!this.initialSync) {
this.initialSync = true;
Expand Down
2 changes: 2 additions & 0 deletions src/select-value-observer.js
Expand Up @@ -33,8 +33,10 @@ export class SelectValueObserver {
this.arrayObserver.subscribe(selectArrayContext, this);
}
// assign and sync element.
this.oldValue = this.value;
this.value = newValue;
this.synchronizeOptions();
this.notify();
// queue up an initial sync after the bindings have been evaluated.
if (!this.initialSync) {
this.initialSync = true;
Expand Down
50 changes: 50 additions & 0 deletions test/checked-observer.spec.js
Expand Up @@ -49,6 +49,16 @@ describe('CheckedObserver', () => {
}, 0);
});

it('notifies', () => {
let targetObserver = binding.targetObserver;
let spy = jasmine.createSpy('callback');
let oldValue = binding.targetObserver.getValue();
let newValue = [];
targetObserver.subscribe(spy);
targetObserver.setValue(newValue);
expect(spy).toHaveBeenCalledWith(newValue, oldValue);
});

it('unbinds', () => {
var targetObserver = binding.targetObserver;
spyOn(targetObserver, 'unbind').and.callThrough();
Expand Down Expand Up @@ -94,6 +104,16 @@ describe('CheckedObserver', () => {
}, 0);
});

it('notifies', () => {
let targetObserver = binding.targetObserver;
let spy = jasmine.createSpy('callback');
let oldValue = binding.targetObserver.getValue();
let newValue = [];
targetObserver.subscribe(spy);
targetObserver.setValue(newValue);
expect(spy).toHaveBeenCalledWith(newValue, oldValue);
});

it('unbinds', () => {
var targetObserver = binding.targetObserver;
spyOn(targetObserver, 'unbind').and.callThrough();
Expand Down Expand Up @@ -140,6 +160,16 @@ describe('CheckedObserver', () => {
}, 0);
});

it('notifies', () => {
let targetObserver = binding.targetObserver;
let spy = jasmine.createSpy('callback');
let oldValue = binding.targetObserver.getValue();
let newValue = [];
targetObserver.subscribe(spy);
targetObserver.setValue(newValue);
expect(spy).toHaveBeenCalledWith(newValue, oldValue);
});

it('unbinds', () => {
var targetObserver = binding.targetObserver;
spyOn(targetObserver, 'unbind').and.callThrough();
Expand Down Expand Up @@ -184,6 +214,16 @@ describe('CheckedObserver', () => {
}, 0);
});

it('notifies', () => {
let targetObserver = binding.targetObserver;
let spy = jasmine.createSpy('callback');
let oldValue = binding.targetObserver.getValue();
let newValue = true;
targetObserver.subscribe(spy);
targetObserver.setValue(newValue);
expect(spy).toHaveBeenCalledWith(newValue, oldValue);
});

it('unbinds', () => {
var targetObserver = binding.targetObserver;
spyOn(targetObserver, 'unbind').and.callThrough();
Expand Down Expand Up @@ -234,6 +274,16 @@ describe('CheckedObserver', () => {
}, 0);
});

it('notifies', () => {
let targetObserver = binding.targetObserver;
let spy = jasmine.createSpy('callback');
let oldValue = binding.targetObserver.getValue();
let newValue = [];
targetObserver.subscribe(spy);
targetObserver.setValue(newValue);
expect(spy).toHaveBeenCalledWith(newValue, oldValue);
});

it('unbinds', () => {
var targetObserver = binding.targetObserver;
spyOn(targetObserver, 'unbind').and.callThrough();
Expand Down
10 changes: 10 additions & 0 deletions test/select-value-observer.spec.js
Expand Up @@ -98,6 +98,16 @@ describe('SelectValueObserver', () => {
}, 0);
});

it('notifies', () => {
let targetObserver = binding.targetObserver;
let spy = jasmine.createSpy('callback');
let oldValue = binding.targetObserver.getValue();
let newValue = [];
targetObserver.subscribe(spy);
targetObserver.setValue(newValue);
expect(spy).toHaveBeenCalledWith(newValue, oldValue);
});

it('unbinds', () => {
var targetObserver = observerLocator.getObserver(el, 'value');
spyOn(targetObserver, 'unbind').and.callThrough();
Expand Down

0 comments on commit 86722fa

Please sign in to comment.