diff options
author | 杨宇千 <crupest@outlook.com> | 2019-03-11 19:52:29 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-11 19:52:29 +0800 |
commit | 8caef17dd3e455de27f44d13751c27ee4dfe2e1e (patch) | |
tree | 5b485ad438c9be9c180d425453588ff1c575a42d /Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts | |
parent | 17d90077b289c6b2203a34de727dd77c1985f146 (diff) | |
parent | b26342764046d188d223aa494c3bbbf76deb4927 (diff) | |
download | timeline-8caef17dd3e455de27f44d13751c27ee4dfe2e1e.tar.gz timeline-8caef17dd3e455de27f44d13751c27ee4dfe2e1e.tar.bz2 timeline-8caef17dd3e455de27f44d13751c27ee4dfe2e1e.zip |
Merge pull request #11 from crupest/7-user-route
Use named route in user dialog.
Diffstat (limited to 'Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts')
-rw-r--r-- | Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts b/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts new file mode 100644 index 00000000..1743e615 --- /dev/null +++ b/Timeline/ClientApp/src/app/test-utilities/activated-route.mock.ts @@ -0,0 +1,66 @@ +import { ParamMap } from '@angular/router'; + +import { Observable, BehaviorSubject } from 'rxjs'; +import { map } from 'rxjs/operators'; + +export interface ParamMapCreator { [name: string]: string | string[]; } + +export class MockActivatedRouteSnapshot { + + private paramMapInternal: ParamMap; + + constructor({ mockParamMap }: { mockParamMap: ParamMapCreator } = { mockParamMap: {} }) { + this.paramMapInternal = { + keys: Object.keys(mockParamMap), + get(name: string): string | null { + const param = mockParamMap[name]; + if (typeof param === 'string') { + return param; + } else if (param instanceof Array) { + if (param.length === 0) { + return null; + } + return param[0]; + } + return null; + }, + getAll(name: string): string[] { + const param = mockParamMap[name]; + if (typeof param === 'string') { + return [param]; + } else if (param instanceof Array) { + return param; + } + return []; + }, + has(name: string): boolean { + return mockParamMap.hasOwnProperty(name); + } + }; + } + + get paramMap(): ParamMap { + return this.paramMapInternal; + } +} + +export class MockActivatedRoute { + + snapshot$ = new BehaviorSubject<MockActivatedRouteSnapshot>(new MockActivatedRouteSnapshot()); + + get paramMap(): Observable<ParamMap> { + return this.snapshot$.pipe(map(snapshot => snapshot.paramMap)); + } + + get snapshot(): MockActivatedRouteSnapshot { + return this.snapshot$.value; + } + + pushSnapshot(snapshot: MockActivatedRouteSnapshot) { + this.snapshot$.next(snapshot); + } + + pushSnapshotWithParamMap(mockParamMap: ParamMapCreator) { + this.pushSnapshot(new MockActivatedRouteSnapshot({mockParamMap})); + } +} |