Skip to content

Commit 94b3515

Browse files
Add ObservableContainer tests
1 parent b35b7dc commit 94b3515

File tree

3 files changed

+86
-2
lines changed

3 files changed

+86
-2
lines changed

angular-reactive-validation/src/get-form-control-from-container.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { TestBed, async, inject } from '@angular/core/testing';
1+
import { TestBed, inject } from '@angular/core/testing';
22
import { FormBuilder } from '@angular/forms';
33

44
import { getFormControlFromContainer } from './get-form-control-from-container';
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { TestBed, inject } from '@angular/core/testing';
2+
3+
import { ObservableContainer } from './observable-container';
4+
import { Observable } from 'rxjs/Observable';
5+
import { Subject } from 'rxjs/Subject';
6+
7+
describe('ObservableContainer', () => {
8+
let subject: Subject<{}>;
9+
beforeEach(() => {
10+
subject = new Subject();
11+
});
12+
13+
it(`calls the function when the observable emits`, () => {
14+
let called = false;
15+
const container = new ObservableContainer(() => called = true);
16+
17+
container.subscribe({}, () => subject);
18+
expect(called).toBe(false);
19+
subject.next();
20+
expect(called).toBe(true);
21+
});
22+
23+
it(`calls the function on subscribe`, () => {
24+
let called = false;
25+
const container = new ObservableContainer(() => called = true);
26+
27+
container.subscribe({}, () => subject, true);
28+
expect(called).toBe(true);
29+
});
30+
31+
it(`calls the function multiple times when the observable emits multiple times`, () => {
32+
let calls = 0;
33+
const container = new ObservableContainer(() => calls++);
34+
35+
container.subscribe({}, () => subject);
36+
expect(calls).toBe(0);
37+
subject.next();
38+
subject.next();
39+
expect(calls).toBe(2);
40+
});
41+
42+
it(`calls the function once per subscribing object`, () => {
43+
let calls = 0;
44+
const objA = {};
45+
const objB = {};
46+
const container = new ObservableContainer(obj => {
47+
if (calls === 0) {
48+
expect(obj).toEqual(objA);
49+
} else {
50+
expect(obj).toEqual(objB);
51+
}
52+
calls++;
53+
});
54+
55+
container.subscribe([objA, {}], () => subject);
56+
expect(calls).toBe(0);
57+
subject.next();
58+
expect(calls).toBe(2);
59+
});
60+
61+
it(`unsubscribes and no longer calls the function when the observable emits`, () => {
62+
let calls = 0;
63+
const container = new ObservableContainer(() => calls++);
64+
65+
container.subscribe([{}, {}], () => subject);
66+
expect(subject.observers.length).toBe(2);
67+
68+
container.unsubscribeAll();
69+
expect(subject.observers.length).toBe(0);
70+
71+
subject.next();
72+
expect(calls).toBe(0);
73+
});
74+
75+
it(`doesn't subscribe or call the function when no objects are provided`, () => {
76+
let called = false;
77+
const container = new ObservableContainer(() => called = true);
78+
79+
container.subscribe([], () => subject);
80+
expect(subject.observers.length).toBe(0);
81+
expect(called).toBe(false);
82+
subject.next();
83+
expect(called).toBe(false);
84+
});
85+
});

angular-reactive-validation/src/observable-container.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { AfterContentInit } from '@angular/core';
99
*/
1010
export class ObservableContainer<T> {
1111
private subscriptions: Subscription[] = [];
12-
private functionsToExecuteAfterContentInit: (() => void)[] = [];
1312

1413
/**
1514
* @param nextFunction The function which should be called when the Observable emits.

0 commit comments

Comments
 (0)