@granito/vitest-marbles 1.0.0-dev.2 → 1.0.0-dev.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +3 -0
- package/index.d.ts.map +1 -0
- package/index.js +37 -0
- package/{dist/src → lib}/marbles-glossary.d.ts +1 -0
- package/lib/marbles-glossary.d.ts.map +1 -0
- package/{dist/index.d.ts → lib/marbles.d.ts} +4 -3
- package/lib/marbles.d.ts.map +1 -0
- package/{dist/src → lib}/marblizer.d.ts +1 -0
- package/lib/marblizer.d.ts.map +1 -0
- package/{dist/src → lib}/notification-event.d.ts +1 -0
- package/lib/notification-event.d.ts.map +1 -0
- package/{dist/src → lib}/notification-kind.d.ts +1 -0
- package/lib/notification-kind.d.ts.map +1 -0
- package/{dist/src → lib}/rxjs/assert-deep-equal.d.ts +1 -0
- package/lib/rxjs/assert-deep-equal.d.ts.map +1 -0
- package/{dist/src → lib}/rxjs/cold-observable.d.ts +1 -0
- package/lib/rxjs/cold-observable.d.ts.map +1 -0
- package/{dist/src → lib}/rxjs/hot-observable.d.ts +1 -0
- package/lib/rxjs/hot-observable.d.ts.map +1 -0
- package/{dist/src → lib}/rxjs/scheduler.d.ts +1 -0
- package/lib/rxjs/scheduler.d.ts.map +1 -0
- package/{dist/src → lib}/rxjs/strip-alignment-chars.d.ts +1 -0
- package/lib/rxjs/strip-alignment-chars.d.ts.map +1 -0
- package/{dist/src → lib}/rxjs/types.d.ts +1 -0
- package/lib/rxjs/types.d.ts.map +1 -0
- package/{dist/src → lib}/vitest/custom-matchers.d.ts +1 -0
- package/lib/vitest/custom-matchers.d.ts.map +1 -0
- package/package.json +48 -21
- package/dist/index.js +0 -60
- package/dist/index.js.map +0 -1
- package/dist/src/marbles-glossary.js +0 -11
- package/dist/src/marbles-glossary.js.map +0 -1
- package/dist/src/marblizer.js +0 -47
- package/dist/src/marblizer.js.map +0 -1
- package/dist/src/notification-event.js +0 -11
- package/dist/src/notification-event.js.map +0 -1
- package/dist/src/notification-kind.js +0 -8
- package/dist/src/notification-kind.js.map +0 -1
- package/dist/src/rxjs/assert-deep-equal.js +0 -19
- package/dist/src/rxjs/assert-deep-equal.js.map +0 -1
- package/dist/src/rxjs/cold-observable.js +0 -19
- package/dist/src/rxjs/cold-observable.js.map +0 -1
- package/dist/src/rxjs/hot-observable.js +0 -19
- package/dist/src/rxjs/hot-observable.js.map +0 -1
- package/dist/src/rxjs/scheduler.js +0 -22
- package/dist/src/rxjs/scheduler.js.map +0 -1
- package/dist/src/rxjs/strip-alignment-chars.js +0 -4
- package/dist/src/rxjs/strip-alignment-chars.js.map +0 -1
- package/dist/src/rxjs/types.js +0 -2
- package/dist/src/rxjs/types.js.map +0 -1
- package/dist/src/vitest/custom-matchers.js +0 -103
- package/dist/src/vitest/custom-matchers.js.map +0 -1
package/index.d.ts
ADDED
package/index.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAA"}
|
package/index.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import{Observable as H}from"rxjs";import{TestScheduler as B}from"rxjs/testing";var p=class{constructor(t){this.start=t}marbles="";get end(){return this.start+this.marbles.length}};var f={},d={N:f,C:"|",E:"#"};var h=10,c=class e{static marblize(t){let s=e.getNotificationEvents(t),r="";for(let i=0,o=0;i<s.length;o=s[i].end,i++)r=`${r}${"-".repeat(s[i].start-o)+s[i].marbles}`;return r}static marblizeSubscriptions(t){return t.map(s=>this.marblizeLogEntry(s.subscribedFrame/h,"^")+this.marblizeLogEntry((s.unsubscribedFrame-s.subscribedFrame)/h-1,"!"))}static marblizeLogEntry(t,s){return t!==1/0?"-".repeat(t)+s:""}static getNotificationEvents(t){let s=t.reduce((i,o)=>{i[o.frame]||(i[o.frame]=new p(o.frame/h));let a=i[o.frame];return a.marbles+=e.extractMarble(o),i},{}),r=Object.keys(s).map(i=>s[Number(i)]);return e.encloseGroupEvents(r),r}static extractMarble(t){let s=d[t.notification.kind];return s===f&&(s=t.notification.value),s}static encloseGroupEvents(t){t.forEach(s=>{s.marbles.length>1&&(s.marbles=`(${s.marbles})`)})}};var x={toBeNotifications(e,t){let s=e,r=t;E(e,t)&&(s=c.marblize(e),r=c.marblize(t));let i=this.equals(s,r);return{pass:i,message:i?()=>this.utils.matcherHint(".not.toBeNotifications")+`
|
|
2
|
+
|
|
3
|
+
Expected notifications to not be:
|
|
4
|
+
${this.utils.printExpected(r)}
|
|
5
|
+
But got:
|
|
6
|
+
${this.utils.printReceived(s)}`:()=>{let a=this.utils.diff(r,s,{expand:!0});return this.utils.matcherHint(".toBeNotifications")+`
|
|
7
|
+
|
|
8
|
+
Expected notifications to be:
|
|
9
|
+
${this.utils.printExpected(r)}
|
|
10
|
+
But got:
|
|
11
|
+
${this.utils.printReceived(s)}`+(a?`
|
|
12
|
+
|
|
13
|
+
Difference:
|
|
14
|
+
|
|
15
|
+
${a}`:"")}}},toBeSubscriptions(e,t){let s=c.marblizeSubscriptions(e),r=c.marblizeSubscriptions(t),i=M(s,r);return{pass:i,message:i?()=>this.utils.matcherHint(".not.toHaveSubscriptions")+`
|
|
16
|
+
|
|
17
|
+
Expected observable to not have the following subscription points:
|
|
18
|
+
${this.utils.printExpected(r)}
|
|
19
|
+
But got:
|
|
20
|
+
${this.utils.printReceived(s)}`:()=>{let a=this.utils.diff(r,s,{expand:!0});return this.utils.matcherHint(".toHaveSubscriptions")+`
|
|
21
|
+
|
|
22
|
+
Expected observable to have the following subscription points:
|
|
23
|
+
${this.utils.printExpected(r)}
|
|
24
|
+
But got:
|
|
25
|
+
${this.utils.printReceived(s)}`+(a?`
|
|
26
|
+
|
|
27
|
+
Difference:
|
|
28
|
+
|
|
29
|
+
${a}`:"")}}},toHaveEmptySubscriptions(e){let t=!(e&&e.length>0),s;return e&&e.length>0&&(s=c.marblizeSubscriptions(e)),{pass:t,message:t?()=>this.utils.matcherHint(".not.toHaveNoSubscriptions")+`
|
|
30
|
+
|
|
31
|
+
Expected observable to have at least one subscription point, but got nothing`+this.utils.printReceived(""):()=>this.utils.matcherHint(".toHaveNoSubscriptions")+`
|
|
32
|
+
|
|
33
|
+
Expected observable to have no subscription points
|
|
34
|
+
But got:
|
|
35
|
+
${this.utils.printReceived(s)}
|
|
36
|
+
|
|
37
|
+
`}}};expect.extend(x);function E(...e){return e.every(O)}function O(e){return e.every(({notification:t})=>t.kind==="C"||t.kind==="E"&&t.error==="error"||t.kind==="N"&&T(t.value))}function T(e){return typeof e=="string"&&e.length===1||e!==void 0&&JSON.stringify(e).length===1}function M(e,t){if(e.length!==t.length)return!1;let s=!0;for(let r of e)if(!t.includes(r)){s=!1;break}return s}function y(e,t){return e.length===0&&t.length===0||t.length!==0&&t[0].subscribedFrame!==void 0}function R(e,t){return t.length===0&&e.length!==0&&e[0].subscribedFrame!==void 0}function S(e,t){t&&(R(e,t)?expect(e).toHaveEmptySubscriptions():y(e,t)?expect(e).toBeSubscriptions(t):expect(e).toBeNotifications(t))}var n=class e{static instance;static init(){e.instance=new B(S)}static get(){if(e.instance)return e.instance;throw new Error("Scheduler is not initialized")}static reset(){e.instance=null}static materializeInnerObservable(t,s){return e.get().materializeInnerObservable(t,s)}};var l=class extends H{constructor(s,r,i){super();this.marbles=s;this.values=r;this.error=i;this.source=n.get().createColdObservable(s,r,i)}source;getSubscriptions(){return this.source.subscriptions}};import{Observable as L}from"rxjs";var m=class extends L{constructor(s,r,i){super();this.marbles=s;this.values=r;this.error=i;this.source=n.get().createHotObservable(s,r,i)}source;getSubscriptions(){return this.source.subscriptions}};function u(e){return e.replace(/^ +/,"")}import{TestScheduler as N}from"rxjs/testing";function ie(e,t,s){return new m(u(e),t,s)}function ne(e,t,s){return new l(u(e),t,s)}function oe(e){return n.get().createTime(u(e))}function ce(e,t){return n.get().schedule(e,t)}var b={message:()=>"",pass:!0};expect.extend({toHaveSubscriptions(e,t){let s=Array.isArray(t)?t.map(u):u(t);return n.get().expectSubscriptions(e.getSubscriptions()).toBe(s),b},toHaveNoSubscriptions(e){return n.get().expectSubscriptions(e.getSubscriptions()).toBe([]),b},toBeObservable(e,t){return n.get().expectObservable(e).toBe(t.marbles,t.values,t.error),b},toBeMarble(e,t){return n.get().expectObservable(e).toBe(u(t)),b},toSatisfyOnFlush(e,t){n.get().expectObservable(e);let s=n.get().flushTests;return s[s.length-1].ready=!0,g.push(t),b}});var g=[];beforeEach(()=>{n.init(),g=[]});afterEach(()=>{for(n.get().run(()=>N.frameTimeFactor=10);g.length>0;)g.shift()?.();n.reset()});export{n as Scheduler,ne as cold,ie as hot,ce as schedule,oe as time};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marbles-glossary.d.ts","sourceRoot":"","sources":["../../src/lib/marbles-glossary.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,UAAU,MAAM;IAChB,KAAK,MAAM;IACX,SAAS,MAAM;IACf,YAAY,MAAM;IAClB,cAAc,MAAM;IACpB,UAAU,MAAM;IAChB,QAAQ,MAAM;CACf"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ColdObservable } from './
|
|
2
|
-
import { HotObservable } from './
|
|
1
|
+
import { ColdObservable } from './rxjs/cold-observable';
|
|
2
|
+
import { HotObservable } from './rxjs/hot-observable';
|
|
3
3
|
import { Subscription } from 'rxjs';
|
|
4
4
|
export type ObservableWithSubscriptions = ColdObservable | HotObservable;
|
|
5
|
-
export { Scheduler } from './src/rxjs/scheduler';
|
|
6
5
|
interface CustomMatchers<R = unknown> {
|
|
7
6
|
toBeObservable(observable: ObservableWithSubscriptions): R;
|
|
8
7
|
toHaveSubscriptions(marbles: string | string[]): R;
|
|
@@ -18,3 +17,5 @@ export declare function hot(marbles: string, values?: object, error?: object): H
|
|
|
18
17
|
export declare function cold(marbles: string, values?: object, error?: object): ColdObservable;
|
|
19
18
|
export declare function time(marbles: string): number;
|
|
20
19
|
export declare function schedule(work: () => void, delay: number): Subscription;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=marbles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marbles.d.ts","sourceRoot":"","sources":["../../src/lib/marbles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGpC,MAAM,MAAM,2BAA2B,GAAG,cAAc,GAAG,aAAa,CAAC;AAEzE,UAAU,cAAc,CAAC,CAAC,GAAG,OAAO;IAClC,cAAc,CAAC,UAAU,EAAE,2BAA2B,GAAG,CAAC,CAAC;IAE3D,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IAEnD,qBAAqB,IAAI,CAAC,CAAC;IAE3B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;IAE9B,gBAAgB,CAAC,IAAI,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;CACvC;AAED,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;KACpD;CACF;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAEnF;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAErF;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,CAEtE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marblizer.d.ts","sourceRoot":"","sources":["../../src/lib/marblizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO7D,qBAAa,SAAS;WACN,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;WAYxC,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE;IAQtE,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAI/B,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAqBpC,OAAO,CAAC,MAAM,CAAC,aAAa;IAS5B,OAAO,CAAC,MAAM,CAAC,kBAAkB;CAMlC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-event.d.ts","sourceRoot":"","sources":["../../src/lib/notification-event.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAGT,KAAK,EAAE,MAAM;IAFhC,OAAO,SAAM;gBAEM,KAAK,EAAE,MAAM;IAGhC,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-kind.d.ts","sourceRoot":"","sources":["../../src/lib/notification-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,eAAO,MAAM,YAAY,IAAK,CAAC;AAE/B,eAAO,MAAM,qBAAqB;;;;CAIjC,CAAC"}
|
|
@@ -2,3 +2,4 @@ import { SubscriptionLog, TestMessages } from './types';
|
|
|
2
2
|
import '../vitest/custom-matchers';
|
|
3
3
|
export type MessageOrSubscription = TestMessages | SubscriptionLog[];
|
|
4
4
|
export declare function assertDeepEqual(actual: MessageOrSubscription, expected: MessageOrSubscription): void;
|
|
5
|
+
//# sourceMappingURL=assert-deep-equal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-deep-equal.d.ts","sourceRoot":"","sources":["../../../src/lib/rxjs/assert-deep-equal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,2BAA2B,CAAC;AAEnC,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,eAAe,EAAE,CAAC;AAarE,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB,QAU7F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cold-observable.d.ts","sourceRoot":"","sources":["../../../src/lib/rxjs/cold-observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,qBAAa,cAAe,SAAQ,UAAU,CAAC,GAAG,CAAC;IAG9B,OAAO,EAAE,MAAM;IAAS,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAAS,KAAK,CAAC,EAAE,GAAG;IAFlF,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC,CAAC;gBAEhD,OAAO,EAAE,MAAM,EAAS,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAA,EAAS,KAAK,CAAC,EAAE,GAAG,YAAA;IAM3F,gBAAgB,IAAI,eAAe,EAAE;CAGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hot-observable.d.ts","sourceRoot":"","sources":["../../../src/lib/rxjs/hot-observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,qBAAa,aAAc,SAAQ,UAAU,CAAC,GAAG,CAAC;IAG7B,OAAO,EAAE,MAAM;IAAS,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAAS,KAAK,CAAC,EAAE,GAAG;IAFlF,MAAM,EAAE,UAAU,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAE/C,OAAO,EAAE,MAAM,EAAS,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,YAAA,EAAS,KAAK,CAAC,EAAE,GAAG,YAAA;IAM3F,gBAAgB,IAAI,eAAe,EAAE;CAGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/lib/rxjs/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,qBAAa,SAAS;IACpB,OAAc,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;WAE/B,IAAI,IAAI,IAAI;WAIZ,GAAG,IAAI,aAAa;WAOpB,KAAK,IAAI,IAAI;WAIb,0BAA0B,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;CAMxG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-alignment-chars.d.ts","sourceRoot":"","sources":["../../../src/lib/rxjs/strip-alignment-chars.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,UAElD"}
|
|
@@ -7,3 +7,4 @@ export type TestMessages = ReturnType<typeof TestScheduler.parseMarbles>;
|
|
|
7
7
|
* Exported return type of SubscriptionLog to avoid importing internal APIs.
|
|
8
8
|
*/
|
|
9
9
|
export type SubscriptionLog = ReturnType<typeof TestScheduler.parseMarblesAsSubscriptions>;
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/rxjs/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-matchers.d.ts","sourceRoot":"","sources":["../../../src/lib/vitest/custom-matchers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,EAAqB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE,UAAU,cAAc,CAAC,CAAC,GAAG,OAAO;IAClC,iBAAiB,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC,CAAC;IAEjD,iBAAiB,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;IAE3D,wBAAwB,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,eAAO,MAAM,kBAAkB,EAAE,cA4FhC,CAAA;AAKD,OAAO,QAAQ,QAAQ,CAAC;IACtB,UAAU,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;KACpD;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@granito/vitest-marbles",
|
|
3
|
-
"version": "1.0.0-dev.
|
|
3
|
+
"version": "1.0.0-dev.3",
|
|
4
4
|
"description": "Marble testing helpers library for RxJs and Vitest",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,38 +20,65 @@
|
|
|
20
20
|
"node": ">=22",
|
|
21
21
|
"npm": ">=10"
|
|
22
22
|
},
|
|
23
|
-
"scripts": {
|
|
24
|
-
"build": "tsc",
|
|
25
|
-
"test": "vitest --no-watch"
|
|
26
|
-
},
|
|
27
|
-
"publishConfig": {
|
|
28
|
-
"access": "public",
|
|
29
|
-
"tag": "latest"
|
|
30
|
-
},
|
|
31
23
|
"files": [
|
|
32
|
-
"
|
|
24
|
+
"./"
|
|
33
25
|
],
|
|
34
26
|
"type": "module",
|
|
27
|
+
"main": "./index.js",
|
|
28
|
+
"module": "./index.js",
|
|
29
|
+
"types": "./index.d.ts",
|
|
35
30
|
"exports": {
|
|
36
|
-
"./package.json":
|
|
37
|
-
"default": "./package.json"
|
|
38
|
-
},
|
|
31
|
+
"./package.json": "./package.json",
|
|
39
32
|
".": {
|
|
40
|
-
"types": "./
|
|
41
|
-
"
|
|
33
|
+
"types": "./index.d.ts",
|
|
34
|
+
"import": "./index.js",
|
|
35
|
+
"default": "./index.js"
|
|
42
36
|
}
|
|
43
37
|
},
|
|
44
|
-
"
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public",
|
|
40
|
+
"tag": "latest"
|
|
41
|
+
},
|
|
47
42
|
"devDependencies": {
|
|
48
|
-
"
|
|
43
|
+
"@nx/esbuild": "22.1.2",
|
|
44
|
+
"@nx/js": "22.1.2",
|
|
45
|
+
"@nx/vitest": "22.1.2",
|
|
46
|
+
"@types/node": "20.19.9",
|
|
47
|
+
"esbuild": "^0.27.0",
|
|
48
|
+
"jsdom": "~22.1.0",
|
|
49
|
+
"nx": "22.1.2",
|
|
49
50
|
"rxjs": "^7.8.2",
|
|
50
|
-
"
|
|
51
|
-
"
|
|
51
|
+
"tslib": "^2.3.0",
|
|
52
|
+
"typescript": "~5.9.2",
|
|
53
|
+
"vite": "^7.2.4",
|
|
54
|
+
"vitest": "^4.0.0"
|
|
52
55
|
},
|
|
53
56
|
"peerDependencies": {
|
|
54
57
|
"rxjs": "^7.0.0",
|
|
55
58
|
"vitest": "^4.0.0"
|
|
59
|
+
},
|
|
60
|
+
"nx": {
|
|
61
|
+
"targets": {
|
|
62
|
+
"build": {
|
|
63
|
+
"executor": "@nx/esbuild:esbuild",
|
|
64
|
+
"outputs": [
|
|
65
|
+
"{options.outputPath}"
|
|
66
|
+
],
|
|
67
|
+
"options": {
|
|
68
|
+
"outputPath": "dist",
|
|
69
|
+
"main": "src/index.ts",
|
|
70
|
+
"tsConfig": "tsconfig.lib.json",
|
|
71
|
+
"format": [
|
|
72
|
+
"esm"
|
|
73
|
+
],
|
|
74
|
+
"declarationRootDir": "src",
|
|
75
|
+
"minify": true,
|
|
76
|
+
"assets": [
|
|
77
|
+
"LICENSE",
|
|
78
|
+
"README.md"
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
56
83
|
}
|
|
57
84
|
}
|
package/dist/index.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { ColdObservable } from './src/rxjs/cold-observable';
|
|
2
|
-
import { HotObservable } from './src/rxjs/hot-observable';
|
|
3
|
-
import { Scheduler } from './src/rxjs/scheduler';
|
|
4
|
-
import { stripAlignmentChars } from './src/rxjs/strip-alignment-chars';
|
|
5
|
-
import { TestScheduler } from 'rxjs/testing';
|
|
6
|
-
export { Scheduler } from './src/rxjs/scheduler';
|
|
7
|
-
export function hot(marbles, values, error) {
|
|
8
|
-
return new HotObservable(stripAlignmentChars(marbles), values, error);
|
|
9
|
-
}
|
|
10
|
-
export function cold(marbles, values, error) {
|
|
11
|
-
return new ColdObservable(stripAlignmentChars(marbles), values, error);
|
|
12
|
-
}
|
|
13
|
-
export function time(marbles) {
|
|
14
|
-
return Scheduler.get().createTime(stripAlignmentChars(marbles));
|
|
15
|
-
}
|
|
16
|
-
export function schedule(work, delay) {
|
|
17
|
-
return Scheduler.get().schedule(work, delay);
|
|
18
|
-
}
|
|
19
|
-
const dummyResult = {
|
|
20
|
-
message: () => '',
|
|
21
|
-
pass: true,
|
|
22
|
-
};
|
|
23
|
-
expect.extend({
|
|
24
|
-
toHaveSubscriptions(actual, marbles) {
|
|
25
|
-
const sanitizedMarbles = Array.isArray(marbles) ? marbles.map(stripAlignmentChars) : stripAlignmentChars(marbles);
|
|
26
|
-
Scheduler.get().expectSubscriptions(actual.getSubscriptions()).toBe(sanitizedMarbles);
|
|
27
|
-
return dummyResult;
|
|
28
|
-
},
|
|
29
|
-
toHaveNoSubscriptions(actual) {
|
|
30
|
-
Scheduler.get().expectSubscriptions(actual.getSubscriptions()).toBe([]);
|
|
31
|
-
return dummyResult;
|
|
32
|
-
},
|
|
33
|
-
toBeObservable(actual, expected) {
|
|
34
|
-
Scheduler.get().expectObservable(actual).toBe(expected.marbles, expected.values, expected.error);
|
|
35
|
-
return dummyResult;
|
|
36
|
-
},
|
|
37
|
-
toBeMarble(actual, marbles) {
|
|
38
|
-
Scheduler.get().expectObservable(actual).toBe(stripAlignmentChars(marbles));
|
|
39
|
-
return dummyResult;
|
|
40
|
-
},
|
|
41
|
-
toSatisfyOnFlush(actual, func) {
|
|
42
|
-
Scheduler.get().expectObservable(actual);
|
|
43
|
-
const flushTests = Scheduler.get()['flushTests'];
|
|
44
|
-
flushTests[flushTests.length - 1].ready = true;
|
|
45
|
-
onFlush.push(func);
|
|
46
|
-
return dummyResult;
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
let onFlush = [];
|
|
50
|
-
beforeEach(() => {
|
|
51
|
-
Scheduler.init();
|
|
52
|
-
onFlush = [];
|
|
53
|
-
});
|
|
54
|
-
afterEach(() => {
|
|
55
|
-
Scheduler.get().run(() => TestScheduler.frameTimeFactor = 10);
|
|
56
|
-
while (onFlush.length > 0)
|
|
57
|
-
onFlush.shift()?.();
|
|
58
|
-
Scheduler.reset();
|
|
59
|
-
});
|
|
60
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export var MarblesGlossary;
|
|
2
|
-
(function (MarblesGlossary) {
|
|
3
|
-
MarblesGlossary["Completion"] = "|";
|
|
4
|
-
MarblesGlossary["Error"] = "#";
|
|
5
|
-
MarblesGlossary["TimeFrame"] = "-";
|
|
6
|
-
MarblesGlossary["Subscription"] = "^";
|
|
7
|
-
MarblesGlossary["Unsubscription"] = "!";
|
|
8
|
-
MarblesGlossary["GroupStart"] = "(";
|
|
9
|
-
MarblesGlossary["GroupEnd"] = ")";
|
|
10
|
-
})(MarblesGlossary || (MarblesGlossary = {}));
|
|
11
|
-
//# sourceMappingURL=marbles-glossary.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"marbles-glossary.js","sourceRoot":"","sources":["../../src/marbles-glossary.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,mCAAgB,CAAA;IAChB,8BAAW,CAAA;IACX,kCAAe,CAAA;IACf,qCAAkB,CAAA;IAClB,uCAAoB,CAAA;IACpB,mCAAgB,CAAA;IAChB,iCAAc,CAAA;AAChB,CAAC,EARW,eAAe,KAAf,eAAe,QAQ1B"}
|
package/dist/src/marblizer.js
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { MarblesGlossary } from './marbles-glossary';
|
|
2
|
-
import { NotificationEvent } from './notification-event';
|
|
3
|
-
import { NotificationKindChars, ValueLiteral } from './notification-kind';
|
|
4
|
-
const frameStep = 10;
|
|
5
|
-
export class Marblizer {
|
|
6
|
-
static marblize(messages) {
|
|
7
|
-
const emissions = Marblizer.getNotificationEvents(messages);
|
|
8
|
-
let marbles = '';
|
|
9
|
-
for (let i = 0, prevEndFrame = 0; i < emissions.length; prevEndFrame = emissions[i].end, i++)
|
|
10
|
-
marbles = `${marbles}${MarblesGlossary.TimeFrame.repeat(emissions[i].start - prevEndFrame) + emissions[i].marbles}`;
|
|
11
|
-
return marbles;
|
|
12
|
-
}
|
|
13
|
-
static marblizeSubscriptions(logs) {
|
|
14
|
-
return logs.map(log => this.marblizeLogEntry(log.subscribedFrame / frameStep, MarblesGlossary.Subscription) +
|
|
15
|
-
this.marblizeLogEntry((log.unsubscribedFrame - log.subscribedFrame) / frameStep - 1, MarblesGlossary.Unsubscription));
|
|
16
|
-
}
|
|
17
|
-
static marblizeLogEntry(logPoint, symbol) {
|
|
18
|
-
return logPoint !== Infinity ? MarblesGlossary.TimeFrame.repeat(logPoint) + symbol : '';
|
|
19
|
-
}
|
|
20
|
-
static getNotificationEvents(messages) {
|
|
21
|
-
const framesToEmissions = messages.reduce((result, message) => {
|
|
22
|
-
if (!result[message.frame])
|
|
23
|
-
result[message.frame] = new NotificationEvent(message.frame / frameStep);
|
|
24
|
-
const event = result[message.frame];
|
|
25
|
-
event.marbles += Marblizer.extractMarble(message);
|
|
26
|
-
return result;
|
|
27
|
-
}, {});
|
|
28
|
-
const events = Object
|
|
29
|
-
.keys(framesToEmissions)
|
|
30
|
-
.map(frame => framesToEmissions[Number(frame)]);
|
|
31
|
-
Marblizer.encloseGroupEvents(events);
|
|
32
|
-
return events;
|
|
33
|
-
}
|
|
34
|
-
static extractMarble(message) {
|
|
35
|
-
let marble = NotificationKindChars[message.notification.kind];
|
|
36
|
-
if (marble === ValueLiteral)
|
|
37
|
-
marble = message.notification.value;
|
|
38
|
-
return marble;
|
|
39
|
-
}
|
|
40
|
-
static encloseGroupEvents(events) {
|
|
41
|
-
events.forEach(event => {
|
|
42
|
-
if (event.marbles.length > 1)
|
|
43
|
-
event.marbles = `${MarblesGlossary.GroupStart}${event.marbles}${MarblesGlossary.GroupEnd}`;
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=marblizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"marblizer.js","sourceRoot":"","sources":["../../src/marblizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-event.js","sourceRoot":"","sources":["../../src/notification-event.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;IAGT;IAFnB,OAAO,GAAG,EAAE,CAAC;IAEb,YAAmB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAChC,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notification-kind.js","sourceRoot":"","sources":["../../src/notification-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAE/B,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,CAAC,EAAE,YAAY;IACf,CAAC,EAAE,eAAe,CAAC,UAAU;IAC7B,CAAC,EAAE,eAAe,CAAC,KAAK;CACzB,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import '../vitest/custom-matchers';
|
|
2
|
-
function expectedIsSubscriptionLogArray(actual, expected) {
|
|
3
|
-
return actual.length === 0 && expected.length === 0 ||
|
|
4
|
-
expected.length !== 0 && expected[0].subscribedFrame !== undefined;
|
|
5
|
-
}
|
|
6
|
-
function actualIsSubscriptionsAndExpectedIsEmpty(actual, expected) {
|
|
7
|
-
return expected.length === 0 && actual.length !== 0 && actual[0].subscribedFrame !== undefined;
|
|
8
|
-
}
|
|
9
|
-
export function assertDeepEqual(actual, expected) {
|
|
10
|
-
if (!expected)
|
|
11
|
-
return;
|
|
12
|
-
if (actualIsSubscriptionsAndExpectedIsEmpty(actual, expected))
|
|
13
|
-
expect(actual).toHaveEmptySubscriptions();
|
|
14
|
-
else if (expectedIsSubscriptionLogArray(actual, expected))
|
|
15
|
-
expect(actual).toBeSubscriptions(expected);
|
|
16
|
-
else
|
|
17
|
-
expect(actual).toBeNotifications(expected);
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=assert-deep-equal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assert-deep-equal.js","sourceRoot":"","sources":["../../../src/rxjs/assert-deep-equal.ts"],"names":[],"mappings":"AACA,OAAO,2BAA2B,CAAC;AAInC,SAAS,8BAA8B,CAAC,MAA6B,EACnE,QAA+B;IAC/B,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACjD,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAK,QAAQ,CAAC,CAAC,CAAS,CAAC,eAAe,KAAK,SAAS,CAAC;AAChF,CAAC;AAED,SAAS,uCAAuC,CAAC,MAA6B,EAC5E,QAA+B;IAC/B,OAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAK,MAAM,CAAC,CAAC,CAAS,CAAC,eAAe,KAAK,SAAS,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA6B,EAAE,QAA+B;IAC5F,IAAI,CAAC,QAAQ;QACX,OAAO;IAET,IAAI,uCAAuC,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,wBAAwB,EAAE,CAAC;SACvC,IAAI,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;QAE3C,MAAM,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { Scheduler } from './scheduler';
|
|
3
|
-
export class ColdObservable extends Observable {
|
|
4
|
-
marbles;
|
|
5
|
-
values;
|
|
6
|
-
error;
|
|
7
|
-
source;
|
|
8
|
-
constructor(marbles, values, error) {
|
|
9
|
-
super();
|
|
10
|
-
this.marbles = marbles;
|
|
11
|
-
this.values = values;
|
|
12
|
-
this.error = error;
|
|
13
|
-
this.source = Scheduler.get().createColdObservable(marbles, values, error);
|
|
14
|
-
}
|
|
15
|
-
getSubscriptions() {
|
|
16
|
-
return this.source.subscriptions;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=cold-observable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cold-observable.js","sourceRoot":"","sources":["../../../src/rxjs/cold-observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,cAAe,SAAQ,UAAe;IAG9B;IAAwB;IAAqC;IAFvE,MAAM,CAAoD;IAEnE,YAAmB,OAAe,EAAS,MAA4B,EAAS,KAAW;QACzF,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAsB;QAAS,UAAK,GAAL,KAAK,CAAM;QAGzF,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { Scheduler } from './scheduler';
|
|
3
|
-
export class HotObservable extends Observable {
|
|
4
|
-
marbles;
|
|
5
|
-
values;
|
|
6
|
-
error;
|
|
7
|
-
source;
|
|
8
|
-
constructor(marbles, values, error) {
|
|
9
|
-
super();
|
|
10
|
-
this.marbles = marbles;
|
|
11
|
-
this.values = values;
|
|
12
|
-
this.error = error;
|
|
13
|
-
this.source = Scheduler.get().createHotObservable(marbles, values, error);
|
|
14
|
-
}
|
|
15
|
-
getSubscriptions() {
|
|
16
|
-
return this.source.subscriptions;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=hot-observable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hot-observable.js","sourceRoot":"","sources":["../../../src/rxjs/hot-observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,OAAO,aAAc,SAAQ,UAAe;IAG7B;IAAwB;IAAqC;IAFvE,MAAM,CAAmD;IAElE,YAAmB,OAAe,EAAS,MAA4B,EAAS,KAAW;QACzF,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAsB;QAAS,UAAK,GAAL,KAAK,CAAM;QAGzF,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5E,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { TestScheduler } from 'rxjs/testing';
|
|
2
|
-
import { assertDeepEqual } from './assert-deep-equal';
|
|
3
|
-
export class Scheduler {
|
|
4
|
-
static instance;
|
|
5
|
-
static init() {
|
|
6
|
-
Scheduler.instance = new TestScheduler(assertDeepEqual);
|
|
7
|
-
}
|
|
8
|
-
static get() {
|
|
9
|
-
if (Scheduler.instance)
|
|
10
|
-
return Scheduler.instance;
|
|
11
|
-
throw new Error('Scheduler is not initialized');
|
|
12
|
-
}
|
|
13
|
-
static reset() {
|
|
14
|
-
Scheduler.instance = null;
|
|
15
|
-
}
|
|
16
|
-
static materializeInnerObservable(observable, outerFrame) {
|
|
17
|
-
const scheduler = Scheduler.get();
|
|
18
|
-
// @ts-expect-error to avoid code duplication
|
|
19
|
-
return scheduler.materializeInnerObservable(observable, outerFrame);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=scheduler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/rxjs/scheduler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,SAAS;IACb,MAAM,CAAC,QAAQ,CAAuB;IAEtC,MAAM,CAAC,IAAI;QAChB,SAAS,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC;IAEM,MAAM,CAAC,GAAG;QACf,IAAI,SAAS,CAAC,QAAQ;YACpB,OAAO,SAAS,CAAC,QAAQ,CAAC;QAE5B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAEM,MAAM,CAAC,KAAK;QACjB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,0BAA0B,CAAC,UAA2B,EAAE,UAAkB;QACtF,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;QAElC,6CAA6C;QAC7C,OAAO,SAAS,CAAC,0BAA0B,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"strip-alignment-chars.js","sourceRoot":"","sources":["../../../src/rxjs/strip-alignment-chars.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/src/rxjs/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/rxjs/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { Marblizer } from '../marblizer';
|
|
2
|
-
export const customTestMatchers = {
|
|
3
|
-
toBeNotifications(actual, expected) {
|
|
4
|
-
let actualMarble = actual;
|
|
5
|
-
let expectedMarble = expected;
|
|
6
|
-
if (canMarblize(actual, expected)) {
|
|
7
|
-
actualMarble = Marblizer.marblize(actual);
|
|
8
|
-
expectedMarble = Marblizer.marblize(expected);
|
|
9
|
-
}
|
|
10
|
-
const pass = this.equals(actualMarble, expectedMarble);
|
|
11
|
-
const message = pass ? () => this.utils.matcherHint('.not.toBeNotifications') +
|
|
12
|
-
'\n\n' +
|
|
13
|
-
`Expected notifications to not be:\n` +
|
|
14
|
-
` ${this.utils.printExpected(expectedMarble)}\n` +
|
|
15
|
-
`But got:\n` +
|
|
16
|
-
` ${this.utils.printReceived(actualMarble)}` : () => {
|
|
17
|
-
const diffString = this.utils.diff(expectedMarble, actualMarble, {
|
|
18
|
-
expand: true,
|
|
19
|
-
});
|
|
20
|
-
return (this.utils.matcherHint('.toBeNotifications') +
|
|
21
|
-
'\n\n' +
|
|
22
|
-
`Expected notifications to be:\n` +
|
|
23
|
-
` ${this.utils.printExpected(expectedMarble)}\n` +
|
|
24
|
-
`But got:\n` +
|
|
25
|
-
` ${this.utils.printReceived(actualMarble)}` +
|
|
26
|
-
(diffString ? `\n\nDifference:\n\n${diffString}` : ''));
|
|
27
|
-
};
|
|
28
|
-
return {
|
|
29
|
-
pass,
|
|
30
|
-
message
|
|
31
|
-
};
|
|
32
|
-
},
|
|
33
|
-
toBeSubscriptions(actual, expected) {
|
|
34
|
-
const actualMarbleArray = Marblizer.marblizeSubscriptions(actual);
|
|
35
|
-
const expectedMarbleArray = Marblizer.marblizeSubscriptions(expected);
|
|
36
|
-
const pass = subscriptionsPass(actualMarbleArray, expectedMarbleArray);
|
|
37
|
-
const message = pass ? () => this.utils.matcherHint('.not.toHaveSubscriptions') +
|
|
38
|
-
'\n\n' +
|
|
39
|
-
`Expected observable to not have the following subscription points:\n` +
|
|
40
|
-
` ${this.utils.printExpected(expectedMarbleArray)}\n` +
|
|
41
|
-
`But got:\n` +
|
|
42
|
-
` ${this.utils.printReceived(actualMarbleArray)}` : () => {
|
|
43
|
-
const diffString = this.utils.diff(expectedMarbleArray, actualMarbleArray, {
|
|
44
|
-
expand: true,
|
|
45
|
-
});
|
|
46
|
-
return (this.utils.matcherHint('.toHaveSubscriptions') +
|
|
47
|
-
'\n\n' +
|
|
48
|
-
`Expected observable to have the following subscription points:\n` +
|
|
49
|
-
` ${this.utils.printExpected(expectedMarbleArray)}\n` +
|
|
50
|
-
`But got:\n` +
|
|
51
|
-
` ${this.utils.printReceived(actualMarbleArray)}` +
|
|
52
|
-
(diffString ? `\n\nDifference:\n\n${diffString}` : ''));
|
|
53
|
-
};
|
|
54
|
-
return {
|
|
55
|
-
pass,
|
|
56
|
-
message
|
|
57
|
-
};
|
|
58
|
-
},
|
|
59
|
-
toHaveEmptySubscriptions(actual) {
|
|
60
|
-
const pass = !(actual && actual.length > 0);
|
|
61
|
-
let marbles;
|
|
62
|
-
if (actual && actual.length > 0)
|
|
63
|
-
marbles = Marblizer.marblizeSubscriptions(actual);
|
|
64
|
-
const message = pass ? () => this.utils.matcherHint('.not.toHaveNoSubscriptions') +
|
|
65
|
-
'\n\n' +
|
|
66
|
-
`Expected observable to have at least one subscription point, but got nothing` +
|
|
67
|
-
this.utils.printReceived('') : () => this.utils.matcherHint('.toHaveNoSubscriptions') +
|
|
68
|
-
'\n\n' +
|
|
69
|
-
`Expected observable to have no subscription points\n` +
|
|
70
|
-
`But got:\n` +
|
|
71
|
-
` ${this.utils.printReceived(marbles)}\n\n`;
|
|
72
|
-
return {
|
|
73
|
-
pass,
|
|
74
|
-
message
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
};
|
|
78
|
-
expect.extend(customTestMatchers);
|
|
79
|
-
function canMarblize(...messages) {
|
|
80
|
-
return messages.every(isMessagesMarblizable);
|
|
81
|
-
}
|
|
82
|
-
function isMessagesMarblizable(messages) {
|
|
83
|
-
return messages.every(({ notification }) => notification.kind === 'C' ||
|
|
84
|
-
(notification.kind === 'E' && notification.error === 'error') ||
|
|
85
|
-
(notification.kind === 'N' && isCharacter(notification.value)));
|
|
86
|
-
}
|
|
87
|
-
function isCharacter(value) {
|
|
88
|
-
return typeof value === 'string' && value.length === 1 || value !== undefined && JSON.stringify(value).length === 1;
|
|
89
|
-
}
|
|
90
|
-
function subscriptionsPass(actualMarbleArray, expectedMarbleArray) {
|
|
91
|
-
if (actualMarbleArray.length !== expectedMarbleArray.length) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
let pass = true;
|
|
95
|
-
for (const actualMarble of actualMarbleArray) {
|
|
96
|
-
if (!expectedMarbleArray.includes(actualMarble)) {
|
|
97
|
-
pass = false;
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return pass;
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=custom-matchers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"custom-matchers.js","sourceRoot":"","sources":["../../../src/vitest/custom-matchers.ts"],"names":[],"mappings":"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"}
|