tests
test is exposed as a standalone dagger function so it can be invokedindividually during TDD; All wires them up for parallel execution under
`dagger call all`.
The fixtures under fixtures/ are hand-authored, self-contained KiCad
projects: symbols and footprints are embedded in the .kicad_sch/.kicad_pcb
files, so nothing resolves against a system symbol or footprint library and
the tests stay hermetic.
Installation
dagger install github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453Entrypoint
Return Type
Tests Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
func (m *MyModule) Example() *dagger.Tests {
return dag.
Tests()
}@function
def example() -> dagger.Tests:
return (
dag.tests()
)@func()
example(): Tests {
return dag
.tests()
}Types
Tests 🔗
all() 🔗
All runs every kicad-module test in parallel.
parallel caps how many tests run concurrently inside this suite. Defaults to
0 (unbounded fan-out) — each dagger check job runs on its own GH Actions
runner, so in-runner parallelism is bounded by the VM’s CPU/memory, not by
the scheduler. Pass any positive integer to opt into a specific cap.
Return Type
Void !Arguments
| Name | Type | Default Value | Description |
|---|---|---|---|
| parallel | Integer ! | 0 | No description provided |
Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
all --parallel integerfunc (m *MyModule) Example(ctx context.Context, parallel int) {
return dag.
Tests().
All(ctx, parallel)
}@function
async def example(parallel: int) -> None:
return await (
dag.tests()
.all(parallel)
)@func()
async example(parallel: number): Promise<void> {
return dag
.tests()
.all(parallel)
}bomDefaultFieldsProduceCsvHeader() 🔗
BomDefaultFieldsProduceCsvHeader asserts the default field list produces the matching CSV header and one row per component.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
bom-default-fields-produce-csv-headerfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Bomdefaultfieldsproducecsvheader(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.bomdefaultfieldsproducecsvheader()
)@func()
async example(): Promise<void> {
return dag
.tests()
.bomDefaultFieldsProduceCsvHeader()
}ciCheckFailsOnViolations() 🔗
CiCheckFailsOnViolations runs Check against the violations fixture with both ERC and DRC enabled and asserts the parallel fan-out aggregated BOTH job failures rather than short-circuiting on the first. ERC fails with a pin_not_connected violation and DRC fails with its “DRC violations” report; requiring both signatures proves both jobs ran and both errors propagated.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
ci-check-fails-on-violationsfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Cicheckfailsonviolations(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.cicheckfailsonviolations()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ciCheckFailsOnViolations()
}ciCheckRunsErcAndDrc() 🔗
CiCheckRunsErcAndDrc asserts the chained pipeline runs both enabled checks against a clean project and returns nil. blinky passes both ERC and DRC on its own, so a nil return proves the fan-out ran the enabled stages and aggregated no error.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
ci-check-runs-erc-and-drcfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Cicheckrunsercanddrc(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.cicheckrunsercanddrc()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ciCheckRunsErcAndDrc()
}ciRunProducesFabricationOutputs() 🔗
CiRunProducesFabricationOutputs runs the full pipeline against the clean blinky project — checks then outputs — and asserts Run returns one directory holding the whole fabrication package: gerbers/ and drill/ subdirectories, plus pos.pos and bom.csv at the root.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
ci-run-produces-fabrication-outputsfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Cirunproducesfabricationoutputs(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.cirunproducesfabricationoutputs()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ciRunProducesFabricationOutputs()
}ciRunShortCircuitsOnFailingCheck() 🔗
CiRunShortCircuitsOnFailingCheck asserts a failing check stops the pipeline before any output work: Run against the violations fixture with ERC enabled and fabrication outputs requested must return the aggregated check error and no directory. The error carries the ERC report, proving the failure came from stage 1 rather than from an export.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
ci-run-short-circuits-on-failing-checkfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Cirunshortcircuitsonfailingcheck(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.cirunshortcircuitsonfailingcheck()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ciRunShortCircuitsOnFailingCheck()
}containerHasKicadCli() 🔗
ContainerHasKicadCli asserts the base image exposes kicad-cli on PATH, so the escape hatch documented on Container() actually works.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
container-has-kicad-clifunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Containerhaskicadcli(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.containerhaskicadcli()
)@func()
async example(): Promise<void> {
return dag
.tests()
.containerHasKicadCli()
}drcCleanProjectPasses() 🔗
DrcCleanProjectPasses asserts a clean board returns nil.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
drc-clean-project-passesfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Drccleanprojectpasses(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.drccleanprojectpasses()
)@func()
async example(): Promise<void> {
return dag
.tests()
.drcCleanProjectPasses()
}drcReportsViolations() 🔗
DrcReportsViolations asserts a board with overlapping footprints fails and that the violation list makes it into the error.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
drc-reports-violationsfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Drcreportsviolations(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.drcreportsviolations()
)@func()
async example(): Promise<void> {
return dag
.tests()
.drcReportsViolations()
}drcSchematicParityDetectsMismatch() 🔗
DrcSchematicParityDetectsMismatch asserts schematicParity surfaces a board whose pad nets disagree with the schematic — a class of defect plain DRC never looks for.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
drc-schematic-parity-detects-mismatchfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Drcschematicparitydetectsmismatch(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.drcschematicparitydetectsmismatch()
)@func()
async example(): Promise<void> {
return dag
.tests()
.drcSchematicParityDetectsMismatch()
}drillProducesExcellonFiles() 🔗
DrillProducesExcellonFiles asserts the default drill export writes an Excellon file for the board.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
drill-produces-excellon-filesfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Drillproducesexcellonfiles(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.drillproducesexcellonfiles()
)@func()
async example(): Promise<void> {
return dag
.tests()
.drillProducesExcellonFiles()
}drillRejectsInvalidFormat() 🔗
DrillRejectsInvalidFormat asserts an out-of-range enum is rejected with the legal set spelled out, rather than passed through to kicad-cli.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
drill-rejects-invalid-formatfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Drillrejectsinvalidformat(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.drillrejectsinvalidformat()
)@func()
async example(): Promise<void> {
return dag
.tests()
.drillRejectsInvalidFormat()
}ercCleanProjectPasses() 🔗
ErcCleanProjectPasses asserts a clean schematic returns nil.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
erc-clean-project-passesfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Erccleanprojectpasses(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.erccleanprojectpasses()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ercCleanProjectPasses()
}ercReportsViolations() 🔗
ErcReportsViolations asserts a schematic with a dangling pin fails and that the violation list — not just a count — makes it into the error.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
erc-reports-violationsfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Ercreportsviolations(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.ercreportsviolations()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ercReportsViolations()
}gerbersDefaultExportsAllLayers() 🔗
GerbersDefaultExportsAllLayers asserts an empty layer list plots every layer the board defines rather than silently plotting none.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
gerbers-default-exports-all-layersfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Gerbersdefaultexportsalllayers(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.gerbersdefaultexportsalllayers()
)@func()
async example(): Promise<void> {
return dag
.tests()
.gerbersDefaultExportsAllLayers()
}gerbersProduceOneFilePerLayer() 🔗
GerbersProduceOneFilePerLayer asserts an explicit layer list plots exactly those layers (plus the job file that ties them together).
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
gerbers-produce-one-file-per-layerfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Gerbersproduceonefileperlayer(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.gerbersproduceonefileperlayer()
)@func()
async example(): Promise<void> {
return dag
.tests()
.gerbersProduceOneFilePerLayer()
}ipc2581ProducesXml() 🔗
Ipc2581ProducesXml asserts the IPC-2581 export produces an XML document at the requested revision.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
ipc-2-5-8-1-produces-xmlfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Ipc2581producesxml(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.ipc2581producesxml()
)@func()
async example(): Promise<void> {
return dag
.tests()
.ipc2581ProducesXml()
}jobsetRejectsMissingFile() 🔗
JobsetRejectsMissingFile asserts a jobset path that is not in the tree is reported as such, naming the path.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
jobset-rejects-missing-filefunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Jobsetrejectsmissingfile(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.jobsetrejectsmissingfile()
)@func()
async example(): Promise<void> {
return dag
.tests()
.jobsetRejectsMissingFile()
}jobsetRunProducesDeclaredOutputs() 🔗
JobsetRunProducesDeclaredOutputs asserts a jobset runs and its declared output folder comes back populated.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
jobset-run-produces-declared-outputsfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Jobsetrunproducesdeclaredoutputs(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.jobsetrunproducesdeclaredoutputs()
)@func()
async example(): Promise<void> {
return dag
.tests()
.jobsetRunProducesDeclaredOutputs()
}netlistDefaultsToKicadSexpr() 🔗
NetlistDefaultsToKicadSexpr asserts the default netlist format is KiCad’s own s-expression export, carrying the nets the schematic declares.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
netlist-defaults-to-kicad-sexprfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Netlistdefaultstokicadsexpr(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.netlistdefaultstokicadsexpr()
)@func()
async example(): Promise<void> {
return dag
.tests()
.netlistDefaultsToKicadSexpr()
}netlistRejectsInvalidFormat() 🔗
NetlistRejectsInvalidFormat asserts the netlist format enum is validated the same way, listing every format kicad-cli accepts.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
netlist-rejects-invalid-formatfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Netlistrejectsinvalidformat(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.netlistrejectsinvalidformat()
)@func()
async example(): Promise<void> {
return dag
.tests()
.netlistRejectsInvalidFormat()
}pcbAutoDiscoversSingleBoard() 🔗
PcbAutoDiscoversSingleBoard asserts an empty path finds the project’s only board — the produced drill file is named after it, so a wrong pick would show up in the output name.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-auto-discovers-single-boardfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbautodiscoverssingleboard(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbautodiscoverssingleboard()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbAutoDiscoversSingleBoard()
}pcbPdfIsSingleMultipageFile() 🔗
PcbPdfIsSingleMultipageFile asserts –mode-single produces one real PDF. The assertion goes through Export + os.ReadFile rather than Contents() because Contents mangles non-UTF-8 bytes.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-pdf-is-single-multipage-filefunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbpdfissinglemultipagefile(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbpdfissinglemultipagefile()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbPdfIsSingleMultipageFile()
}pcbPdfPerLayerProducesFilePerLayer() 🔗
PcbPdfPerLayerProducesFilePerLayer asserts –mode-separate lands one PDF per requested layer in the returned directory.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-pdf-per-layer-produces-file-per-layerfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbpdfperlayerproducesfileperlayer(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbpdfperlayerproducesfileperlayer()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbPdfPerLayerProducesFilePerLayer()
}pcbRejectsAmbiguousAutoDiscovery() 🔗
PcbRejectsAmbiguousAutoDiscovery asserts a project with two boards and no board named after the project file errors, naming both candidates.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-rejects-ambiguous-auto-discoveryfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbrejectsambiguousautodiscovery(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbrejectsambiguousautodiscovery()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbRejectsAmbiguousAutoDiscovery()
}pcbRejectsExplicitPathNotFound() 🔗
PcbRejectsExplicitPathNotFound asserts an explicit path that is not in the tree is reported as such, naming the path.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-rejects-explicit-path-not-foundfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbrejectsexplicitpathnotfound(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbrejectsexplicitpathnotfound()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbRejectsExplicitPathNotFound()
}pcbRejectsMissingBoard() 🔗
PcbRejectsMissingBoard asserts a project with no board at all errors, rather than letting kicad-cli fail on an empty argument.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-rejects-missing-boardfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbrejectsmissingboard(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbrejectsmissingboard()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbRejectsMissingBoard()
}pcbSvgProducesSingleSvg() 🔗
PcbSvgProducesSingleSvg asserts –mode-single produces one SVG document.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pcb-svg-produces-single-svgfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Pcbsvgproducessinglesvg(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.pcbsvgproducessinglesvg()
)@func()
async example(): Promise<void> {
return dag
.tests()
.pcbSvgProducesSingleSvg()
}posDefaultsToAsciiBothSides() 🔗
PosDefaultsToAsciiBothSides asserts the default position file is the ascii format covering both sides, and lists the board’s footprints.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
pos-defaults-to-ascii-both-sidesfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Posdefaultstoasciibothsides(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.posdefaultstoasciibothsides()
)@func()
async example(): Promise<void> {
return dag
.tests()
.posDefaultsToAsciiBothSides()
}rejectsOutputNameWithPathSeparator() 🔗
RejectsOutputNameWithPathSeparator asserts an artifact name that would walk out of the module-owned output directory is rejected up front.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
rejects-output-name-with-path-separatorfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Rejectsoutputnamewithpathseparator(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.rejectsoutputnamewithpathseparator()
)@func()
async example(): Promise<void> {
return dag
.tests()
.rejectsOutputNameWithPathSeparator()
}schAutoDiscoversSingleSchematic() 🔗
SchAutoDiscoversSingleSchematic asserts an empty path finds the project’s schematic; the netlist records the source sheet, so it names what was picked.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
sch-auto-discovers-single-schematicfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Schautodiscoverssingleschematic(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.schautodiscoverssingleschematic()
)@func()
async example(): Promise<void> {
return dag
.tests()
.schAutoDiscoversSingleSchematic()
}schPdfProducesPdf() 🔗
SchPdfProducesPdf asserts the schematic PDF export produces a real PDF.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
sch-pdf-produces-pdffunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Schpdfproducespdf(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.schpdfproducespdf()
)@func()
async example(): Promise<void> {
return dag
.tests()
.schPdfProducesPdf()
}schSvgProducesOneFilePerSheet() 🔗
SchSvgProducesOneFilePerSheet asserts a hierarchical schematic plots one SVG per sheet, which also proves the root sheet — not a sub-sheet — was the one auto-discovered.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
sch-svg-produces-one-file-per-sheetfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Schsvgproducesonefilepersheet(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.schsvgproducesonefilepersheet()
)@func()
async example(): Promise<void> {
return dag
.tests()
.schSvgProducesOneFilePerSheet()
}stepBoardOnlyProducesStepFile() 🔗
StepBoardOnlyProducesStepFile asserts the board-only STEP export produces a real ISO-10303-21 file. Asserted via Export + os.ReadFile, not Contents.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
step-board-only-produces-step-filefunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Stepboardonlyproducesstepfile(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.stepboardonlyproducesstepfile()
)@func()
async example(): Promise<void> {
return dag
.tests()
.stepBoardOnlyProducesStepFile()
}versionReportsKicadRelease() 🔗
VersionReportsKicadRelease asserts Version reports the release the pinned image ships, i.e. a 10.x version for the default 10.0 tag.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
version-reports-kicad-releasefunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Versionreportskicadrelease(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.versionreportskicadrelease()
)@func()
async example(): Promise<void> {
return dag
.tests()
.versionReportsKicadRelease()
}withVarRejectsNameContainingEquals() 🔗
WithVarRejectsNameContainingEquals asserts a name that would corrupt
kicad-cli’s name=value encoding is rejected. WithVar is a builder with no
error return, so the error has to surface on the exec that uses it.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
with-var-rejects-name-containing-equalsfunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Withvarrejectsnamecontainingequals(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.withvarrejectsnamecontainingequals()
)@func()
async example(): Promise<void> {
return dag
.tests()
.withVarRejectsNameContainingEquals()
}withVarSubstitutesTextVariable() 🔗
WithVarSubstitutesTextVariable asserts WithVar overrides the value the
project file declares. The blinky board carries a ${LEDCOLOR} silkscreen
text; the IPC-2581 export records resolved text verbatim, so it shows which
value won.
Return Type
Void ! Example
dagger -m github.com/z5labs/devex/daggerverse/kicad/tests@a17bf411228ae3d544c7c18bcf08dd04c295d453 call \
with-var-substitutes-text-variablefunc (m *MyModule) Example(ctx context.Context) {
return dag.
Tests().
Withvarsubstitutestextvariable(ctx)
}@function
async def example() -> None:
return await (
dag.tests()
.withvarsubstitutestextvariable()
)@func()
async example(): Promise<void> {
return dag
.tests()
.withVarSubstitutesTextVariable()
}