effect-rstest 0.1.4 → 0.1.5

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/README.md CHANGED
@@ -28,8 +28,14 @@ it.effect("advances virtual time", () =>
28
28
  }))
29
29
  ```
30
30
 
31
+ The test fiber receives Rstest's abort signal. If a test times out, the runner still reports the timeout, but an `onTestFinished` barrier waits for fiber settlement and scoped finalizers before later sequential tests and suite-layer release. The barrier does not impose a second cleanup timeout: a finalizer that never completes can prevent the suite from progressing. Successful non-void Effect values are discarded; ordinary failures and `.fails` outcomes retain their runner semantics.
32
+
33
+ **Native hook boundary:** Rstest runs native `afterEach` hooks before `onTestFinished`. On timeout, those hooks can run before Effect cleanup finishes; the settlement guarantee does not cover them. It also does not serialize tests explicitly scheduled concurrently.
34
+
31
35
  Use `layer` or `it.layer` to share a layer across a group of tests. Named layers accept `concurrent` to override the enclosing suite.
32
36
 
37
+ Rstest's suite hook context has no abort signal. When setup exceeds an explicit layer `timeout`, or the inherited `hookTimeout` when omitted, suite teardown interrupts and awaits the setup fiber before closing its scope. This also releases resources acquired before an early setup failure. The teardown hook retains the same timeout: cleanup that exceeds it can outlive the hook and is not a bounded-cleanup guarantee. Hook failures remain runner failures. Named and unnamed layer blocks use the same lifecycle boundary.
38
+
33
39
  ```ts
34
40
  import { Context, Effect, Layer } from "effect"
35
41
  import { assert, it } from "effect-rstest"
@@ -60,9 +66,11 @@ it.effect.prop(
60
66
  )
