Skip to content

Commit c0da4d4

Browse files
authored
Fixes bug in observable event adaptor. (microsoft#188196)
1 parent bfdd302 commit c0da4d4

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/vs/base/common/event.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ export namespace Event {
682682
}
683683
};
684684
observable.addObserver(observer);
685+
observable.reportChanges();
685686
return {
686687
dispose() {
687688
observable.removeObserver(observer);

src/vs/base/test/common/observable.test.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import * as assert from 'assert';
7-
import { Emitter } from 'vs/base/common/event';
7+
import { Emitter, Event } from 'vs/base/common/event';
88
import { ISettableObservable, autorun, derived, ITransaction, observableFromEvent, observableValue, transaction, keepAlive } from 'vs/base/common/observable';
99
import { BaseObservable, IObservable, IObserver } from 'vs/base/common/observableImpl/base';
1010

@@ -962,6 +962,36 @@ suite('observables', () => {
962962
myObservable2.set(1, tx);
963963
});
964964
});
965+
966+
test('bug: fromObservableLight doesnt subscribe', () => {
967+
const log = new Log();
968+
const myObservable = new LoggingObservableValue('myObservable', 0, log);
969+
970+
const myDerived = derived('myDerived', reader => {
971+
const val = myObservable.read(reader);
972+
log.log(`myDerived.computed(myObservable2: ${val})`);
973+
return val % 10;
974+
});
975+
976+
const e = Event.fromObservableLight(myDerived);
977+
log.log('event created');
978+
e(() => {
979+
log.log('event fired');
980+
});
981+
982+
myObservable.set(1, undefined);
983+
984+
assert.deepStrictEqual(log.getAndClearEntries(), [
985+
'event created',
986+
'myObservable.firstObserverAdded',
987+
'myObservable.get',
988+
'myDerived.computed(myObservable2: 0)',
989+
'myObservable.set (value 1)',
990+
'myObservable.get',
991+
'myDerived.computed(myObservable2: 1)',
992+
'event fired',
993+
]);
994+
});
965995
});
966996

967997
export class LoggingObserver implements IObserver {

0 commit comments

Comments
 (0)