{"version":3,"file":"testing.cjs","names":["StateContainerRegistry"],"sources":["../src/testing.ts"],"sourcesContent":["import type { ReactElement } from 'react';\nimport type { RenderResult } from '@testing-library/react';\nimport type { ExtractArgs, StateContainerConstructor } from '@blac/core';\nimport { StateContainerRegistry, getRegistry, setRegistry } from '@blac/core';\nimport {\n  registerOverride,\n  createCubitStub,\n  type CubitStubOptions,\n} from '@blac/core/testing';\nimport { render } from '@testing-library/react';\n\ninterface RenderWithBlocOptions<\n  T extends StateContainerConstructor,\n> extends CubitStubOptions<T> {\n  bloc: T;\n  /** Args used to resolve which instance the stub is registered under. */\n  args?: ExtractArgs<T>;\n}\n\nexport function renderWithBloc<T extends StateContainerConstructor>(\n  ui: ReactElement,\n  options: RenderWithBlocOptions<T>,\n): RenderResult & { bloc: InstanceType<T> } {\n  const { bloc: BlocClass, args, ...stubOptions } = options;\n\n  const previous = getRegistry();\n  const testRegistry = new StateContainerRegistry();\n  setRegistry(testRegistry);\n\n  // Pass args explicitly so createCubitStub calls [INIT_CONFIG] → init().\n  const instance = createCubitStub(BlocClass, { ...stubOptions, args } as any);\n  registerOverride(BlocClass, instance, args);\n\n  let renderResult: RenderResult;\n  try {\n    renderResult = render(ui);\n  } catch (e) {\n    setRegistry(previous);\n    throw e;\n  }\n\n  const originalUnmount = renderResult.unmount;\n  renderResult.unmount = () => {\n    originalUnmount();\n    setRegistry(previous);\n  };\n\n  return {\n    ...renderResult,\n    bloc: instance,\n  };\n}\n\nexport function renderWithRegistry(\n  ui: ReactElement,\n  setup: (registry: StateContainerRegistry) => void,\n): RenderResult {\n  const previous = getRegistry();\n  const testRegistry = new StateContainerRegistry();\n  setRegistry(testRegistry);\n\n  try {\n    setup(testRegistry);\n  } catch (e) {\n    setRegistry(previous);\n    throw e;\n  }\n\n  let renderResult: RenderResult;\n  try {\n    renderResult = render(ui);\n  } catch (e) {\n    setRegistry(previous);\n    throw e;\n  }\n\n  const originalUnmount = renderResult.unmount;\n  renderResult.unmount = () => {\n    originalUnmount();\n    setRegistry(previous);\n  };\n\n  return renderResult;\n}\n"],"mappings":";;;;;AAmBA,SAAgB,eACd,IACA,SAC0C;CAC1C,MAAM,EAAE,MAAM,WAAW,MAAM,GAAG,gBAAgB;CAElD,MAAM,YAAA,GAAA,WAAA,aAAuB;CAE7B,CAAA,GAAA,WAAA,aAAY,IADaA,WAAAA,uBACF,CAAC;CAGxB,MAAM,YAAA,GAAA,mBAAA,iBAA2B,WAAW;EAAE,GAAG;EAAa;CAAK,CAAQ;CAC3E,CAAA,GAAA,mBAAA,kBAAiB,WAAW,UAAU,IAAI;CAE1C,IAAI;CACJ,IAAI;EACF,gBAAA,GAAA,uBAAA,QAAsB,EAAE;CAC1B,SAAS,GAAG;EACV,CAAA,GAAA,WAAA,aAAY,QAAQ;EACpB,MAAM;CACR;CAEA,MAAM,kBAAkB,aAAa;CACrC,aAAa,gBAAgB;EAC3B,gBAAgB;EAChB,CAAA,GAAA,WAAA,aAAY,QAAQ;CACtB;CAEA,OAAO;EACL,GAAG;EACH,MAAM;CACR;AACF;AAEA,SAAgB,mBACd,IACA,OACc;CACd,MAAM,YAAA,GAAA,WAAA,aAAuB;CAC7B,MAAM,eAAe,IAAIA,WAAAA,uBAAuB;CAChD,CAAA,GAAA,WAAA,aAAY,YAAY;CAExB,IAAI;EACF,MAAM,YAAY;CACpB,SAAS,GAAG;EACV,CAAA,GAAA,WAAA,aAAY,QAAQ;EACpB,MAAM;CACR;CAEA,IAAI;CACJ,IAAI;EACF,gBAAA,GAAA,uBAAA,QAAsB,EAAE;CAC1B,SAAS,GAAG;EACV,CAAA,GAAA,WAAA,aAAY,QAAQ;EACpB,MAAM;CACR;CAEA,MAAM,kBAAkB,aAAa;CACrC,aAAa,gBAAgB;EAC3B,gBAAgB;EAChB,CAAA,GAAA,WAAA,aAAY,QAAQ;CACtB;CAEA,OAAO;AACT"}