61
67
  ```
62
68
 
69
+ All three helpers accept both tuple and record inputs, mixing schemas and FastCheck arbitraries. Schemas are converted with `Schema.toArbitrary(schema)(FastCheck)`; FastCheck arbitraries are used directly. For example, a synchronous property can use `[Schema.Literal("schema"), FastCheck.integer()]` or `{ label: Schema.Literal("schema"), count: FastCheck.integer() }`. A schema must support arbitrary generation; this does not make every possible schema generatable.
70
+
63
71
  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.
64
72
 
65
- Call `addEqualityTesters()` from an Rstest setup file to make `toEqual` use Effect's `Equal` implementation.
73
+ Call `addEqualityTesters()` from an Rstest setup file to opt in. When both compared values implement Effect's `Equal` protocol, the tester delegates to `Equal.equals`, including semantic inequality and nested comparisons. For other values it returns `undefined`, leaving plain-object equality and asymmetric matchers to Rstest. It does not replace Rstest's equality behavior globally.
66
74
 
67
75
  ## License
68
76
 
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ import * as __rspack_external_effect_Duration_69e466c3 from "effect/Duration";
7
7
  import * as __rspack_external_effect_Effect_41060786 from "effect/Effect";
8
8
  import * as __rspack_external_effect_Equal_84d564fb from "effect/Equal";
9
9
  import * as __rspack_external_effect_Exit_1ca64b33 from "effect/Exit";
10
+ import * as __rspack_external_effect_Fiber_8b965ce0 from "effect/Fiber";
10
11
  import * as __rspack_external_effect_Layer_69c46453 from "effect/Layer";
11
12
  import * as __rspack_external_effect_Predicate_45f92690 from "effect/Predicate";
12
13
  import * as __rspack_external_effect_Schedule_8bfd7ba9 from "effect/Schedule";
@@ -22,11 +23,17 @@ const runPromise = __rspack_external_effect_Effect_41060786.fnUntraced(function*
22
23
  }, (effect, _, ctx)=>__rspack_external_effect_Effect_41060786.runPromise(effect, {
23
24
  signal: ctx?.signal
24
25
  }));
25
- const runTest = (ctx)=>(effect)=>runPromise(effect, ctx);
26
+ const runTest = (ctx)=>(effect)=>{
27
+ let settlement;
28
+ ctx?.onTestFinished(()=>settlement, 0);
29
+ const result = runPromise(effect, ctx);
30
+ settlement = result.then(()=>{}, ()=>{});
31
+ return result;
32
+ };
26
33
  const TestEnv = __rspack_external_effect_Layer_69c46453.mergeAll(TestConsole.layer, TestClock.layer());
27
34
  const addEqualityTesters = ()=>{
28
35
  __rspack_external__rstest_core_d9441397.expect.addEqualityTesters([
29
- (a, b)=>__rspack_external_effect_Equal_84d564fb.isEqual(a) || __rspack_external_effect_Equal_84d564fb.isEqual(b) ? __rspack_external_effect_Equal_84d564fb.equals(a, b) : void 0
36
+ (a, b)=>__rspack_external_effect_Equal_84d564fb.isEqual(a) && __rspack_external_effect_Equal_84d564fb.isEqual(b) ? __rspack_external_effect_Equal_84d564fb.equals(a, b) : void 0
30
37
  ]);
31
38
  };
32
39
  const hookTimeout = (timeout)=>void 0 === timeout ? void 0 : __rspack_external_effect_Duration_69e466c3.toMillis(__rspack_external_effect_Duration_69e466c3.fromInputUnsafe(timeout));
@@ -125,10 +132,15 @@ const internal_layer = (layer_, options, testApi = __rspack_external__rstest_cor
125
132
  const memoMap = options?.memoMap ?? __rspack_external_effect_Effect_41060786.runSync(__rspack_external_effect_Layer_69c46453.makeMemoMap);
126
133
  const scope = __rspack_external_effect_Effect_41060786.runSync(__rspack_external_effect_Scope_f87b0bd6.make());
127
134
  const contextEffect = __rspack_external_effect_Layer_69c46453.buildWithMemoMap(withTestEnv, memoMap, scope).pipe(__rspack_external_effect_Effect_41060786.orDie, __rspack_external_effect_Effect_41060786.cached, __rspack_external_effect_Effect_41060786.runSync);
135
+ let setupFiber;
136
+ const buildContext = ()=>runPromise(__rspack_external_effect_Effect_41060786.withFiber((fiber)=>{
137
+ setupFiber = fiber;
138
+ return __rspack_external_effect_Effect_41060786.asVoid(contextEffect);
139
+ }));
128
140
  let closePromise;
129
141
  const closeScope = ()=>{
130
142
  if (void 0 !== closePromise) return closePromise;
131
- closePromise = runPromise(__rspack_external_effect_Scope_f87b0bd6.close(scope, __rspack_external_effect_Exit_1ca64b33["void"])).then(()=>{});
143
+ closePromise = runPromise(__rspack_external_effect_Effect_41060786.andThen(void 0 !== setupFiber ? __rspack_external_effect_Fiber_8b965ce0.interrupt(setupFiber) : __rspack_external_effect_Effect_41060786["void"], __rspack_external_effect_Scope_f87b0bd6.close(scope, __rspack_external_effect_Exit_1ca64b33["void"]))).then(()=>{});
132
144
  return closePromise;
133
145
  };
134
146
  const makeIt = (it)=>makeItProxy(it, {
@@ -146,14 +158,14 @@ const internal_layer = (layer_, options, testApi = __rspack_external__rstest_cor
146
158
  if (1 === args.length) {
147
159
  const timeout = hookTimeout(options?.timeout);
148
160
  return __rspack_external__rstest_core_d9441397.describe("", ()=>{
149
- __rspack_external__rstest_core_d9441397.beforeAll(()=>runPromise(__rspack_external_effect_Effect_41060786.asVoid(contextEffect)), timeout);
161
+ __rspack_external__rstest_core_d9441397.beforeAll(buildContext, timeout);
150
162
  __rspack_external__rstest_core_d9441397.afterAll(()=>closeScope(), timeout);
151
163
  return args[0](makeIt(testApi));
152
164
  });
153
165
  }
154
166
  const describe = options?.concurrent === true ? __rspack_external__rstest_core_d9441397.describe.concurrent : options?.concurrent === false ? __rspack_external__rstest_core_d9441397.describe.sequential : __rspack_external__rstest_core_d9441397.describe;
155
167
  return describe(args[0], ()=>{
156
- __rspack_external__rstest_core_d9441397.beforeAll(()=>runPromise(__rspack_external_effect_Effect_41060786.asVoid(contextEffect)), hookTimeout(options?.timeout));
168
+ __rspack_external__rstest_core_d9441397.beforeAll(buildContext, hookTimeout(options?.timeout));
157
169
  __rspack_external__rstest_core_d9441397.afterAll(()=>closeScope(), hookTimeout(options?.timeout));
158
170
  return args[1](makeIt(testApi));
159
171
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/internal/internal.ts","../src/index.ts"],"sourcesContent":["/**\n * @since 0.1.0\n */\n\nimport * as R from \"@rstest/core\"\nimport * as Cause from \"effect/Cause\"\nimport * as Duration from \"effect/Duration\"\nimport * as Effect from \"effect/Effect\"\nimport * as Equal from \"effect/Equal\"\nimport * as Exit from \"effect/Exit\"\nimport { flow, pipe } from \"effect/Function\"\nimport * as Layer from \"effect/Layer\"\nimport * as Predicate from \"effect/Predicate\"\nimport * as Schedule from \"effect/Schedule\"\nimport * as Schema from \"effect/Schema\"\nimport * as Scope from \"effect/Scope\"\nimport { FastCheck as FC, TestClock, TestConsole } from \"effect/testing\"\nimport type * as Rstest from \"../index.ts\"\n\nconst runPromise: <E, A>(\n _: Effect.Effect<A, E, never>,\n ctx?: R.TestContext | undefined\n) => Promise<A> = Effect.fnUntraced(function*<E, A>(effect: Effect.Effect<A, E>, _ctx?: Rstest.TestContext) {\n const exit = yield* Effect.exit(effect)\n if (Exit.isFailure(exit)) {\n const errors = Cause.prettyErrors(exit.cause)\n for (let i = 0; i < errors.length; i++) {\n yield* Effect.logError(errors[i])\n }\n }\n return yield* exit\n}, (effect, _, ctx) => Effect.runPromise(effect, { signal: ctx?.signal }))\n\n/** @internal */\nconst runTest = (ctx?: Rstest.TestContext) => <E, A>(effect: Effect.Effect<A, E>) => runPromise(effect, ctx)\n\n/** @internal */\nexport type TestContext = TestConsole.TestConsole | TestClock.TestClock\n\nconst TestEnv = Layer.mergeAll(TestConsole.layer, TestClock.layer())\n\n/** @internal */\nexport const addEqualityTesters = () => {\n R.expect.addEqualityTesters([\n (a, b) => Equal.isEqual(a) || Equal.isEqual(b) ? Equal.equals(a, b) : undefined\n ])\n}\n\nconst hookTimeout = (timeout?: Duration.Input) =>\n timeout === undefined ? undefined : Duration.toMillis(Duration.fromInputUnsafe(timeout))\n\ntype PropertyOptions = R.TestOptions & {\n readonly fastCheck?: FC.Parameters<any> | undefined\n readonly fails?: boolean | undefined\n}\n\ntype PropertyTimeout = number | PropertyOptions\n\n/** @internal */\nconst testOptions = (timeout?: number | R.TestOptions | PropertyOptions): R.TestOptions => {\n if (typeof timeout === \"number\") {\n return { timeout }\n }\n if (timeout === undefined) {\n return {}\n }\n const { fails: _, fastCheck: __, ...options } = timeout as PropertyOptions\n return options\n}\n\ntype ArbitraryInput = Schema.Schema<any> | FC.Arbitrary<unknown>\n\ntype Arbitraries = ReadonlyArray<ArbitraryInput> | { [K in string]: ArbitraryInput }\n\nconst propertyTestOptions = (\n timeout: PropertyTimeout | undefined\n): Exclude<PropertyTimeout, number> | undefined => typeof timeout === \"number\" ? undefined : timeout\n\nconst checkOptions = (timeout: PropertyTimeout | undefined): FC.Parameters<any> | undefined =>\n propertyTestOptions(timeout)?.fastCheck\n\nconst compileArbitraryInput = (input: ArbitraryInput): FC.Arbitrary<any> =>\n Schema.isSchema(input) ? Schema.toArbitrary(input)(FC) : input as FC.Arbitrary<any>\n\nconst makeArbitrary = (arbitraries: Arbitraries): FC.Arbitrary<any> =>\n Array.isArray(arbitraries)\n ? FC.tuple(...arbitraries.map(compileArbitraryInput))\n : FC.record(Object.fromEntries(\n Object.entries(arbitraries).map(([key, input]) => [key, compileArbitraryInput(input)])\n ))\n\nconst normalizeProperty = <A, E, R>(\n property: (value: A) => boolean | Effect.Effect<boolean, E, R>,\n value: A\n): Effect.Effect<boolean, E | Cause.Cause<E>, R> =>\n Effect.catchCause(\n Effect.suspend(() => {\n const output = property(value)\n if (Predicate.isPromiseLike(output)) {\n throw new TypeError(\"Effect property tests must return an Effect or boolean\")\n }\n return Effect.isEffect(output) ? output : Effect.succeed(output)\n }),\n (cause): Effect.Effect<never, E | Cause.Cause<E>> =>\n Cause.hasInterrupts(cause) ? Effect.failCause(cause) : Effect.fail(cause)\n )\n\nconst normalizeSyncProperty = <A>(\n property: (value: A, ctx: R.TestContext) => boolean | void,\n value: A,\n ctx: R.TestContext\n): boolean => {\n const output = property(value, ctx)\n if (Predicate.isPromiseLike(output)) {\n throw new TypeError(\"Synchronous property tests must not return a Promise\")\n }\n return output !== false\n}\n\nconst runCheck = <A, E>(\n ctx: R.TestContext,\n arbitrary: FC.Arbitrary<A>,\n property: (value: A) => boolean | Effect.Effect<boolean, E>,\n options: FC.Parameters<any> | undefined\n): Promise<void> =>\n FC.assert(\n FC.asyncProperty(arbitrary, (value) => runTest(ctx)(normalizeProperty(property, value))),\n options\n )\n\ntype TestAPI = R.TestAPIs | R.TestAPIs[\"skip\"]\n\nconst makeItProxy = <Methods extends object>(\n it: TestAPI,\n overrides: Methods\n): Methods & R.TestAPIs =>\n new Proxy(it as Methods & R.TestAPIs, {\n apply(target, thisArg, argArray) {\n return Reflect.apply(target, thisArg, argArray)\n },\n get(target, property, receiver) {\n if (Object.hasOwn(overrides, property)) {\n return Reflect.get(overrides, property)\n }\n // do not bind: binding would strip Rstest's static helpers\n return Reflect.get(target, property, receiver)\n }\n })\n\n/** @internal */\nconst makeTester = <R>(\n mapEffect: <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, never>,\n it: TestAPI = R.it\n): Rstest.Rstest.Tester<R> => {\n const run = <A, E, TestArgs extends Array<unknown>>(\n ctx: R.TestContext & object,\n args: TestArgs,\n self: Rstest.Rstest.TestFunction<A, E, R, TestArgs>\n ) => pipe(Effect.suspend(() => self(...args)), mapEffect, Effect.asVoid, runTest(ctx))\n\n const f: Rstest.Rstest.Test<R> = (name, self, timeout) =>\n it(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const skip: Rstest.Rstest.Tester<R>[\"only\"] = (name, self, timeout) =>\n it.skip(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const skipIf: Rstest.Rstest.Tester<R>[\"skipIf\"] = (condition) => (name, self, timeout) =>\n it.skipIf(condition)(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const runIf: Rstest.Rstest.Tester<R>[\"runIf\"] = (condition) => (name, self, timeout) =>\n it.runIf(condition)(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const only: Rstest.Rstest.Tester<R>[\"only\"] = (name, self, timeout) =>\n it.only(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const concurrent: Rstest.Rstest.Tester<R>[\"concurrent\"] = (name, self, timeout) =>\n it.concurrent(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const sequential: Rstest.Rstest.Tester<R>[\"sequential\"] = (name, self, timeout) =>\n it.sequential(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const each: Rstest.Rstest.Tester<R>[\"each\"] = (cases) => (name, self, timeout) => {\n it.for(cases)(\n name,\n testOptions(timeout),\n (args, ctx) => run(ctx, [args], self)\n )\n }\n\n const fails: Rstest.Rstest.Tester<R>[\"fails\"] = (name, self, timeout) =>\n it.fails(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const prop: Rstest.Rstest.Tester<R>[\"prop\"] = (name, arbitraries, self, timeout) => {\n const arbitrary = makeArbitrary(arbitraries)\n const testApi = propertyTestOptions(timeout)?.fails ? it.fails : it\n return testApi(\n name,\n testOptions(timeout),\n (ctx) =>\n runCheck(\n ctx,\n arbitrary,\n (values) =>\n Effect.mapEager(\n mapEffect(Effect.suspend(() => self(values as any, ctx))),\n (value) => (value as unknown) !== false\n ),\n checkOptions(timeout)\n )\n )\n }\n\n return Object.assign(f, { skip, skipIf, runIf, only, concurrent, sequential, each, fails, prop })\n}\n\n/** @internal */\nconst makeProp = (it: TestAPI): Rstest.Rstest.Methods[\"prop\"] => (name, arbitraries, self, timeout) => {\n const arbitrary = makeArbitrary(arbitraries)\n const testApi = propertyTestOptions(timeout)?.fails ? it.fails : it\n return testApi(\n name,\n testOptions(timeout),\n (ctx) =>\n runCheck(\n ctx,\n arbitrary,\n (values) => normalizeSyncProperty(self, values as any, ctx),\n checkOptions(timeout)\n )\n )\n}\n\n/** @internal */\nexport const prop: Rstest.Rstest.Methods[\"prop\"] = makeProp(R.it)\n\n/** @internal */\nexport const layer = <R, E>(\n layer_: Layer.Layer<R, E>,\n options?: {\n readonly concurrent?: boolean\n readonly memoMap?: Layer.MemoMap\n readonly timeout?: Duration.Input\n readonly excludeTestServices?: boolean\n },\n testApi: TestAPI = R.it\n): {\n (f: (it: Rstest.Rstest.MethodsNonLive<R>) => void): void\n (\n name: string,\n f: (it: Rstest.Rstest.MethodsNonLive<R>) => void\n ): void\n} =>\n(\n ...args: [\n name: string,\n f: (\n it: Rstest.Rstest.MethodsNonLive<R>\n ) => void\n ] | [\n f: (it: Rstest.Rstest.MethodsNonLive<R>) => void\n ]\n) => {\n const excludeTestServices = options?.excludeTestServices ?? false\n const withTestEnv = excludeTestServices\n ? layer_ as Layer.Layer<R, E>\n : Layer.provideMerge(layer_, TestEnv)\n const memoMap = options?.memoMap ?? Effect.runSync(Layer.makeMemoMap)\n const scope = Effect.runSync(Scope.make())\n const contextEffect = Layer.buildWithMemoMap(withTestEnv, memoMap, scope).pipe(\n Effect.orDie,\n Effect.cached,\n Effect.runSync\n )\n let closePromise: Promise<void> | undefined\n const closeScope = (): Promise<void> => {\n if (closePromise !== undefined) {\n return closePromise\n }\n closePromise = runPromise(Scope.close(scope, Exit.void)).then(() => {})\n return closePromise\n }\n\n const makeIt = (it: TestAPI): Rstest.Rstest.MethodsNonLive<R> =>\n makeItProxy(it, {\n effect: makeTester<R | Scope.Scope>(\n (effect) =>\n Effect.flatMap(contextEffect, (context) =>\n effect.pipe(\n Effect.scoped,\n Effect.provide(context)\n )),\n it\n ),\n prop: makeProp(it),\n flakyTest,\n layer<R2, E2>(nestedLayer: Layer.Layer<R2, E2, R>, options?: {\n readonly concurrent?: boolean\n readonly timeout?: Duration.Input\n }) {\n return layer(\n Layer.provideMerge(nestedLayer, withTestEnv),\n {\n ...options,\n memoMap: Layer.forkMemoMapUnsafe(memoMap),\n excludeTestServices\n },\n it\n )\n }\n })\n\n if (args.length === 1) {\n const timeout = hookTimeout(options?.timeout)\n return R.describe(\"\", () => {\n R.beforeAll(() => runPromise(Effect.asVoid(contextEffect)), timeout)\n R.afterAll(() => closeScope(), timeout)\n return args[0](makeIt(testApi))\n })\n }\n\n const describe = options?.concurrent === true\n ? R.describe.concurrent\n : options?.concurrent === false\n ? R.describe.sequential\n : R.describe\n return describe(args[0], () => {\n R.beforeAll(\n () => runPromise(Effect.asVoid(contextEffect)),\n hookTimeout(options?.timeout)\n )\n R.afterAll(\n () => closeScope(),\n hookTimeout(options?.timeout)\n )\n return args[1](makeIt(testApi))\n })\n}\n\nconst makeLayer = (it: TestAPI): Rstest.Rstest.Methods[\"layer\"] => (layer_, options) => layer(layer_, options, it)\n\n/** @internal */\nexport const flakyTest = <A, E, R>(\n self: Effect.Effect<A, E, R | Scope.Scope>,\n timeout: Duration.Input = Duration.seconds(30)\n) =>\n pipe(\n self,\n Effect.scoped,\n Effect.sandbox,\n Effect.retry(\n pipe(\n Schedule.recurs(10),\n Schedule.while((_) =>\n Effect.succeed(Duration.isLessThanOrEqualTo(\n Duration.fromInputUnsafe(_.elapsed),\n Duration.fromInputUnsafe(timeout)\n ))\n )\n )\n ),\n Effect.orDie\n )\n\n/** @internal */\nexport const makeMethods = (it: TestAPI): Rstest.Rstest.Methods =>\n makeItProxy(it, {\n effect: makeTester<Scope.Scope>(flow(Effect.scoped, Effect.provide(TestEnv)), it),\n live: makeTester<Scope.Scope>(Effect.scoped, it),\n flakyTest,\n layer: makeLayer(it),\n prop: makeProp(it)\n })\n\n/** @internal */\nexport const {\n /** @internal */\n effect,\n /** @internal */\n live\n} = makeMethods(R.it)\n\n/** @internal */\nexport const describeWrapped = (name: string, f: (it: Rstest.Rstest.Methods) => void): void =>\n R.describe(name, () => f(makeMethods(R.it)))\n","/**\n * @since 0.1.0\n */\nimport * as R from \"@rstest/core\"\nimport type * as Duration from \"effect/Duration\"\nimport type * as Effect from \"effect/Effect\"\nimport type * as Layer from \"effect/Layer\"\nimport type * as Schema from \"effect/Schema\"\nimport type * as Scope from \"effect/Scope\"\nimport type { FastCheck as FC } from \"effect/testing\"\nimport * as internal from \"./internal/internal.ts\"\n\n/**\n * @since 0.1.0\n */\nexport * from \"@rstest/core\"\n\n/**\n * @since 0.1.0\n */\nexport type API = R.TestAPIs\n\n/**\n * @since 0.1.0\n */\nexport namespace Rstest {\n /**\n * @since 0.1.0\n */\n export interface TestFunction<A, E, R, TestArgs extends Array<any>> {\n (...args: TestArgs): Effect.Effect<A, E, R>\n }\n\n /**\n * @since 0.1.0\n */\n export interface Test<R> {\n <A, E>(\n name: string,\n self: TestFunction<A, E, R, [R.TestContext]>,\n timeout?: number | R.TestOptions\n ): void\n }\n\n /**\n * @since 0.1.0\n */\n export type Arbitraries =\n | ReadonlyArray<Schema.Schema<any> | FC.Arbitrary<any>>\n | { [K in string]: Schema.Schema<any> | FC.Arbitrary<any> }\n\n type ArbitraryValue<A> = A extends Schema.Schema<infer T> ? T\n : A extends FC.Arbitrary<infer T> ? T\n : never\n\n /**\n * @since 0.1.0\n */\n export interface Tester<R> extends Rstest.Test<R> {\n skip: Rstest.Test<R>\n skipIf: (condition: boolean) => Rstest.Test<R>\n runIf: (condition: boolean) => Rstest.Test<R>\n only: Rstest.Test<R>\n concurrent: Rstest.Test<R>\n sequential: Rstest.Test<R>\n each: <T>(\n cases: ReadonlyArray<T>\n ) => <A, E>(name: string, self: TestFunction<A, E, R, [T]>, timeout?: number | R.TestOptions) => void\n fails: Rstest.Test<R>\n\n /**\n * Runs an Effectful property test using Schema or Arbitrary inputs.\n *\n * **Details**\n *\n * Returning `false` or completing with any non-interruption failure falsifies the property and triggers shrinking.\n * This includes typed Effect failures, thrown exceptions, interruptions, and defects such as failed assertions.\n *\n * The Rstest timeout interrupts the Effect fiber running generation, property evaluation, and shrinking. Effect\n * finalizers run during that interruption.\n *\n * **Gotchas**\n *\n * A timeout cannot preempt a synchronous JavaScript callback that does not return.\n *\n * @since 0.1.0\n */\n prop: <const Arbs extends Arbitraries, A, E>(\n name: string,\n arbitraries: Arbs,\n self: TestFunction<\n A,\n E,\n R,\n [\n {\n [K in keyof Arbs]: ArbitraryValue<Arbs[K]>\n },\n R.TestContext\n ]\n >,\n timeout?:\n | number\n | R.TestOptions & {\n fastCheck?: FC.Parameters<any>\n fails?: boolean\n }\n ) => void\n }\n\n /**\n * @since 0.1.0\n */\n export interface MethodsNonLive<R = never> extends API {\n readonly effect: Rstest.Tester<R | Scope.Scope>\n readonly flakyTest: <A, E, R2>(\n self: Effect.Effect<A, E, R2 | Scope.Scope>,\n timeout?: Duration.Input\n ) => Effect.Effect<A, never, R2>\n readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>, options?: {\n readonly concurrent?: boolean\n readonly timeout?: Duration.Input\n }) => {\n (f: (it: Rstest.MethodsNonLive<R | R2>) => void): void\n (\n name: string,\n f: (it: Rstest.MethodsNonLive<R | R2>) => void\n ): void\n }\n\n /**\n * Runs a synchronous property test using Schema or Arbitrary inputs.\n *\n * **Details**\n *\n * Returning `false` or throwing falsifies the property and triggers shrinking. A callback that returns normally\n * without returning `false` passes for that generated input.\n *\n * The Rstest timeout interrupts the Effect fiber running generation and shrinking.\n *\n * **Gotchas**\n *\n * A timeout cannot preempt a synchronous JavaScript callback that does not return.\n *\n * @since 0.1.0\n */\n readonly prop: <const Arbs extends Arbitraries>(\n name: string,\n arbitraries: Arbs,\n self: (\n properties: {\n [K in keyof Arbs]: ArbitraryValue<Arbs[K]>\n },\n ctx: R.TestContext\n ) => boolean | void,\n timeout?:\n | number\n | R.TestOptions & {\n fastCheck?: FC.Parameters<any>\n fails?: boolean\n }\n ) => void\n }\n\n /**\n * @since 0.1.0\n */\n export interface Methods<R = never> extends MethodsNonLive<R> {\n readonly live: Rstest.Tester<Scope.Scope | R>\n readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>, options?: {\n readonly concurrent?: boolean\n readonly memoMap?: Layer.MemoMap\n readonly timeout?: Duration.Input\n readonly excludeTestServices?: boolean\n }) => {\n (f: (it: Rstest.MethodsNonLive<R | R2>) => void): void\n (\n name: string,\n f: (it: Rstest.MethodsNonLive<R | R2>) => void\n ): void\n }\n }\n}\n\n/**\n * @since 0.1.0\n */\nexport const addEqualityTesters: () => void = internal.addEqualityTesters\n\n/**\n * @since 0.1.0\n */\nexport const effect: Rstest.Tester<Scope.Scope> = internal.effect\n\n/**\n * @since 0.1.0\n */\nexport const live: Rstest.Tester<Scope.Scope> = internal.live\n\n/**\n * Share a `Layer` between multiple tests, optionally wrapping\n * the tests in a `describe` block if a name is provided.\n *\n * Named layers accept `concurrent` to override inherited suite concurrency.\n * Anonymous layers always inherit the enclosing suite's concurrency.\n * Use `ctx.expect` in concurrent tests for test-local snapshots and assertion counts.\n *\n * @since 0.1.0\n *\n * ```ts\n * import { assert, layer } from \"effect-rstest\"\n * import { Effect, Layer, Context } from \"effect\"\n *\n * class Foo extends Context.Service<Foo, \"foo\">()(\"Foo\") {\n * static layer = Layer.succeed(Foo, \"foo\")\n * }\n *\n * class Bar extends Context.Service<Bar, \"bar\">()(\"Bar\") {\n * static layer = Layer.effect(\n * Bar,\n * Effect.map(Foo, () => \"bar\" as const)\n * )\n * }\n *\n * layer(Foo.layer)(\"layer\", (it) => {\n * it.effect(\"adds context\", () =>\n * Effect.gen(function*() {\n * const foo = yield* Foo\n * assert.strictEqual(foo, \"foo\")\n * }))\n *\n * it.layer(Bar.layer)(\"nested\", (it) => {\n * it.effect(\"adds context\", () =>\n * Effect.gen(function*() {\n * const foo = yield* Foo\n * const bar = yield* Bar\n * assert.strictEqual(foo, \"foo\")\n * assert.strictEqual(bar, \"bar\")\n * }))\n * })\n * })\n * ```\n */\nexport const layer: <R, E>(\n layer_: Layer.Layer<R, E>,\n options?: {\n readonly concurrent?: boolean\n readonly memoMap?: Layer.MemoMap\n readonly timeout?: Duration.Input\n readonly excludeTestServices?: boolean\n }\n) => {\n (f: (it: Rstest.MethodsNonLive<R>) => void): void\n (name: string, f: (it: Rstest.MethodsNonLive<R>) => void): void\n} = internal.layer\n\n/**\n * @since 0.1.0\n */\nexport const flakyTest: <A, E, R>(\n self: Effect.Effect<A, E, R | Scope.Scope>,\n timeout?: Duration.Input\n) => Effect.Effect<A, never, R> = internal.flakyTest\n\n/**\n * @since 0.1.0\n */\nexport const prop: Rstest.Methods[\"prop\"] = internal.prop\n\n/**\n * @since 0.1.0\n */\nexport const it: Rstest.Methods = internal.makeMethods(R.it)\n\n/**\n * @since 0.1.0\n */\nexport const makeMethods: (it: R.TestAPIs | R.TestAPIs[\"skip\"]) => Rstest.Methods = internal.makeMethods\n\n/**\n * @since 0.1.0\n */\nexport const describeWrapped: (name: string, f: (it: Rstest.Methods) => void) => void = internal.describeWrapped\n"],"names":["runPromise","Effect","effect","_ctx","exit","Exit","errors","Cause","i","_","ctx","runTest","TestEnv","Layer","TestConsole","TestClock","addEqualityTesters","R","a","b","Equal","undefined","hookTimeout","timeout","Duration","testOptions","__","options","propertyTestOptions","checkOptions","compileArbitraryInput","input","Schema","FC","makeArbitrary","arbitraries","Array","Object","key","normalizeProperty","property","value","output","Predicate","TypeError","cause","normalizeSyncProperty","runCheck","arbitrary","makeItProxy","it","overrides","Proxy","target","thisArg","argArray","Reflect","receiver","makeTester","mapEffect","run","args","self","pipe","f","name","skip","skipIf","condition","runIf","only","concurrent","sequential","each","cases","fails","prop","testApi","values","makeProp","layer","layer_","excludeTestServices","withTestEnv","memoMap","scope","Scope","contextEffect","closePromise","closeScope","makeIt","context","flakyTest","nestedLayer","describe","makeLayer","Schedule","makeMethods","flow","live","describeWrapped","internal"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/internal/internal.ts","../src/index.ts"],"sourcesContent":["/**\n * @since 0.1.0\n */\n\nimport * as R from \"@rstest/core\"\nimport * as Cause from \"effect/Cause\"\nimport * as Duration from \"effect/Duration\"\nimport * as Effect from \"effect/Effect\"\nimport * as Equal from \"effect/Equal\"\nimport * as Exit from \"effect/Exit\"\nimport * as Fiber from \"effect/Fiber\"\nimport { flow, pipe } from \"effect/Function\"\nimport * as Layer from \"effect/Layer\"\nimport * as Predicate from \"effect/Predicate\"\nimport * as Schedule from \"effect/Schedule\"\nimport * as Schema from \"effect/Schema\"\nimport * as Scope from \"effect/Scope\"\nimport { FastCheck as FC, TestClock, TestConsole } from \"effect/testing\"\nimport type * as Rstest from \"../index.ts\"\n\nconst runPromise: <E, A>(\n _: Effect.Effect<A, E, never>,\n ctx?: R.TestContext | undefined\n) => Promise<A> = Effect.fnUntraced(function*<E, A>(effect: Effect.Effect<A, E>, _ctx?: Rstest.TestContext) {\n const exit = yield* Effect.exit(effect)\n if (Exit.isFailure(exit)) {\n const errors = Cause.prettyErrors(exit.cause)\n for (let i = 0; i < errors.length; i++) {\n yield* Effect.logError(errors[i])\n }\n }\n return yield* exit\n}, (effect, _, ctx) => Effect.runPromise(effect, { signal: ctx?.signal }))\n\n/** @internal */\nconst runTest = (ctx?: Rstest.TestContext) => <E, A>(effect: Effect.Effect<A, E>) => {\n let settlement: Promise<void> | undefined\n // Rstest does not await timed-out callbacks. Await finalizers before the next\n // test or suite teardown, without imposing a second cleanup deadline.\n // Native afterEach hooks run before onTestFinished and are not covered.\n ctx?.onTestFinished(() => settlement, 0)\n const result = runPromise(effect, ctx)\n // Preserve the original result without rethrowing already-handled failures.\n settlement = result.then(() => {}, () => {})\n return result\n}\n\n/** @internal */\nexport type TestContext = TestConsole.TestConsole | TestClock.TestClock\n\nconst TestEnv = Layer.mergeAll(TestConsole.layer, TestClock.layer())\n\n/** @internal */\nexport const addEqualityTesters = () => {\n R.expect.addEqualityTesters([\n (a, b) => Equal.isEqual(a) && Equal.isEqual(b) ? Equal.equals(a, b) : undefined\n ])\n}\n\nconst hookTimeout = (timeout?: Duration.Input) =>\n timeout === undefined ? undefined : Duration.toMillis(Duration.fromInputUnsafe(timeout))\n\ntype PropertyOptions = R.TestOptions & {\n readonly fastCheck?: FC.Parameters<any> | undefined\n readonly fails?: boolean | undefined\n}\n\ntype PropertyTimeout = number | PropertyOptions\n\n/** @internal */\nconst testOptions = (timeout?: number | R.TestOptions | PropertyOptions): R.TestOptions => {\n if (typeof timeout === \"number\") {\n return { timeout }\n }\n if (timeout === undefined) {\n return {}\n }\n const { fails: _, fastCheck: __, ...options } = timeout as PropertyOptions\n return options\n}\n\ntype ArbitraryInput = Schema.Schema<any> | FC.Arbitrary<unknown>\n\ntype Arbitraries = ReadonlyArray<ArbitraryInput> | { [K in string]: ArbitraryInput }\n\nconst propertyTestOptions = (\n timeout: PropertyTimeout | undefined\n): Exclude<PropertyTimeout, number> | undefined => typeof timeout === \"number\" ? undefined : timeout\n\nconst checkOptions = (timeout: PropertyTimeout | undefined): FC.Parameters<any> | undefined =>\n propertyTestOptions(timeout)?.fastCheck\n\nconst compileArbitraryInput = (input: ArbitraryInput): FC.Arbitrary<any> =>\n Schema.isSchema(input) ? Schema.toArbitrary(input)(FC) : input as FC.Arbitrary<any>\n\nconst makeArbitrary = (arbitraries: Arbitraries): FC.Arbitrary<any> =>\n Array.isArray(arbitraries)\n ? FC.tuple(...arbitraries.map(compileArbitraryInput))\n : FC.record(Object.fromEntries(\n Object.entries(arbitraries).map(([key, input]) => [key, compileArbitraryInput(input)])\n ))\n\nconst normalizeProperty = <A, E, R>(\n property: (value: A) => boolean | Effect.Effect<boolean, E, R>,\n value: A\n): Effect.Effect<boolean, E | Cause.Cause<E>, R> =>\n Effect.catchCause(\n Effect.suspend(() => {\n const output = property(value)\n if (Predicate.isPromiseLike(output)) {\n throw new TypeError(\"Effect property tests must return an Effect or boolean\")\n }\n return Effect.isEffect(output) ? output : Effect.succeed(output)\n }),\n (cause): Effect.Effect<never, E | Cause.Cause<E>> =>\n Cause.hasInterrupts(cause) ? Effect.failCause(cause) : Effect.fail(cause)\n )\n\nconst normalizeSyncProperty = <A>(\n property: (value: A, ctx: R.TestContext) => boolean | void,\n value: A,\n ctx: R.TestContext\n): boolean => {\n const output = property(value, ctx)\n if (Predicate.isPromiseLike(output)) {\n throw new TypeError(\"Synchronous property tests must not return a Promise\")\n }\n return output !== false\n}\n\nconst runCheck = <A, E>(\n ctx: R.TestContext,\n arbitrary: FC.Arbitrary<A>,\n property: (value: A) => boolean | Effect.Effect<boolean, E>,\n options: FC.Parameters<any> | undefined\n): Promise<void> =>\n FC.assert(\n FC.asyncProperty(arbitrary, (value) => runTest(ctx)(normalizeProperty(property, value))),\n options\n )\n\ntype TestAPI = R.TestAPIs | R.TestAPIs[\"skip\"]\n\nconst makeItProxy = <Methods extends object>(\n it: TestAPI,\n overrides: Methods\n): Methods & R.TestAPIs =>\n new Proxy(it as Methods & R.TestAPIs, {\n apply(target, thisArg, argArray) {\n return Reflect.apply(target, thisArg, argArray)\n },\n get(target, property, receiver) {\n if (Object.hasOwn(overrides, property)) {\n return Reflect.get(overrides, property)\n }\n // do not bind: binding would strip Rstest's static helpers\n return Reflect.get(target, property, receiver)\n }\n })\n\n/** @internal */\nconst makeTester = <R>(\n mapEffect: <A, E>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, never>,\n it: TestAPI = R.it\n): Rstest.Rstest.Tester<R> => {\n const run = <A, E, TestArgs extends Array<unknown>>(\n ctx: R.TestContext & object,\n args: TestArgs,\n self: Rstest.Rstest.TestFunction<A, E, R, TestArgs>\n ) => pipe(Effect.suspend(() => self(...args)), mapEffect, Effect.asVoid, runTest(ctx))\n\n const f: Rstest.Rstest.Test<R> = (name, self, timeout) =>\n it(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const skip: Rstest.Rstest.Tester<R>[\"only\"] = (name, self, timeout) =>\n it.skip(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const skipIf: Rstest.Rstest.Tester<R>[\"skipIf\"] = (condition) => (name, self, timeout) =>\n it.skipIf(condition)(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const runIf: Rstest.Rstest.Tester<R>[\"runIf\"] = (condition) => (name, self, timeout) =>\n it.runIf(condition)(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const only: Rstest.Rstest.Tester<R>[\"only\"] = (name, self, timeout) =>\n it.only(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const concurrent: Rstest.Rstest.Tester<R>[\"concurrent\"] = (name, self, timeout) =>\n it.concurrent(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const sequential: Rstest.Rstest.Tester<R>[\"sequential\"] = (name, self, timeout) =>\n it.sequential(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const each: Rstest.Rstest.Tester<R>[\"each\"] = (cases) => (name, self, timeout) => {\n it.for(cases)(\n name,\n testOptions(timeout),\n (args, ctx) => run(ctx, [args], self)\n )\n }\n\n const fails: Rstest.Rstest.Tester<R>[\"fails\"] = (name, self, timeout) =>\n it.fails(name, testOptions(timeout), (ctx) => run(ctx, [ctx], self))\n\n const prop: Rstest.Rstest.Tester<R>[\"prop\"] = (name, arbitraries, self, timeout) => {\n const arbitrary = makeArbitrary(arbitraries)\n const testApi = propertyTestOptions(timeout)?.fails ? it.fails : it\n return testApi(\n name,\n testOptions(timeout),\n (ctx) =>\n runCheck(\n ctx,\n arbitrary,\n (values) =>\n Effect.mapEager(\n mapEffect(Effect.suspend(() => self(values as any, ctx))),\n (value) => (value as unknown) !== false\n ),\n checkOptions(timeout)\n )\n )\n }\n\n return Object.assign(f, { skip, skipIf, runIf, only, concurrent, sequential, each, fails, prop })\n}\n\n/** @internal */\nconst makeProp = (it: TestAPI): Rstest.Rstest.Methods[\"prop\"] => (name, arbitraries, self, timeout) => {\n const arbitrary = makeArbitrary(arbitraries)\n const testApi = propertyTestOptions(timeout)?.fails ? it.fails : it\n return testApi(\n name,\n testOptions(timeout),\n (ctx) =>\n runCheck(\n ctx,\n arbitrary,\n (values) => normalizeSyncProperty(self, values as any, ctx),\n checkOptions(timeout)\n )\n )\n}\n\n/** @internal */\nexport const prop: Rstest.Rstest.Methods[\"prop\"] = makeProp(R.it)\n\n/** @internal */\nexport const layer = <R, E>(\n layer_: Layer.Layer<R, E>,\n options?: {\n readonly concurrent?: boolean\n readonly memoMap?: Layer.MemoMap\n readonly timeout?: Duration.Input\n readonly excludeTestServices?: boolean\n },\n testApi: TestAPI = R.it\n): {\n (f: (it: Rstest.Rstest.MethodsNonLive<R>) => void): void\n (\n name: string,\n f: (it: Rstest.Rstest.MethodsNonLive<R>) => void\n ): void\n} =>\n(\n ...args: [\n name: string,\n f: (\n it: Rstest.Rstest.MethodsNonLive<R>\n ) => void\n ] | [\n f: (it: Rstest.Rstest.MethodsNonLive<R>) => void\n ]\n) => {\n const excludeTestServices = options?.excludeTestServices ?? false\n const withTestEnv = excludeTestServices\n ? layer_ as Layer.Layer<R, E>\n : Layer.provideMerge(layer_, TestEnv)\n const memoMap = options?.memoMap ?? Effect.runSync(Layer.makeMemoMap)\n const scope = Effect.runSync(Scope.make())\n const contextEffect = Layer.buildWithMemoMap(withTestEnv, memoMap, scope).pipe(\n Effect.orDie,\n Effect.cached,\n Effect.runSync\n )\n let setupFiber: Fiber.Fiber<unknown, unknown> | undefined\n const buildContext = () => runPromise(Effect.withFiber((fiber) => {\n setupFiber = fiber\n return Effect.asVoid(contextEffect)\n }))\n let closePromise: Promise<void> | undefined\n const closeScope = (): Promise<void> => {\n if (closePromise !== undefined) {\n return closePromise\n }\n // SuiteContext has no AbortSignal, so timed-out setup may still be running.\n // Interrupt and await it before releasing resources it may still be using.\n closePromise = runPromise(\n Effect.andThen(\n setupFiber !== undefined ? Fiber.interrupt(setupFiber) : Effect.void,\n Scope.close(scope, Exit.void)\n )\n ).then(() => {})\n return closePromise\n }\n\n const makeIt = (it: TestAPI): Rstest.Rstest.MethodsNonLive<R> =>\n makeItProxy(it, {\n effect: makeTester<R | Scope.Scope>(\n (effect) =>\n Effect.flatMap(contextEffect, (context) =>\n effect.pipe(\n Effect.scoped,\n Effect.provide(context)\n )),\n it\n ),\n prop: makeProp(it),\n flakyTest,\n layer<R2, E2>(nestedLayer: Layer.Layer<R2, E2, R>, options?: {\n readonly concurrent?: boolean\n readonly timeout?: Duration.Input\n }) {\n return layer(\n Layer.provideMerge(nestedLayer, withTestEnv),\n {\n ...options,\n memoMap: Layer.forkMemoMapUnsafe(memoMap),\n excludeTestServices\n },\n it\n )\n }\n })\n\n if (args.length === 1) {\n const timeout = hookTimeout(options?.timeout)\n return R.describe(\"\", () => {\n R.beforeAll(buildContext, timeout)\n R.afterAll(() => closeScope(), timeout)\n return args[0](makeIt(testApi))\n })\n }\n\n const describe = options?.concurrent === true\n ? R.describe.concurrent\n : options?.concurrent === false\n ? R.describe.sequential\n : R.describe\n return describe(args[0], () => {\n R.beforeAll(\n buildContext,\n hookTimeout(options?.timeout)\n )\n R.afterAll(\n () => closeScope(),\n hookTimeout(options?.timeout)\n )\n return args[1](makeIt(testApi))\n })\n}\n\nconst makeLayer = (it: TestAPI): Rstest.Rstest.Methods[\"layer\"] => (layer_, options) => layer(layer_, options, it)\n\n/** @internal */\nexport const flakyTest = <A, E, R>(\n self: Effect.Effect<A, E, R | Scope.Scope>,\n timeout: Duration.Input = Duration.seconds(30)\n) =>\n pipe(\n self,\n Effect.scoped,\n Effect.sandbox,\n Effect.retry(\n pipe(\n Schedule.recurs(10),\n Schedule.while((_) =>\n Effect.succeed(Duration.isLessThanOrEqualTo(\n Duration.fromInputUnsafe(_.elapsed),\n Duration.fromInputUnsafe(timeout)\n ))\n )\n )\n ),\n Effect.orDie\n )\n\n/** @internal */\nexport const makeMethods = (it: TestAPI): Rstest.Rstest.Methods =>\n makeItProxy(it, {\n effect: makeTester<Scope.Scope>(flow(Effect.scoped, Effect.provide(TestEnv)), it),\n live: makeTester<Scope.Scope>(Effect.scoped, it),\n flakyTest,\n layer: makeLayer(it),\n prop: makeProp(it)\n })\n\n/** @internal */\nexport const {\n /** @internal */\n effect,\n /** @internal */\n live\n} = makeMethods(R.it)\n\n/** @internal */\nexport const describeWrapped = (name: string, f: (it: Rstest.Rstest.Methods) => void): void =>\n R.describe(name, () => f(makeMethods(R.it)))\n","/**\n * @since 0.1.0\n */\nimport * as R from \"@rstest/core\"\nimport type * as Duration from \"effect/Duration\"\nimport type * as Effect from \"effect/Effect\"\nimport type * as Layer from \"effect/Layer\"\nimport type * as Schema from \"effect/Schema\"\nimport type * as Scope from \"effect/Scope\"\nimport type { FastCheck as FC } from \"effect/testing\"\nimport * as internal from \"./internal/internal.ts\"\n\n/**\n * @since 0.1.0\n */\nexport * from \"@rstest/core\"\n\n/**\n * @since 0.1.0\n */\nexport type API = R.TestAPIs\n\n/**\n * @since 0.1.0\n */\nexport namespace Rstest {\n /**\n * @since 0.1.0\n */\n export interface TestFunction<A, E, R, TestArgs extends Array<any>> {\n (...args: TestArgs): Effect.Effect<A, E, R>\n }\n\n /**\n * @since 0.1.0\n */\n export interface Test<R> {\n <A, E>(\n name: string,\n self: TestFunction<A, E, R, [R.TestContext]>,\n timeout?: number | R.TestOptions\n ): void\n }\n\n /**\n * @since 0.1.0\n */\n export type Arbitraries =\n | ReadonlyArray<Schema.Schema<any> | FC.Arbitrary<any>>\n | { [K in string]: Schema.Schema<any> | FC.Arbitrary<any> }\n\n type ArbitraryValue<A> = A extends Schema.Schema<infer T> ? T\n : A extends FC.Arbitrary<infer T> ? T\n : never\n\n /**\n * @since 0.1.0\n */\n export interface Tester<R> extends Rstest.Test<R> {\n skip: Rstest.Test<R>\n skipIf: (condition: boolean) => Rstest.Test<R>\n runIf: (condition: boolean) => Rstest.Test<R>\n only: Rstest.Test<R>\n concurrent: Rstest.Test<R>\n sequential: Rstest.Test<R>\n each: <T>(\n cases: ReadonlyArray<T>\n ) => <A, E>(name: string, self: TestFunction<A, E, R, [T]>, timeout?: number | R.TestOptions) => void\n fails: Rstest.Test<R>\n\n /**\n * Runs an Effectful property test using Schema or Arbitrary inputs.\n *\n * **Details**\n *\n * Returning `false` or completing with any non-interruption failure falsifies the property and triggers shrinking.\n * This includes typed Effect failures, thrown exceptions, interruptions, and defects such as failed assertions.\n *\n * The Rstest timeout interrupts the Effect fiber running generation, property evaluation, and shrinking. Effect\n * finalizers run during that interruption.\n *\n * **Gotchas**\n *\n * A timeout cannot preempt a synchronous JavaScript callback that does not return.\n *\n * @since 0.1.0\n */\n prop: <const Arbs extends Arbitraries, A, E>(\n name: string,\n arbitraries: Arbs,\n self: TestFunction<\n A,\n E,\n R,\n [\n {\n [K in keyof Arbs]: ArbitraryValue<Arbs[K]>\n },\n R.TestContext\n ]\n >,\n timeout?:\n | number\n | R.TestOptions & {\n fastCheck?: FC.Parameters<any>\n fails?: boolean\n }\n ) => void\n }\n\n /**\n * @since 0.1.0\n */\n export interface MethodsNonLive<R = never> extends API {\n readonly effect: Rstest.Tester<R | Scope.Scope>\n readonly flakyTest: <A, E, R2>(\n self: Effect.Effect<A, E, R2 | Scope.Scope>,\n timeout?: Duration.Input\n ) => Effect.Effect<A, never, R2>\n readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>, options?: {\n readonly concurrent?: boolean\n readonly timeout?: Duration.Input\n }) => {\n (f: (it: Rstest.MethodsNonLive<R | R2>) => void): void\n (\n name: string,\n f: (it: Rstest.MethodsNonLive<R | R2>) => void\n ): void\n }\n\n /**\n * Runs a synchronous property test using Schema or Arbitrary inputs.\n *\n * **Details**\n *\n * Returning `false` or throwing falsifies the property and triggers shrinking. A callback that returns normally\n * without returning `false` passes for that generated input.\n *\n * The Rstest timeout interrupts the Effect fiber running generation and shrinking.\n *\n * **Gotchas**\n *\n * A timeout cannot preempt a synchronous JavaScript callback that does not return.\n *\n * @since 0.1.0\n */\n readonly prop: <const Arbs extends Arbitraries>(\n name: string,\n arbitraries: Arbs,\n self: (\n properties: {\n [K in keyof Arbs]: ArbitraryValue<Arbs[K]>\n },\n ctx: R.TestContext\n ) => boolean | void,\n timeout?:\n | number\n | R.TestOptions & {\n fastCheck?: FC.Parameters<any>\n fails?: boolean\n }\n ) => void\n }\n\n /**\n * @since 0.1.0\n */\n export interface Methods<R = never> extends MethodsNonLive<R> {\n readonly live: Rstest.Tester<Scope.Scope | R>\n readonly layer: <R2, E>(layer: Layer.Layer<R2, E, R>, options?: {\n readonly concurrent?: boolean\n readonly memoMap?: Layer.MemoMap\n readonly timeout?: Duration.Input\n readonly excludeTestServices?: boolean\n }) => {\n (f: (it: Rstest.MethodsNonLive<R | R2>) => void): void\n (\n name: string,\n f: (it: Rstest.MethodsNonLive<R | R2>) => void\n ): void\n }\n }\n}\n\n/**\n * @since 0.1.0\n */\nexport const addEqualityTesters: () => void = internal.addEqualityTesters\n\n/**\n * @since 0.1.0\n */\nexport const effect: Rstest.Tester<Scope.Scope> = internal.effect\n\n/**\n * @since 0.1.0\n */\nexport const live: Rstest.Tester<Scope.Scope> = internal.live\n\n/**\n * Share a `Layer` between multiple tests, optionally wrapping\n * the tests in a `describe` block if a name is provided.\n *\n * Named layers accept `concurrent` to override inherited suite concurrency.\n * Anonymous layers always inherit the enclosing suite's concurrency.\n * Use `ctx.expect` in concurrent tests for test-local snapshots and assertion counts.\n *\n * @since 0.1.0\n *\n * ```ts\n * import { assert, layer } from \"effect-rstest\"\n * import { Effect, Layer, Context } from \"effect\"\n *\n * class Foo extends Context.Service<Foo, \"foo\">()(\"Foo\") {\n * static layer = Layer.succeed(Foo, \"foo\")\n * }\n *\n * class Bar extends Context.Service<Bar, \"bar\">()(\"Bar\") {\n * static layer = Layer.effect(\n * Bar,\n * Effect.map(Foo, () => \"bar\" as const)\n * )\n * }\n *\n * layer(Foo.layer)(\"layer\", (it) => {\n * it.effect(\"adds context\", () =>\n * Effect.gen(function*() {\n * const foo = yield* Foo\n * assert.strictEqual(foo, \"foo\")\n * }))\n *\n * it.layer(Bar.layer)(\"nested\", (it) => {\n * it.effect(\"adds context\", () =>\n * Effect.gen(function*() {\n * const foo = yield* Foo\n * const bar = yield* Bar\n * assert.strictEqual(foo, \"foo\")\n * assert.strictEqual(bar, \"bar\")\n * }))\n * })\n * })\n * ```\n */\nexport const layer: <R, E>(\n layer_: Layer.Layer<R, E>,\n options?: {\n readonly concurrent?: boolean\n readonly memoMap?: Layer.MemoMap\n readonly timeout?: Duration.Input\n readonly excludeTestServices?: boolean\n }\n) => {\n (f: (it: Rstest.MethodsNonLive<R>) => void): void\n (name: string, f: (it: Rstest.MethodsNonLive<R>) => void): void\n} = internal.layer\n\n/**\n * @since 0.1.0\n */\nexport const flakyTest: <A, E, R>(\n self: Effect.Effect<A, E, R | Scope.Scope>,\n timeout?: Duration.Input\n) => Effect.Effect<A, never, R> = internal.flakyTest\n\n/**\n * @since 0.1.0\n */\nexport const prop: Rstest.Methods[\"prop\"] = internal.prop\n\n/**\n * @since 0.1.0\n */\nexport const it: Rstest.Methods = internal.makeMethods(R.it)\n\n/**\n * @since 0.1.0\n */\nexport const makeMethods: (it: R.TestAPIs | R.TestAPIs[\"skip\"]) => Rstest.Methods = internal.makeMethods\n\n/**\n * @since 0.1.0\n */\nexport const describeWrapped: (name: string, f: (it: Rstest.Methods) => void) => void = internal.describeWrapped\n"],"names":["runPromise","Effect","effect","_ctx","exit","Exit","errors","Cause","i","_","ctx","runTest","settlement","result","TestEnv","Layer","TestConsole","TestClock","addEqualityTesters","R","a","b","Equal","undefined","hookTimeout","timeout","Duration","testOptions","__","options","propertyTestOptions","checkOptions","compileArbitraryInput","input","Schema","FC","makeArbitrary","arbitraries","Array","Object","key","normalizeProperty","property","value","output","Predicate","TypeError","cause","normalizeSyncProperty","runCheck","arbitrary","makeItProxy","it","overrides","Proxy","target","thisArg","argArray","Reflect","receiver","makeTester","mapEffect","run","args","self","pipe","f","name","skip","skipIf","condition","runIf","only","concurrent","sequential","each","cases","fails","prop","testApi","values","makeProp","layer","layer_","excludeTestServices","withTestEnv","memoMap","scope","Scope","contextEffect","setupFiber","buildContext","fiber","closePromise","closeScope","Fiber","makeIt","context","flakyTest","nestedLayer","describe","makeLayer","Schedule","makeMethods","flow","live","describeWrapped","internal"],"mappings":"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"}
@@ -1 +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"}
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;AAKvC,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;AA6B1C,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;CAkGR,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-rstest",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Effect test helpers for Rstest",
5
5
  "type": "module",
6
6
  "license": "MIT",