imrishabh18/rp2040-motor-controller
This circuit module provides a microcontroller-based NEMA17 stepper motor driver with integrated USB-C Power Delivery, temperature sensing, and safety interlocks.
- Version
- 1.0.16
- License
- unset
- Stars
- 0
tests/thermal-protection.test.tsx
import { expect, test } from "bun:test";
import { readFileSync } from "node:fs";
import { Circuit } from "tscircuit";
import type { CircuitJson } from "circuit-json";
import Board from "../index.circuit";
import { assertThermalProtection } from "./helpers/assertThermalProtection";
async function buildJson(): Promise<CircuitJson> {
if (process.env.CIRCUIT_JSON_PATH) return JSON.parse(readFileSync(process.env.CIRCUIT_JSON_PATH, "utf8"));
const circuit = new Circuit({ platform: { pcbDisabled: true } });
circuit.add(<Board routingDisabled />);
await circuit.renderUntilSettled();
return circuit.getCircuitJson();
}
test("sensor uses the correct pins, rail and pull resistors; enable passes through both interlocks", async () => {
const json = await buildJson();
expect(assertThermalProtection(json).status).toBe("pass");
const disconnect = json.filter(e => !(e.type === "source_trace" && e.name === "TEMP_HARDWARE_INTERLOCK"));
expect(() => assertThermalProtection(disconnect)).toThrow("Disconnected");
const port = (part: string, label: string) => {
const c = json.find(e => e.type === "source_component" && e.name === part)!;
if (c.type !== "source_component") throw Error("component");
const p = json.find(e => e.type === "source_port" && e.source_component_id === c.source_component_id && e.port_hints?.includes(label));
if (p?.type !== "source_port") throw Error("port");
return p.source_port_id;
};
const bypass: CircuitJson = [...json, { type: "source_trace", source_trace_id: "test_bypass",
connected_source_port_ids: [port("Q_PD_ENABLE", "drain"), port("DRIVER", "nSleep")], connected_source_net_ids: [] }];
expect(() => assertThermalProtection(bypass)).toThrow("bypass");
}, 60_000);