effect-rstest 0.1.0
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/LICENSE +21 -0
- package/README.md +71 -0
- package/dist/index.d.ts +219 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +87 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/internal.d.ts +41 -0
- package/dist/internal/internal.d.ts.map +1 -0
- package/dist/internal/internal.js +177 -0
- package/dist/internal/internal.js.map +1 -0
- package/dist/utils.d.ts +152 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +257 -0
- package/dist/utils.js.map +1 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023 Effectful Technologies Inc
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# effect-rstest
|
|
2
|
+
|
|
3
|
+
Effect test helpers for [Rstest](https://rstest.rs). This package re-exports `@rstest/core` and adds Effect-aware tests, shared layers, test services, and property testing.
|
|
4
|
+
|
|
5
|
+
This is an unofficial package adapted from [`@effect/vitest`](https://www.npmjs.com/package/@effect/vitest). There is an [open request](https://github.com/Effect-TS/effect/issues/8128) to add an official `@effect/rstest` package upstream.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
pnpm add -D effect-rstest @rstest/core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
The initial release targets Effect 4 RC and Rstest 0.11.
|
|
14
|
+
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
Use `it.effect` for tests with `TestClock` and `TestConsole`, or `it.live` for the live Effect environment. Both variants create and close a fresh `Scope` for each test.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
import { Effect, Fiber } from "effect"
|
|
21
|
+
import { assert, it } from "effect-rstest"
|
|
22
|
+
import { TestClock } from "effect/testing"
|
|
23
|
+
|
|
24
|
+
it.effect("advances virtual time", () =>
|
|
25
|
+
Effect.gen(function*() {
|
|
26
|
+
const fiber = yield* Effect.forkChild(Effect.sleep(60_000))
|
|
27
|
+
yield* TestClock.adjust(60_000)
|
|
28
|
+
yield* Fiber.join(fiber)
|
|
29
|
+
assert.isTrue(true)
|
|
30
|
+
}))
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Use `layer` or `it.layer` to share a layer across a group of tests. Named layers accept `concurrent` to override the enclosing suite.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { Context, Effect, Layer } from "effect"
|
|
37
|
+
import { assert, it } from "effect-rstest"
|
|
38
|
+
|
|
39
|
+
class Api extends Context.Service<Api, { readonly status: Effect.Effect<number> }>()("Api") {}
|
|
40
|
+
|
|
41
|
+
const ApiLive = Layer.succeed(Api, { status: Effect.succeed(200) })
|
|
42
|
+
|
|
43
|
+
it.layer(ApiLive)("api", (it) => {
|
|
44
|
+
it.effect("returns a status", () =>
|
|
45
|
+
Effect.gen(function*() {
|
|
46
|
+
const api = yield* Api
|
|
47
|
+
assert.strictEqual(yield* api.status, 200)
|
|
48
|
+
}))
|
|
49
|
+
})
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Property tests accept Effect `Schema` and FastCheck `Arbitrary` values. They shrink callbacks that return `false`, throw, or fail with a non-interruption cause.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import { Effect, Schema } from "effect"
|
|
56
|
+
import { assert, it } from "effect-rstest"
|
|
57
|
+
|
|
58
|
+
it.effect.prop(
|
|
59
|
+
"addition is commutative",
|
|
60
|
+
[Schema.Int, Schema.Int],
|
|
61
|
+
([a, b]) => Effect.sync(() => assert.strictEqual(a + b, b + a))
|
|
62
|
+
)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Rstest modifiers remain available. Use `it.effect.concurrent`, `it.effect.sequential`, `it.effect.skip`, `it.effect.only`, `it.effect.fails`, `it.effect.skipIf`, and `it.effect.runIf` with Effect tests.
|
|
66
|
+
|
|
67
|
+
Call `addEqualityTesters()` from an Rstest setup file to make `toEqual` use Effect's `Equal` implementation.
|
|
68
|
+
|
|
69
|
+
## License
|
|
70
|
+
|
|
71
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 0.1.0
|
|
3
|
+
*/
|
|
4
|
+
import * as R from "@rstest/core";
|
|
5
|
+
import type * as Duration from "effect/Duration";
|
|
6
|
+
import type * as Effect from "effect/Effect";
|
|
7
|
+
import type * as Layer from "effect/Layer";
|
|
8
|
+
import type * as Schema from "effect/Schema";
|
|
9
|
+
import type * as Scope from "effect/Scope";
|
|
10
|
+
import type { FastCheck as FC } from "effect/testing";
|
|
11
|
+
/**
|
|
12
|
+
* @since 0.1.0
|
|
13
|
+
*/
|
|
14
|
+
export * from "@rstest/core";
|
|
15
|
+
/**
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
*/
|
|
18
|
+
export type API = R.TestAPIs;
|
|
19
|
+
/**
|
|
20
|
+
* @since 0.1.0
|
|
21
|
+
*/
|
|
22
|
+
export declare namespace Rstest {
|
|
23
|
+
/**
|
|
24
|
+
* @since 0.1.0
|
|
25
|
+
*/
|
|
26
|
+
export interface TestFunction<A, E, R, TestArgs extends Array<any>> {
|
|
27
|
+
(...args: TestArgs): Effect.Effect<A, E, R>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
*/
|
|
32
|
+
export interface Test<R> {
|
|
33
|
+
<A, E>(name: string, self: TestFunction<A, E, R, [R.TestContext]>, timeout?: number | R.TestOptions): void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @since 0.1.0
|
|
37
|
+
*/
|
|
38
|
+
export type Arbitraries = ReadonlyArray<Schema.Schema<any> | FC.Arbitrary<any>> | {
|
|
39
|
+
[K in string]: Schema.Schema<any> | FC.Arbitrary<any>;
|
|
40
|
+
};
|
|
41
|
+
type ArbitraryValue<A> = A extends Schema.Schema<infer T> ? T : A extends FC.Arbitrary<infer T> ? T : never;
|
|
42
|
+
/**
|
|
43
|
+
* @since 0.1.0
|
|
44
|
+
*/
|
|
45
|
+
export interface Tester<R> extends Rstest.Test<R> {
|
|
46
|
+
skip: Rstest.Test<R>;
|
|
47
|
+
skipIf: (condition: boolean) => Rstest.Test<R>;
|
|
48
|
+
runIf: (condition: boolean) => Rstest.Test<R>;
|
|
49
|
+
only: Rstest.Test<R>;
|
|
50
|
+
concurrent: Rstest.Test<R>;
|
|
51
|
+
sequential: Rstest.Test<R>;
|
|
52
|
+
each: <T>(cases: ReadonlyArray<T>) => <A, E>(name: string, self: TestFunction<A, E, R, [T]>, timeout?: number | R.TestOptions) => void;
|
|
53
|
+
fails: Rstest.Test<R>;
|
|
54
|
+
/**
|
|
55
|
+
* Runs an Effectful property test using Schema or Arbitrary inputs.
|
|
56
|
+
*
|
|
57
|
+
* **Details**
|
|
58
|
+
*
|
|
59
|
+
* Returning `false` or completing with any non-interruption failure falsifies the property and triggers shrinking.
|
|
60
|
+
* This includes typed Effect failures, thrown exceptions, interruptions, and defects such as failed assertions.
|
|
61
|
+
*
|
|
62
|
+
* The Rstest timeout interrupts the Effect fiber running generation, property evaluation, and shrinking. Effect
|
|
63
|
+
* finalizers run during that interruption.
|
|
64
|
+
*
|
|
65
|
+
* **Gotchas**
|
|
66
|
+
*
|
|
67
|
+
* A timeout cannot preempt a synchronous JavaScript callback that does not return.
|
|
68
|
+
*
|
|
69
|
+
* @since 0.1.0
|
|
70
|
+
*/
|
|
71
|
+
prop: <const Arbs extends Arbitraries, A, E>(name: string, arbitraries: Arbs, self: TestFunction<A, E, R, [
|
|
72
|
+
{
|
|
73
|
+
[K in keyof Arbs]: ArbitraryValue<Arbs[K]>;
|
|
74
|
+
},
|
|
75
|
+
R.TestContext
|
|
76
|
+
]>, timeout?: number | R.TestOptions & {
|
|
77
|
+
fastCheck?: FC.Parameters<any>;
|
|
78
|
+
fails?: boolean;
|
|
79
|
+
}) => void;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* @since 0.1.0
|
|
83
|
+
*/
|
|
84
|
+
export interface MethodsNonLive<R = never> extends API {
|
|
85
|
+
readonly effect: Rstest.Tester<R | Scope.Scope>;
|
|
86
|
+
readonly flakyTest: <A, E, R2>(self: Effect.Effect<A, E, R2 | Scope.Scope>, timeout?: Duration.Input) => Effect.Effect<A, never, R2>;
|
|
87
|
+
readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>, options?: {
|
|
88
|
+
readonly concurrent?: boolean;
|
|
89
|
+
readonly timeout?: Duration.Input;
|
|
90
|
+
}) => {
|
|
91
|
+
(f: (it: Rstest.MethodsNonLive<R | R2>) => void): void;
|
|
92
|
+
(name: string, f: (it: Rstest.MethodsNonLive<R | R2>) => void): void;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Runs a synchronous property test using Schema or Arbitrary inputs.
|
|
96
|
+
*
|
|
97
|
+
* **Details**
|
|
98
|
+
*
|
|
99
|
+
* Returning `false` or throwing falsifies the property and triggers shrinking. A callback that returns normally
|
|
100
|
+
* without returning `false` passes for that generated input.
|
|
101
|
+
*
|
|
102
|
+
* The Rstest timeout interrupts the Effect fiber running generation and shrinking.
|
|
103
|
+
*
|
|
104
|
+
* **Gotchas**
|
|
105
|
+
*
|
|
106
|
+
* A timeout cannot preempt a synchronous JavaScript callback that does not return.
|
|
107
|
+
*
|
|
108
|
+
* @since 0.1.0
|
|
109
|
+
*/
|
|
110
|
+
readonly prop: <const Arbs extends Arbitraries>(name: string, arbitraries: Arbs, self: (properties: {
|
|
111
|
+
[K in keyof Arbs]: ArbitraryValue<Arbs[K]>;
|
|
112
|
+
}, ctx: R.TestContext) => boolean | void, timeout?: number | R.TestOptions & {
|
|
113
|
+
fastCheck?: FC.Parameters<any>;
|
|
114
|
+
fails?: boolean;
|
|
115
|
+
}) => void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @since 0.1.0
|
|
119
|
+
*/
|
|
120
|
+
export interface Methods<R = never> extends MethodsNonLive<R> {
|
|
121
|
+
readonly live: Rstest.Tester<Scope.Scope | R>;
|
|
122
|
+
readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>, options?: {
|
|
123
|
+
readonly concurrent?: boolean;
|
|
124
|
+
readonly memoMap?: Layer.MemoMap;
|
|
125
|
+
readonly timeout?: Duration.Input;
|
|
126
|
+
readonly excludeTestServices?: boolean;
|
|
127
|
+
}) => {
|
|
128
|
+
(f: (it: Rstest.MethodsNonLive<R | R2>) => void): void;
|
|
129
|
+
(name: string, f: (it: Rstest.MethodsNonLive<R | R2>) => void): void;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export {};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* @since 0.1.0
|
|
136
|
+
*/
|
|
137
|
+
export declare const addEqualityTesters: () => void;
|
|
138
|
+
/**
|
|
139
|
+
* @since 0.1.0
|
|
140
|
+
*/
|
|
141
|
+
export declare const effect: Rstest.Tester<Scope.Scope>;
|
|
142
|
+
/**
|
|
143
|
+
* @since 0.1.0
|
|
144
|
+
*/
|
|
145
|
+
export declare const live: Rstest.Tester<Scope.Scope>;
|
|
146
|
+
/**
|
|
147
|
+
* Share a `Layer` between multiple tests, optionally wrapping
|
|
148
|
+
* the tests in a `describe` block if a name is provided.
|
|
149
|
+
*
|
|
150
|
+
* Named layers accept `concurrent` to override inherited suite concurrency.
|
|
151
|
+
* Anonymous layers always inherit the enclosing suite's concurrency.
|
|
152
|
+
* Use `ctx.expect` in concurrent tests for test-local snapshots and assertion counts.
|
|
153
|
+
*
|
|
154
|
+
* @since 0.1.0
|
|
155
|
+
*
|
|
156
|
+
* ```ts
|
|
157
|
+
* import { assert, layer } from "effect-rstest"
|
|
158
|
+
* import { Effect, Layer, Context } from "effect"
|
|
159
|
+
*
|
|
160
|
+
* class Foo extends Context.Service<Foo, "foo">()("Foo") {
|
|
161
|
+
* static layer = Layer.succeed(Foo, "foo")
|
|
162
|
+
* }
|
|
163
|
+
*
|
|
164
|
+
* class Bar extends Context.Service<Bar, "bar">()("Bar") {
|
|
165
|
+
* static layer = Layer.effect(
|
|
166
|
+
* Bar,
|
|
167
|
+
* Effect.map(Foo, () => "bar" as const)
|
|
168
|
+
* )
|
|
169
|
+
* }
|
|
170
|
+
*
|
|
171
|
+
* layer(Foo.layer)("layer", (it) => {
|
|
172
|
+
* it.effect("adds context", () =>
|
|
173
|
+
* Effect.gen(function*() {
|
|
174
|
+
* const foo = yield* Foo
|
|
175
|
+
* assert.strictEqual(foo, "foo")
|
|
176
|
+
* }))
|
|
177
|
+
*
|
|
178
|
+
* it.layer(Bar.layer)("nested", (it) => {
|
|
179
|
+
* it.effect("adds context", () =>
|
|
180
|
+
* Effect.gen(function*() {
|
|
181
|
+
* const foo = yield* Foo
|
|
182
|
+
* const bar = yield* Bar
|
|
183
|
+
* assert.strictEqual(foo, "foo")
|
|
184
|
+
* assert.strictEqual(bar, "bar")
|
|
185
|
+
* }))
|
|
186
|
+
* })
|
|
187
|
+
* })
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export declare const layer: <R, E>(layer_: Layer.Layer<R, E>, options?: {
|
|
191
|
+
readonly concurrent?: boolean;
|
|
192
|
+
readonly memoMap?: Layer.MemoMap;
|
|
193
|
+
readonly timeout?: Duration.Input;
|
|
194
|
+
readonly excludeTestServices?: boolean;
|
|
195
|
+
}) => {
|
|
196
|
+
(f: (it: Rstest.MethodsNonLive<R>) => void): void;
|
|
197
|
+
(name: string, f: (it: Rstest.MethodsNonLive<R>) => void): void;
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* @since 0.1.0
|
|
201
|
+
*/
|
|
202
|
+
export declare const flakyTest: <A, E, R>(self: Effect.Effect<A, E, R | Scope.Scope>, timeout?: Duration.Input) => Effect.Effect<A, never, R>;
|
|
203
|
+
/**
|
|
204
|
+
* @since 0.1.0
|
|
205
|
+
*/
|
|
206
|
+
export declare const prop: Rstest.Methods["prop"];
|
|
207
|
+
/**
|
|
208
|
+
* @since 0.1.0
|
|
209
|
+
*/
|
|
210
|
+
export declare const it: Rstest.Methods;
|
|
211
|
+
/**
|
|
212
|
+
* @since 0.1.0
|
|
213
|
+
*/
|
|
214
|
+
export declare const makeMethods: (it: R.TestAPIs | R.TestAPIs["skip"]) => Rstest.Methods;
|
|
215
|
+
/**
|
|
216
|
+
* @since 0.1.0
|
|
217
|
+
*/
|
|
218
|
+
export declare const describeWrapped: (name: string, f: (it: Rstest.Methods) => void) => void;
|
|
219
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,IAAI,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAGrD;;GAEG;AACH,cAAc,cAAc,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAA;AAE5B;;GAEG;AACH,yBAAiB,MAAM,CAAC;IACtB;;OAEG;IACH,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,SAAS,KAAK,CAAC,GAAG,CAAC;QAChE,CAAC,GAAG,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KAC5C;IAED;;OAEG;IACH,MAAM,WAAW,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,EAAE,CAAC,EACH,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAC5C,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,GAC/B,IAAI,CAAA;KACR;IAED;;OAEG;IACH,MAAM,MAAM,WAAW,GACnB,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GACrD;SAAG,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;KAAE,CAAA;IAE7D,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GACzD,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GACnC,KAAK,CAAA;IAET;;OAEG;IACH,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC9C,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACpB,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,IAAI,EAAE,CAAC,CAAC,EACN,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KACpB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,IAAI,CAAA;QACrG,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAErB;;;;;;;;;;;;;;;;WAgBG;QACH,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC,EACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,IAAI,EACjB,IAAI,EAAE,YAAY,CAChB,CAAC,EACD,CAAC,EACD,CAAC,EACD;YACE;iBACG,CAAC,IAAI,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC3C;YACD,CAAC,CAAC,WAAW;SACd,CACF,EACD,OAAO,CAAC,EACJ,MAAM,GACN,CAAC,CAAC,WAAW,GAAG;YAChB,SAAS,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;SAChB,KACA,IAAI,CAAA;KACV;IAED;;OAEG;IACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,KAAK,CAAE,SAAQ,GAAG;QACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QAC/C,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAC3C,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,KACrB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;YAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;YAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;SAClC,KAAK;YACJ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;YACtD,CACE,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAC7C,IAAI,CAAA;SACR,CAAA;QAED;;;;;;;;;;;;;;;WAeG;QACH,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,SAAS,WAAW,EAC5C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,IAAI,EACjB,IAAI,EAAE,CACJ,UAAU,EAAE;aACT,CAAC,IAAI,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC3C,EACD,GAAG,EAAE,CAAC,CAAC,WAAW,KACf,OAAO,GAAG,IAAI,EACnB,OAAO,CAAC,EACJ,MAAM,GACN,CAAC,CAAC,WAAW,GAAG;YAChB,SAAS,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;SAChB,KACA,IAAI,CAAA;KACV;IAED;;OAEG;IACH,MAAM,WAAW,OAAO,CAAC,CAAC,GAAG,KAAK,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE;YAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;YAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAA;YAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;YACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;SACvC,KAAK;YACJ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;YACtD,CACE,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,GAC7C,IAAI,CAAA;SACR,CAAA;KACF;;CACF;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,IAAkC,CAAA;AAEzE;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAmB,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAiB,CAAA;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EACvB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CACvC,KACE;IACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;IACjD,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;CAC/C,CAAA;AAElB;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAC1C,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,KACrB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAsB,CAAA;AAEpD;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAiB,CAAA;AAEzD;;GAEG;AACH,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,OAAoC,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,OAA8B,CAAA;AAExG;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,KAAK,IAA+B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 0.1.0
|
|
3
|
+
*/
|
|
4
|
+
import * as R from "@rstest/core";
|
|
5
|
+
import * as internal from "./internal/internal.js";
|
|
6
|
+
/**
|
|
7
|
+
* @since 0.1.0
|
|
8
|
+
*/
|
|
9
|
+
export * from "@rstest/core";
|
|
10
|
+
/**
|
|
11
|
+
* @since 0.1.0
|
|
12
|
+
*/
|
|
13
|
+
export const addEqualityTesters = internal.addEqualityTesters;
|
|
14
|
+
/**
|
|
15
|
+
* @since 0.1.0
|
|
16
|
+
*/
|
|
17
|
+
export const effect = internal.effect;
|
|
18
|
+
/**
|
|
19
|
+
* @since 0.1.0
|
|
20
|
+
*/
|
|
21
|
+
export const live = internal.live;
|
|
22
|
+
/**
|
|
23
|
+
* Share a `Layer` between multiple tests, optionally wrapping
|
|
24
|
+
* the tests in a `describe` block if a name is provided.
|
|
25
|
+
*
|
|
26
|
+
* Named layers accept `concurrent` to override inherited suite concurrency.
|
|
27
|
+
* Anonymous layers always inherit the enclosing suite's concurrency.
|
|
28
|
+
* Use `ctx.expect` in concurrent tests for test-local snapshots and assertion counts.
|
|
29
|
+
*
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
*
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { assert, layer } from "effect-rstest"
|
|
34
|
+
* import { Effect, Layer, Context } from "effect"
|
|
35
|
+
*
|
|
36
|
+
* class Foo extends Context.Service<Foo, "foo">()("Foo") {
|
|
37
|
+
* static layer = Layer.succeed(Foo, "foo")
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* class Bar extends Context.Service<Bar, "bar">()("Bar") {
|
|
41
|
+
* static layer = Layer.effect(
|
|
42
|
+
* Bar,
|
|
43
|
+
* Effect.map(Foo, () => "bar" as const)
|
|
44
|
+
* )
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* layer(Foo.layer)("layer", (it) => {
|
|
48
|
+
* it.effect("adds context", () =>
|
|
49
|
+
* Effect.gen(function*() {
|
|
50
|
+
* const foo = yield* Foo
|
|
51
|
+
* assert.strictEqual(foo, "foo")
|
|
52
|
+
* }))
|
|
53
|
+
*
|
|
54
|
+
* it.layer(Bar.layer)("nested", (it) => {
|
|
55
|
+
* it.effect("adds context", () =>
|
|
56
|
+
* Effect.gen(function*() {
|
|
57
|
+
* const foo = yield* Foo
|
|
58
|
+
* const bar = yield* Bar
|
|
59
|
+
* assert.strictEqual(foo, "foo")
|
|
60
|
+
* assert.strictEqual(bar, "bar")
|
|
61
|
+
* }))
|
|
62
|
+
* })
|
|
63
|
+
* })
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export const layer = internal.layer;
|
|
67
|
+
/**
|
|
68
|
+
* @since 0.1.0
|
|
69
|
+
*/
|
|
70
|
+
export const flakyTest = internal.flakyTest;
|
|
71
|
+
/**
|
|
72
|
+
* @since 0.1.0
|
|
73
|
+
*/
|
|
74
|
+
export const prop = internal.prop;
|
|
75
|
+
/**
|
|
76
|
+
* @since 0.1.0
|
|
77
|
+
*/
|
|
78
|
+
export const it = internal.makeMethods(R.it);
|
|
79
|
+
/**
|
|
80
|
+
* @since 0.1.0
|
|
81
|
+
*/
|
|
82
|
+
export const makeMethods = internal.makeMethods;
|
|
83
|
+
/**
|
|
84
|
+
* @since 0.1.0
|
|
85
|
+
*/
|
|
86
|
+
export const describeWrapped = internal.describeWrapped;
|
|
87
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAOjC,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAA;AAElD;;GAEG;AACH,cAAc,cAAc,CAAA;AAyK5B;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAe,QAAQ,CAAC,kBAAkB,CAAA;AAEzE;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAA+B,QAAQ,CAAC,MAAM,CAAA;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAA+B,QAAQ,CAAC,IAAI,CAAA;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,CAAC,MAAM,KAAK,GAWd,QAAQ,CAAC,KAAK,CAAA;AAElB;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAGY,QAAQ,CAAC,SAAS,CAAA;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAA2B,QAAQ,CAAC,IAAI,CAAA;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,EAAE,GAAmB,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAA4D,QAAQ,CAAC,WAAW,CAAA;AAExG;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA4D,QAAQ,CAAC,eAAe,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 0.1.0
|
|
3
|
+
*/
|
|
4
|
+
import * as R from "@rstest/core";
|
|
5
|
+
import * as Duration from "effect/Duration";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Layer from "effect/Layer";
|
|
8
|
+
import * as Scope from "effect/Scope";
|
|
9
|
+
import { TestClock, TestConsole } from "effect/testing";
|
|
10
|
+
import type * as Rstest from "../index.ts";
|
|
11
|
+
/** @internal */
|
|
12
|
+
export type TestContext = TestConsole.TestConsole | TestClock.TestClock;
|
|
13
|
+
/** @internal */
|
|
14
|
+
export declare const addEqualityTesters: () => void;
|
|
15
|
+
type TestAPI = R.TestAPIs | R.TestAPIs["skip"];
|
|
16
|
+
/** @internal */
|
|
17
|
+
export declare const prop: Rstest.Rstest.Methods["prop"];
|
|
18
|
+
/** @internal */
|
|
19
|
+
export declare const layer: <R, E>(layer_: Layer.Layer<R, E>, options?: {
|
|
20
|
+
readonly concurrent?: boolean;
|
|
21
|
+
readonly memoMap?: Layer.MemoMap;
|
|
22
|
+
readonly timeout?: Duration.Input;
|
|
23
|
+
readonly excludeTestServices?: boolean;
|
|
24
|
+
}, testApi?: TestAPI) => {
|
|
25
|
+
(f: (it: Rstest.Rstest.MethodsNonLive<R>) => void): void;
|
|
26
|
+
(name: string, f: (it: Rstest.Rstest.MethodsNonLive<R>) => void): void;
|
|
27
|
+
};
|
|
28
|
+
/** @internal */
|
|
29
|
+
export declare const flakyTest: <A, E, R>(self: Effect.Effect<A, E, R | Scope.Scope>, timeout?: Duration.Input) => Effect.Effect<A, never, Exclude<R, Scope.Scope>>;
|
|
30
|
+
/** @internal */
|
|
31
|
+
export declare const makeMethods: (it: TestAPI) => Rstest.Rstest.Methods;
|
|
32
|
+
/** @internal */
|
|
33
|
+
export declare const
|
|
34
|
+
/** @internal */
|
|
35
|
+
effect: Rstest.Rstest.Tester<Scope.Scope>,
|
|
36
|
+
/** @internal */
|
|
37
|
+
live: Rstest.Rstest.Tester<Scope.Scope>;
|
|
38
|
+
/** @internal */
|
|
39
|
+
export declare const describeWrapped: (name: string, f: (it: Rstest.Rstest.Methods) => void) => void;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/internal/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAmB,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,KAAK,KAAK,MAAM,MAAM,aAAa,CAAA;AAmB1C,gBAAgB;AAChB,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,GAAG,SAAS,CAAC,SAAS,CAAA;AAIvE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,YAI9B,CAAA;AAoFD,KAAK,OAAO,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AAsG9C,gBAAgB;AAChB,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAkB,CAAA;AAEjE,gBAAgB;AAChB,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,UAAU;IACR,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAA;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CACvC,EACD,UAAS,OAAc,KACtB;IACD,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;IACxD,CACE,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAC/C,IAAI,CAAA;CAsFR,CAAA;AAID,gBAAgB;AAChB,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC/B,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAC1C,UAAS,QAAQ,CAAC,KAA4B,qDAkB7C,CAAA;AAEH,gBAAgB;AAChB,eAAO,MAAM,WAAW,GAAI,IAAI,OAAO,KAAG,MAAM,CAAC,MAAM,CAAC,OAOpD,CAAA;AAEJ,gBAAgB;AAChB,eAAO;AACL,gBAAgB;AAChB,MAAM;AACN,gBAAgB;AAChB,IAAI,mCACe,CAAA;AAErB,gBAAgB;AAChB,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,KAAG,IACzC,CAAA"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 0.1.0
|
|
3
|
+
*/
|
|
4
|
+
import * as R from "@rstest/core";
|
|
5
|
+
import * as Cause from "effect/Cause";
|
|
6
|
+
import * as Duration from "effect/Duration";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as Equal from "effect/Equal";
|
|
9
|
+
import * as Exit from "effect/Exit";
|
|
10
|
+
import { flow, pipe } from "effect/Function";
|
|
11
|
+
import * as Layer from "effect/Layer";
|
|
12
|
+
import * as Predicate from "effect/Predicate";
|
|
13
|
+
import * as Schedule from "effect/Schedule";
|
|
14
|
+
import * as Schema from "effect/Schema";
|
|
15
|
+
import * as Scope from "effect/Scope";
|
|
16
|
+
import { FastCheck as FC, TestClock, TestConsole } from "effect/testing";
|
|
17
|
+
const runPromise = Effect.fnUntraced(function* (effect, _ctx) {
|
|
18
|
+
const exit = yield* Effect.exit(effect);
|
|
19
|
+
if (Exit.isFailure(exit)) {
|
|
20
|
+
const errors = Cause.prettyErrors(exit.cause);
|
|
21
|
+
for (let i = 0; i < errors.length; i++) {
|
|
22
|
+
yield* Effect.logError(errors[i]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return yield* exit;
|
|
26
|
+
}, (effect, _, ctx) => Effect.runPromise(effect, { signal: ctx?.signal }));
|
|
27
|
+
/** @internal */
|
|
28
|
+
const runTest = (ctx) => (effect) => runPromise(effect, ctx);
|
|
29
|
+
const TestEnv = Layer.mergeAll(TestConsole.layer, TestClock.layer());
|
|
30
|
+
/** @internal */
|
|
31
|
+
export const addEqualityTesters = () => {
|
|
32
|
+
R.expect.addEqualityTesters([
|
|
33
|
+
(a, b) => Equal.isEqual(a) || Equal.isEqual(b) ? Equal.equals(a, b) : undefined
|
|
34
|
+
]);
|
|
35
|
+
};
|
|
36
|
+
const hookTimeout = (timeout) => timeout === undefined ? undefined : Duration.toMillis(Duration.fromInputUnsafe(timeout));
|
|
37
|
+
/** @internal */
|
|
38
|
+
const testOptions = (timeout) => {
|
|
39
|
+
if (typeof timeout === "number") {
|
|
40
|
+
return { timeout };
|
|
41
|
+
}
|
|
42
|
+
if (timeout === undefined) {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
const { fails: _, fastCheck: __, ...options } = timeout;
|
|
46
|
+
return options;
|
|
47
|
+
};
|
|
48
|
+
const propertyTestOptions = (timeout) => typeof timeout === "number" ? undefined : timeout;
|
|
49
|
+
const checkOptions = (timeout) => propertyTestOptions(timeout)?.fastCheck;
|
|
50
|
+
const compileArbitraryInput = (input) => Schema.isSchema(input) ? Schema.toArbitrary(input)(FC) : input;
|
|
51
|
+
const makeArbitrary = (arbitraries) => Array.isArray(arbitraries)
|
|
52
|
+
? FC.tuple(...arbitraries.map(compileArbitraryInput))
|
|
53
|
+
: FC.record(Object.fromEntries(Object.entries(arbitraries).map(([key, input]) => [key, compileArbitraryInput(input)])));
|
|
54
|
+
const normalizeProperty = (property, value) => Effect.catchCause(Effect.suspend(() => {
|
|
55
|
+
const output = property(value);
|
|
56
|
+
if (Predicate.isPromiseLike(output)) {
|
|
57
|
+
throw new TypeError("Effect property tests must return an Effect or boolean");
|
|
58
|
+
}
|
|
59
|
+
return Effect.isEffect(output) ? output : Effect.succeed(output);
|
|
60
|
+
}), (cause) => Cause.hasInterrupts(cause) ? Effect.failCause(cause) : Effect.fail(cause));
|
|
61
|
+
const normalizeSyncProperty = (property, value, ctx) => {
|
|
62
|
+
const output = property(value, ctx);
|
|
63
|
+
if (Predicate.isPromiseLike(output)) {
|
|
64
|
+
throw new TypeError("Synchronous property tests must not return a Promise");
|
|
65
|
+
}
|
|
66
|
+
return output !== false;
|
|
67
|
+
};
|
|
68
|
+
const runCheck = (ctx, arbitrary, property, options) => FC.assert(FC.asyncProperty(arbitrary, (value) => runTest(ctx)(normalizeProperty(property, value))), options);
|
|
69
|
+
const makeItProxy = (it, overrides) => new Proxy(it, {
|
|
70
|
+
apply(target, thisArg, argArray) {
|
|
71
|
+
return Reflect.apply(target, thisArg, argArray);
|
|
72
|
+
},
|
|
73
|
+
get(target, property, receiver) {
|
|
74
|
+
if (Object.hasOwn(overrides, property)) {
|
|
75
|
+
return Reflect.get(overrides, property);
|
|
76
|
+
}
|
|
77
|
+
// do not bind: binding would strip Rstest's static helpers
|
|
78
|
+
return Reflect.get(target, property, receiver);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
/** @internal */
|
|
82
|
+
const makeTester = (mapEffect, it = R.it) => {
|
|
83
|
+
const run = (ctx, args, self) => pipe(Effect.suspend(() => self(...args)), mapEffect, Effect.asVoid, runTest(ctx));
|
|
84
|
+
const f = (name, self, timeout) => it(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
85
|
+
const skip = (name, self, timeout) => it.skip(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
86
|
+
const skipIf = (condition) => (name, self, timeout) => it.skipIf(condition)(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
87
|
+
const runIf = (condition) => (name, self, timeout) => it.runIf(condition)(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
88
|
+
const only = (name, self, timeout) => it.only(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
89
|
+
const concurrent = (name, self, timeout) => it.concurrent(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
90
|
+
const sequential = (name, self, timeout) => it.sequential(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
91
|
+
const each = (cases) => (name, self, timeout) => {
|
|
92
|
+
it.for(cases)(name, testOptions(timeout), (args, ctx) => run(ctx, [args], self));
|
|
93
|
+
};
|
|
94
|
+
const fails = (name, self, timeout) => it.fails(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self));
|
|
95
|
+
const prop = (name, arbitraries, self, timeout) => {
|
|
96
|
+
const arbitrary = makeArbitrary(arbitraries);
|
|
97
|
+
const testApi = propertyTestOptions(timeout)?.fails ? it.fails : it;
|
|
98
|
+
return testApi(name, testOptions(timeout), (ctx) => runCheck(ctx, arbitrary, (values) => Effect.mapEager(mapEffect(Effect.suspend(() => self(values, ctx))), (value) => value !== false), checkOptions(timeout)));
|
|
99
|
+
};
|
|
100
|
+
return Object.assign(f, { skip, skipIf, runIf, only, concurrent, sequential, each, fails, prop });
|
|
101
|
+
};
|
|
102
|
+
/** @internal */
|
|
103
|
+
const makeProp = (it) => (name, arbitraries, self, timeout) => {
|
|
104
|
+
const arbitrary = makeArbitrary(arbitraries);
|
|
105
|
+
const testApi = propertyTestOptions(timeout)?.fails ? it.fails : it;
|
|
106
|
+
return testApi(name, testOptions(timeout), (ctx) => runCheck(ctx, arbitrary, (values) => normalizeSyncProperty(self, values, ctx), checkOptions(timeout)));
|
|
107
|
+
};
|
|
108
|
+
/** @internal */
|
|
109
|
+
export const prop = makeProp(R.it);
|
|
110
|
+
/** @internal */
|
|
111
|
+
export const layer = (layer_, options, testApi = R.it) => (...args) => {
|
|
112
|
+
const excludeTestServices = options?.excludeTestServices ?? false;
|
|
113
|
+
const withTestEnv = excludeTestServices
|
|
114
|
+
? layer_
|
|
115
|
+
: Layer.provideMerge(layer_, TestEnv);
|
|
116
|
+
const memoMap = options?.memoMap ?? Effect.runSync(Layer.makeMemoMap);
|
|
117
|
+
const scope = Effect.runSync(Scope.make());
|
|
118
|
+
const contextEffect = Layer.buildWithMemoMap(withTestEnv, memoMap, scope).pipe(Effect.orDie, Effect.cached, Effect.runSync);
|
|
119
|
+
let closePromise;
|
|
120
|
+
const closeScope = () => {
|
|
121
|
+
if (closePromise !== undefined) {
|
|
122
|
+
return closePromise;
|
|
123
|
+
}
|
|
124
|
+
closePromise = runPromise(Scope.close(scope, Exit.void)).then(() => { });
|
|
125
|
+
return closePromise;
|
|
126
|
+
};
|
|
127
|
+
const makeIt = (it) => makeItProxy(it, {
|
|
128
|
+
effect: makeTester((effect) => Effect.flatMap(contextEffect, (context) => effect.pipe(Effect.scoped, Effect.provide(context))), it),
|
|
129
|
+
prop: makeProp(it),
|
|
130
|
+
flakyTest,
|
|
131
|
+
layer(nestedLayer, options) {
|
|
132
|
+
return layer(Layer.provideMerge(nestedLayer, withTestEnv), {
|
|
133
|
+
...options,
|
|
134
|
+
memoMap: Layer.forkMemoMapUnsafe(memoMap),
|
|
135
|
+
excludeTestServices
|
|
136
|
+
}, it);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
if (args.length === 1) {
|
|
140
|
+
const timeout = hookTimeout(options?.timeout);
|
|
141
|
+
return R.describe("", () => {
|
|
142
|
+
R.beforeAll(() => runPromise(Effect.asVoid(contextEffect)), timeout);
|
|
143
|
+
R.afterAll(() => closeScope(), timeout);
|
|
144
|
+
return args[0](makeIt(testApi));
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const describe = options?.concurrent === true
|
|
148
|
+
? R.describe.concurrent
|
|
149
|
+
: options?.concurrent === false
|
|
150
|
+
? R.describe.sequential
|
|
151
|
+
: R.describe;
|
|
152
|
+
return describe(args[0], () => {
|
|
153
|
+
R.beforeAll(() => runPromise(Effect.asVoid(contextEffect)), hookTimeout(options?.timeout));
|
|
154
|
+
R.afterAll(() => closeScope(), hookTimeout(options?.timeout));
|
|
155
|
+
return args[1](makeIt(testApi));
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
const makeLayer = (it) => (layer_, options) => layer(layer_, options, it);
|
|
159
|
+
/** @internal */
|
|
160
|
+
export const flakyTest = (self, timeout = Duration.seconds(30)) => pipe(self, Effect.scoped, Effect.sandbox, Effect.retry(pipe(Schedule.recurs(10), Schedule.while((_) => Effect.succeed(Duration.isLessThanOrEqualTo(Duration.fromInputUnsafe(_.elapsed), Duration.fromInputUnsafe(timeout)))))), Effect.orDie);
|
|
161
|
+
/** @internal */
|
|
162
|
+
export const makeMethods = (it) => makeItProxy(it, {
|
|
163
|
+
effect: makeTester(flow(Effect.scoped, Effect.provide(TestEnv)), it),
|
|
164
|
+
live: makeTester(Effect.scoped, it),
|
|
165
|
+
flakyTest,
|
|
166
|
+
layer: makeLayer(it),
|
|
167
|
+
prop: makeProp(it)
|
|
168
|
+
});
|
|
169
|
+
/** @internal */
|
|
170
|
+
export const {
|
|
171
|
+
/** @internal */
|
|
172
|
+
effect,
|
|
173
|
+
/** @internal */
|
|
174
|
+
live } = makeMethods(R.it);
|
|
175
|
+
/** @internal */
|
|
176
|
+
export const describeWrapped = (name, f) => R.describe(name, () => f(makeMethods(R.it)));
|
|
177
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/internal/internal.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAGxE,MAAM,UAAU,GAGE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAO,MAA2B,EAAE,IAAyB;IACxG,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACnC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAA;AACpB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AAE1E,gBAAgB;AAChB,MAAM,OAAO,GAAG,CAAC,GAAwB,EAAE,EAAE,CAAC,CAAO,MAA2B,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAK5G,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAA;AAEpE,gBAAgB;AAChB,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KAChF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAE,EAAE,CAC/C,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;AAS1F,gBAAgB;AAChB,MAAM,WAAW,GAAG,CAAC,OAAkD,EAAiB,EAAE;IACxF,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAA0B,CAAA;IAC1E,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAMD,MAAM,mBAAmB,GAAG,CAC1B,OAAoC,EACU,EAAE,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;AAEpG,MAAM,YAAY,GAAG,CAAC,OAAoC,EAAkC,EAAE,CAC5F,mBAAmB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;AAEzC,MAAM,qBAAqB,GAAG,CAAC,KAAqB,EAAqB,EAAE,CACzE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAA0B,CAAA;AAErF,MAAM,aAAa,GAAG,CAAC,WAAwB,EAAqB,EAAE,CACpE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;IACxB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrD,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CACvF,CAAC,CAAA;AAEN,MAAM,iBAAiB,GAAG,CACxB,QAA8D,EAC9D,KAAQ,EACuC,EAAE,CACjD,MAAM,CAAC,UAAU,CACf,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;IAClB,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,wDAAwD,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAClE,CAAC,CAAC,EACF,CAAC,KAAK,EAA4C,EAAE,CAClD,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAC5E,CAAA;AAEH,MAAM,qBAAqB,GAAG,CAC5B,QAA0D,EAC1D,KAAQ,EACR,GAAkB,EACT,EAAE;IACX,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACnC,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,sDAAsD,CAAC,CAAA;IAC7E,CAAC;IACD,OAAO,MAAM,KAAK,KAAK,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,CACf,GAAkB,EAClB,SAA0B,EAC1B,QAA2D,EAC3D,OAAuC,EACxB,EAAE,CACjB,EAAE,CAAC,MAAM,CACP,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EACxF,OAAO,CACR,CAAA;AAIH,MAAM,WAAW,GAAG,CAClB,EAAW,EACX,SAAkB,EACI,EAAE,CACxB,IAAI,KAAK,CAAC,EAA0B,EAAE;IACpC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ;QAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IACjD,CAAC;IACD,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ;QAC5B,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;QACzC,CAAC;QACD,2DAA2D;QAC3D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAChD,CAAC;CACF,CAAC,CAAA;AAEJ,gBAAgB;AAChB,MAAM,UAAU,GAAG,CACjB,SAA6E,EAC7E,KAAc,CAAC,CAAC,EAAE,EACO,EAAE;IAC3B,MAAM,GAAG,GAAG,CACV,GAA2B,EAC3B,IAAc,EACd,IAAmD,EACnD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;IAEtF,MAAM,CAAC,GAA0B,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACvD,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAEhE,MAAM,IAAI,GAAoC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACpE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAErE,MAAM,MAAM,GAAsC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACvF,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAElF,MAAM,KAAK,GAAqC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACrF,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAEjF,MAAM,IAAI,GAAoC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACpE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAErE,MAAM,UAAU,GAA0C,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAChF,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAE3E,MAAM,UAAU,GAA0C,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAChF,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAE3E,MAAM,IAAI,GAAoC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC/E,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CACX,IAAI,EACJ,WAAW,CAAC,OAAO,CAAC,EACpB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CACtC,CAAA;IACH,CAAC,CAAA;IAED,MAAM,KAAK,GAAqC,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CACtE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAEtE,MAAM,IAAI,GAAoC,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACjF,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,OAAO,OAAO,CACZ,IAAI,EACJ,WAAW,CAAC,OAAO,CAAC,EACpB,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CACN,GAAG,EACH,SAAS,EACT,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,QAAQ,CACb,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EACzD,CAAC,KAAK,EAAE,EAAE,CAAE,KAAiB,KAAK,KAAK,CACxC,EACH,YAAY,CAAC,OAAO,CAAC,CACtB,CACJ,CAAA;IACH,CAAC,CAAA;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACnG,CAAC,CAAA;AAED,gBAAgB;AAChB,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAiC,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACpG,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IACnE,OAAO,OAAO,CACZ,IAAI,EACJ,WAAW,CAAC,OAAO,CAAC,EACpB,CAAC,GAAG,EAAE,EAAE,CACN,QAAQ,CACN,GAAG,EACH,SAAS,EACT,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAa,EAAE,GAAG,CAAC,EAC3D,YAAY,CAAC,OAAO,CAAC,CACtB,CACJ,CAAA;AACH,CAAC,CAAA;AAED,gBAAgB;AAChB,MAAM,CAAC,MAAM,IAAI,GAAkC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAEjE,gBAAgB;AAChB,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,MAAyB,EACzB,OAKC,EACD,UAAmB,CAAC,CAAC,EAAE,EAOvB,EAAE,CACJ,CACE,GAAG,IAOF,EACD,EAAE;IACF,MAAM,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,KAAK,CAAA;IACjE,MAAM,WAAW,GAAG,mBAAmB;QACrC,CAAC,CAAC,MAA2B;QAC7B,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACrE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAC1C,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAC5E,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CACf,CAAA;IACD,IAAI,YAAuC,CAAA;IAC3C,MAAM,UAAU,GAAG,GAAkB,EAAE;QACrC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,YAAY,CAAA;QACrB,CAAC;QACD,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACvE,OAAO,YAAY,CAAA;IACrB,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,EAAW,EAAmC,EAAE,CAC9D,WAAW,CAAC,EAAE,EAAE;QACd,MAAM,EAAE,UAAU,CAChB,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACxC,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CACxB,CAAC,EACN,EAAE,CACH;QACD,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QAClB,SAAS;QACT,KAAK,CAAS,WAAmC,EAAE,OAGlD;YACC,OAAO,KAAK,CACV,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,EAC5C;gBACE,GAAG,OAAO;gBACV,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBACzC,mBAAmB;aACpB,EACD,EAAE,CACH,CAAA;QACH,CAAC;KACF,CAAC,CAAA;IAEJ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC7C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;YACzB,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YACpE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAA;YACvC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,EAAE,UAAU,KAAK,IAAI;QAC3C,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;QACvB,CAAC,CAAC,OAAO,EAAE,UAAU,KAAK,KAAK;YAC/B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU;YACvB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;IACd,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE;QAC5B,CAAC,CAAC,SAAS,CACT,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAC9C,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAC9B,CAAA;QACD,CAAC,CAAC,QAAQ,CACR,GAAG,EAAE,CAAC,UAAU,EAAE,EAClB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAC9B,CAAA;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,EAAW,EAAkC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,CAAA;AAElH,gBAAgB;AAChB,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,IAA0C,EAC1C,UAA0B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAC9C,EAAE,CACF,IAAI,CACF,IAAI,EACJ,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,KAAK,CACV,IAAI,CACF,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACnB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACzC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,EACnC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAClC,CAAC,CACH,CACF,CACF,EACD,MAAM,CAAC,KAAK,CACb,CAAA;AAEH,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAW,EAAyB,EAAE,CAChE,WAAW,CAAC,EAAE,EAAE;IACd,MAAM,EAAE,UAAU,CAAc,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC;IACjF,IAAI,EAAE,UAAU,CAAc,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;IAChD,SAAS;IACT,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;CACnB,CAAC,CAAA;AAEJ,gBAAgB;AAChB,MAAM,CAAC,MAAM;AACX,gBAAgB;AAChB,MAAM;AACN,gBAAgB;AAChB,IAAI,EACL,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAErB,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,CAAsC,EAAQ,EAAE,CAC5F,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type * as Cause from "effect/Cause";
|
|
2
|
+
import * as Exit from "effect/Exit";
|
|
3
|
+
import * as Option from "effect/Option";
|
|
4
|
+
import * as Result from "effect/Result";
|
|
5
|
+
/**
|
|
6
|
+
* Fails the current test with the provided error message.
|
|
7
|
+
*
|
|
8
|
+
* @category testing
|
|
9
|
+
* @since 0.1.0
|
|
10
|
+
*/
|
|
11
|
+
export declare function fail(message: string): void;
|
|
12
|
+
/**
|
|
13
|
+
* Asserts that `actual` is deeply strictly equal to `expected` using Node's `assert.deepStrictEqual`.
|
|
14
|
+
*
|
|
15
|
+
* @category testing
|
|
16
|
+
* @since 0.1.0
|
|
17
|
+
*/
|
|
18
|
+
export declare function deepStrictEqual<A>(actual: A, expected: A, message?: string, ..._: Array<never>): void;
|
|
19
|
+
/**
|
|
20
|
+
* Asserts that `actual` is not deeply strictly equal to `expected` using Node's `assert.notDeepStrictEqual`.
|
|
21
|
+
*
|
|
22
|
+
* @category testing
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
*/
|
|
25
|
+
export declare function notDeepStrictEqual<A>(actual: A, expected: A, message?: string, ..._: Array<never>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Asserts that `actual` is strictly equal to `expected` using Node's `assert.strictEqual`.
|
|
28
|
+
*
|
|
29
|
+
* @category testing
|
|
30
|
+
* @since 0.1.0
|
|
31
|
+
*/
|
|
32
|
+
export declare function strictEqual<A>(actual: A, expected: A, message?: string, ..._: Array<never>): void;
|
|
33
|
+
/**
|
|
34
|
+
* Asserts that `actual` is equal to `expected` using the `Equal.equals` trait.
|
|
35
|
+
*
|
|
36
|
+
* @category testing
|
|
37
|
+
* @since 0.1.0
|
|
38
|
+
*/
|
|
39
|
+
export declare function assertEquals<A>(actual: A, expected: A, message?: string, ..._: Array<never>): void;
|
|
40
|
+
/**
|
|
41
|
+
* Asserts that `thunk` does not throw an error.
|
|
42
|
+
*
|
|
43
|
+
* @category testing
|
|
44
|
+
* @since 0.1.0
|
|
45
|
+
*/
|
|
46
|
+
export declare function doesNotThrow(thunk: () => void, message?: string, ..._: Array<never>): void;
|
|
47
|
+
/**
|
|
48
|
+
* Asserts that `value` is an instance of `constructor`.
|
|
49
|
+
*
|
|
50
|
+
* @category testing
|
|
51
|
+
* @since 0.1.0
|
|
52
|
+
*/
|
|
53
|
+
export declare function assertInstanceOf<C extends abstract new (...args: any) => any>(value: unknown, constructor: C, message?: string, ..._: Array<never>): asserts value is InstanceType<C>;
|
|
54
|
+
/**
|
|
55
|
+
* Asserts that `self` is `true`.
|
|
56
|
+
*
|
|
57
|
+
* @category testing
|
|
58
|
+
* @since 0.1.0
|
|
59
|
+
*/
|
|
60
|
+
export declare function assertTrue(self: unknown, message?: string, ..._: Array<never>): asserts self;
|
|
61
|
+
/**
|
|
62
|
+
* Asserts that `self` is `false`.
|
|
63
|
+
*
|
|
64
|
+
* @category testing
|
|
65
|
+
* @since 0.1.0
|
|
66
|
+
*/
|
|
67
|
+
export declare function assertFalse(self: boolean, message?: string, ..._: Array<never>): void;
|
|
68
|
+
/**
|
|
69
|
+
* Asserts that `actual` includes `expected`.
|
|
70
|
+
*
|
|
71
|
+
* @category testing
|
|
72
|
+
* @since 0.1.0
|
|
73
|
+
*/
|
|
74
|
+
export declare function assertInclude(actual: string | undefined, expected: string, ..._: Array<never>): void;
|
|
75
|
+
/**
|
|
76
|
+
* Asserts that `actual` matches `regExp`.
|
|
77
|
+
*
|
|
78
|
+
* @category testing
|
|
79
|
+
* @since 0.1.0
|
|
80
|
+
*/
|
|
81
|
+
export declare function assertMatch(actual: string, regExp: RegExp, ..._: Array<never>): void;
|
|
82
|
+
/**
|
|
83
|
+
* Asserts that `thunk` throws, optionally checking the thrown value against an expected `Error` or validation function.
|
|
84
|
+
*
|
|
85
|
+
* @category testing
|
|
86
|
+
* @since 0.1.0
|
|
87
|
+
*/
|
|
88
|
+
export declare function throws(thunk: () => void, error?: Error | ((u: unknown) => undefined), ..._: Array<never>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Asserts that `thunk` throws or returns a rejected promise, optionally checking the failure value against an expected `Error` or validation function.
|
|
91
|
+
*
|
|
92
|
+
* @category testing
|
|
93
|
+
* @since 0.1.0
|
|
94
|
+
*/
|
|
95
|
+
export declare function throwsAsync(thunk: () => Promise<void>, error?: Error | ((u: unknown) => undefined), ..._: Array<never>): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Asserts that `option` is `None`.
|
|
98
|
+
*
|
|
99
|
+
* @category testing
|
|
100
|
+
* @since 0.1.0
|
|
101
|
+
*/
|
|
102
|
+
export declare function assertNone<A>(option: Option.Option<A>, ..._: Array<never>): asserts option is Option.None<never>;
|
|
103
|
+
/**
|
|
104
|
+
* Asserts that `a` is not `undefined`.
|
|
105
|
+
*
|
|
106
|
+
* @category testing
|
|
107
|
+
* @since 0.1.0
|
|
108
|
+
*/
|
|
109
|
+
export declare function assertDefined<A>(a: A | undefined, ..._: Array<never>): asserts a is Exclude<A, undefined>;
|
|
110
|
+
/**
|
|
111
|
+
* Asserts that `a` is `undefined`.
|
|
112
|
+
*
|
|
113
|
+
* @category testing
|
|
114
|
+
* @since 0.1.0
|
|
115
|
+
*/
|
|
116
|
+
export declare function assertUndefined<A>(a: A | undefined, ..._: Array<never>): asserts a is undefined;
|
|
117
|
+
/**
|
|
118
|
+
* Asserts that `option` is `Some` and contains a value equal to `expected`.
|
|
119
|
+
*
|
|
120
|
+
* @category testing
|
|
121
|
+
* @since 0.1.0
|
|
122
|
+
*/
|
|
123
|
+
export declare function assertSome<A>(option: Option.Option<A>, expected: A, ..._: Array<never>): asserts option is Option.Some<A>;
|
|
124
|
+
/**
|
|
125
|
+
* Asserts that `result` is `Success` and contains a value equal to `expected`.
|
|
126
|
+
*
|
|
127
|
+
* @category testing
|
|
128
|
+
* @since 0.1.0
|
|
129
|
+
*/
|
|
130
|
+
export declare function assertSuccess<A, E>(result: Result.Result<A, E>, expected: A, ..._: Array<never>): asserts result is Result.Success<A, never>;
|
|
131
|
+
/**
|
|
132
|
+
* Asserts that `result` is `Failure` and contains an error equal to `expected`.
|
|
133
|
+
*
|
|
134
|
+
* @category testing
|
|
135
|
+
* @since 0.1.0
|
|
136
|
+
*/
|
|
137
|
+
export declare function assertFailure<A, E>(result: Result.Result<A, E>, expected: E, ..._: Array<never>): asserts result is Result.Failure<never, E>;
|
|
138
|
+
/**
|
|
139
|
+
* Asserts that `exit` is a failure with a cause equal to `expected`.
|
|
140
|
+
*
|
|
141
|
+
* @category testing
|
|
142
|
+
* @since 0.1.0
|
|
143
|
+
*/
|
|
144
|
+
export declare function assertExitFailure<A, E>(exit: Exit.Exit<A, E>, expected: Cause.Cause<E>, ..._: Array<never>): asserts exit is Exit.Failure<never, E>;
|
|
145
|
+
/**
|
|
146
|
+
* Asserts that `exit` is a success with a value equal to `expected`.
|
|
147
|
+
*
|
|
148
|
+
* @category testing
|
|
149
|
+
* @since 0.1.0
|
|
150
|
+
*/
|
|
151
|
+
export declare function assertExitSuccess<A, E>(exit: Exit.Exit<A, E>, expected: A, ..._: Array<never>): asserts exit is Exit.Success<A, never>;
|
|
152
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides assertion helpers used by `effect-rstest` tests.
|
|
3
|
+
*
|
|
4
|
+
* This module defines small assertion functions built on Node's `assert`,
|
|
5
|
+
* Rstest's instance checks, and Effect's equality support. The helpers cover
|
|
6
|
+
* basic equality, thrown errors, defined and undefined values, strings, regular
|
|
7
|
+
* expressions, class instances, `Option`, `Result`, and `Exit`. Most helpers are
|
|
8
|
+
* synchronous; `throwsAsync` handles rejected promises.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.1.0
|
|
11
|
+
*/
|
|
12
|
+
import { assert as rassert } from "@rstest/core";
|
|
13
|
+
import * as Equal from "effect/Equal";
|
|
14
|
+
import * as Exit from "effect/Exit";
|
|
15
|
+
import * as Option from "effect/Option";
|
|
16
|
+
import * as Predicate from "effect/Predicate";
|
|
17
|
+
import * as Result from "effect/Result";
|
|
18
|
+
import * as assert from "node:assert";
|
|
19
|
+
/**
|
|
20
|
+
* Fails the current test with the provided error message.
|
|
21
|
+
*
|
|
22
|
+
* @category testing
|
|
23
|
+
* @since 0.1.0
|
|
24
|
+
*/
|
|
25
|
+
export function fail(message) {
|
|
26
|
+
assert.fail(message);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Asserts that `actual` is deeply strictly equal to `expected` using Node's `assert.deepStrictEqual`.
|
|
30
|
+
*
|
|
31
|
+
* @category testing
|
|
32
|
+
* @since 0.1.0
|
|
33
|
+
*/
|
|
34
|
+
export function deepStrictEqual(actual, expected, message, ..._) {
|
|
35
|
+
assert.deepStrictEqual(actual, expected, message);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Asserts that `actual` is not deeply strictly equal to `expected` using Node's `assert.notDeepStrictEqual`.
|
|
39
|
+
*
|
|
40
|
+
* @category testing
|
|
41
|
+
* @since 0.1.0
|
|
42
|
+
*/
|
|
43
|
+
export function notDeepStrictEqual(actual, expected, message, ..._) {
|
|
44
|
+
assert.notDeepStrictEqual(actual, expected, message);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Asserts that `actual` is strictly equal to `expected` using Node's `assert.strictEqual`.
|
|
48
|
+
*
|
|
49
|
+
* @category testing
|
|
50
|
+
* @since 0.1.0
|
|
51
|
+
*/
|
|
52
|
+
export function strictEqual(actual, expected, message, ..._) {
|
|
53
|
+
if (message !== undefined) {
|
|
54
|
+
assert.strictEqual(actual, expected, message);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
assert.strictEqual(actual, expected);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Asserts that `actual` is equal to `expected` using the `Equal.equals` trait.
|
|
62
|
+
*
|
|
63
|
+
* @category testing
|
|
64
|
+
* @since 0.1.0
|
|
65
|
+
*/
|
|
66
|
+
export function assertEquals(actual, expected, message, ..._) {
|
|
67
|
+
if (!Equal.equals(actual, expected)) {
|
|
68
|
+
deepStrictEqual(actual, expected, message); // show diff
|
|
69
|
+
fail(message ?? "Expected values to be Equal.equals");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Asserts that `thunk` does not throw an error.
|
|
74
|
+
*
|
|
75
|
+
* @category testing
|
|
76
|
+
* @since 0.1.0
|
|
77
|
+
*/
|
|
78
|
+
export function doesNotThrow(thunk, message, ..._) {
|
|
79
|
+
assert.doesNotThrow(thunk, message);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Asserts that `value` is an instance of `constructor`.
|
|
83
|
+
*
|
|
84
|
+
* @category testing
|
|
85
|
+
* @since 0.1.0
|
|
86
|
+
*/
|
|
87
|
+
export function assertInstanceOf(value, constructor, message, ..._) {
|
|
88
|
+
rassert.instanceOf(value, constructor, message);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Asserts that `self` is `true`.
|
|
92
|
+
*
|
|
93
|
+
* @category testing
|
|
94
|
+
* @since 0.1.0
|
|
95
|
+
*/
|
|
96
|
+
export function assertTrue(self, message, ..._) {
|
|
97
|
+
strictEqual(self, true, message);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Asserts that `self` is `false`.
|
|
101
|
+
*
|
|
102
|
+
* @category testing
|
|
103
|
+
* @since 0.1.0
|
|
104
|
+
*/
|
|
105
|
+
export function assertFalse(self, message, ..._) {
|
|
106
|
+
strictEqual(self, false, message);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Asserts that `actual` includes `expected`.
|
|
110
|
+
*
|
|
111
|
+
* @category testing
|
|
112
|
+
* @since 0.1.0
|
|
113
|
+
*/
|
|
114
|
+
export function assertInclude(actual, expected, ..._) {
|
|
115
|
+
if (typeof expected === "string") {
|
|
116
|
+
if (!actual?.includes(expected)) {
|
|
117
|
+
fail(`Expected\n\n${actual}\n\nto include\n\n${expected}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Asserts that `actual` matches `regExp`.
|
|
123
|
+
*
|
|
124
|
+
* @category testing
|
|
125
|
+
* @since 0.1.0
|
|
126
|
+
*/
|
|
127
|
+
export function assertMatch(actual, regExp, ..._) {
|
|
128
|
+
if (!regExp.test(actual)) {
|
|
129
|
+
fail(`Expected\n\n${actual}\n\nto match\n\n${regExp}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Asserts that `thunk` throws, optionally checking the thrown value against an expected `Error` or validation function.
|
|
134
|
+
*
|
|
135
|
+
* @category testing
|
|
136
|
+
* @since 0.1.0
|
|
137
|
+
*/
|
|
138
|
+
export function throws(thunk, error, ..._) {
|
|
139
|
+
try {
|
|
140
|
+
thunk();
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
if (error !== undefined) {
|
|
144
|
+
if (Predicate.isFunction(error)) {
|
|
145
|
+
error(e);
|
|
146
|
+
}
|
|
147
|
+
else if (error) {
|
|
148
|
+
deepStrictEqual(e, error);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
throw e;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
fail("Expected to throw an error");
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Asserts that `thunk` throws or returns a rejected promise, optionally checking the failure value against an expected `Error` or validation function.
|
|
160
|
+
*
|
|
161
|
+
* @category testing
|
|
162
|
+
* @since 0.1.0
|
|
163
|
+
*/
|
|
164
|
+
export async function throwsAsync(thunk, error, ..._) {
|
|
165
|
+
try {
|
|
166
|
+
await thunk();
|
|
167
|
+
}
|
|
168
|
+
catch (e) {
|
|
169
|
+
if (error !== undefined) {
|
|
170
|
+
if (Predicate.isFunction(error)) {
|
|
171
|
+
error(e);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
deepStrictEqual(e, error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
fail("Expected to throw an error");
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Asserts that `option` is `None`.
|
|
183
|
+
*
|
|
184
|
+
* @category testing
|
|
185
|
+
* @since 0.1.0
|
|
186
|
+
*/
|
|
187
|
+
export function assertNone(option, ..._) {
|
|
188
|
+
deepStrictEqual(option, Option.none());
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Asserts that `a` is not `undefined`.
|
|
192
|
+
*
|
|
193
|
+
* @category testing
|
|
194
|
+
* @since 0.1.0
|
|
195
|
+
*/
|
|
196
|
+
export function assertDefined(a, ..._) {
|
|
197
|
+
if (a === undefined) {
|
|
198
|
+
fail("Expected value to be defined");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Asserts that `a` is `undefined`.
|
|
203
|
+
*
|
|
204
|
+
* @category testing
|
|
205
|
+
* @since 0.1.0
|
|
206
|
+
*/
|
|
207
|
+
export function assertUndefined(a, ..._) {
|
|
208
|
+
if (a !== undefined) {
|
|
209
|
+
fail("Expected value to be undefined");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Asserts that `option` is `Some` and contains a value equal to `expected`.
|
|
214
|
+
*
|
|
215
|
+
* @category testing
|
|
216
|
+
* @since 0.1.0
|
|
217
|
+
*/
|
|
218
|
+
export function assertSome(option, expected, ..._) {
|
|
219
|
+
deepStrictEqual(option, Option.some(expected));
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Asserts that `result` is `Success` and contains a value equal to `expected`.
|
|
223
|
+
*
|
|
224
|
+
* @category testing
|
|
225
|
+
* @since 0.1.0
|
|
226
|
+
*/
|
|
227
|
+
export function assertSuccess(result, expected, ..._) {
|
|
228
|
+
deepStrictEqual(result, Result.succeed(expected));
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Asserts that `result` is `Failure` and contains an error equal to `expected`.
|
|
232
|
+
*
|
|
233
|
+
* @category testing
|
|
234
|
+
* @since 0.1.0
|
|
235
|
+
*/
|
|
236
|
+
export function assertFailure(result, expected, ..._) {
|
|
237
|
+
deepStrictEqual(result, Result.fail(expected));
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Asserts that `exit` is a failure with a cause equal to `expected`.
|
|
241
|
+
*
|
|
242
|
+
* @category testing
|
|
243
|
+
* @since 0.1.0
|
|
244
|
+
*/
|
|
245
|
+
export function assertExitFailure(exit, expected, ..._) {
|
|
246
|
+
deepStrictEqual(exit, Exit.failCause(expected));
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Asserts that `exit` is a success with a value equal to `expected`.
|
|
250
|
+
*
|
|
251
|
+
* @category testing
|
|
252
|
+
* @since 0.1.0
|
|
253
|
+
*/
|
|
254
|
+
export function assertExitSuccess(exit, expected, ..._) {
|
|
255
|
+
deepStrictEqual(exit, Exit.succeed(expected));
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "effect-rstest",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Effect test helpers for Rstest",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Néstor López",
|
|
8
|
+
"homepage": "https://github.com/nsttt/effect-rstest#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/nsttt/effect-rstest.git"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/nsttt/effect-rstest/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"effect",
|
|
18
|
+
"rstest",
|
|
19
|
+
"testing",
|
|
20
|
+
"typescript"
|
|
21
|
+
],
|
|
22
|
+
"sideEffects": false,
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
25
|
+
},
|
|
26
|
+
"packageManager": "pnpm@11.20.0",
|
|
27
|
+
"exports": {
|
|
28
|
+
"./package.json": "./package.json",
|
|
29
|
+
".": "./dist/index.js",
|
|
30
|
+
"./*": "./dist/*.js",
|
|
31
|
+
"./internal/*": null,
|
|
32
|
+
"./index": null,
|
|
33
|
+
"./*/index": null
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"dist/**/*.js",
|
|
37
|
+
"dist/**/*.js.map",
|
|
38
|
+
"dist/**/*.d.ts",
|
|
39
|
+
"dist/**/*.d.ts.map"
|
|
40
|
+
],
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "tsc -p tsconfig.json",
|
|
46
|
+
"check": "tsc -p tsconfig.test.json",
|
|
47
|
+
"test": "rstest run",
|
|
48
|
+
"test:types": "tstyche --target '>=5.9'",
|
|
49
|
+
"prepack": "pnpm build"
|
|
50
|
+
},
|
|
51
|
+
"peerDependencies": {
|
|
52
|
+
"@rstest/core": ">=0.11.12 <0.12.0",
|
|
53
|
+
"effect": ">=4.0.0-rc.112 <5.0.0"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@rstest/core": "0.11.12",
|
|
57
|
+
"@types/node": "^26.4.1",
|
|
58
|
+
"effect": "4.0.0-rc.112",
|
|
59
|
+
"tstyche": "^7.2.4",
|
|
60
|
+
"typescript": "^5.9.3"
|
|
61
|
+
}
|
|
62
|
+
}
|