app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Drive your own KiCad from an AI, in the background: open every editor, read the whole board as data (the EDA Bridge Standard board model), stack-up, part heights, netlists, place, route, pour, DRC and exports.
master
John Lauer
0.9.340: routing tests, demo runner + evidence (arav-rog 2026-09-07), vendoring and overlay tools, release notes
25dcdaf
2mo ago
import json, os, sys, tempfile, unittest
from pathlib import Path
from unittest.mock import patch
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from handlers import ipc_api
class IpcApi(unittest.TestCase):
def test_read_flip_and_backup(self):
with tempfile.TemporaryDirectory() as d:
root = Path(d) / "kicad"
for ver, on in (("9.0", True), ("10.0", False)):
(root / ver).mkdir(parents=True)
(root / ver / "kicad_common.json").write_text(json.dumps({"api": {"enable_server": on}, "other": 1}))
with patch.object(ipc_api, "_settings_roots", return_value=[root]):
r = ipc_api.handle_ipc_api({}, {})
self.assertTrue(r["success"]); self.assertFalse(r["enabled"]); self.assertEqual(r["kicadSettingsVersion"], "10.0")
r = ipc_api.handle_ipc_api({}, {"enable": True})
self.assertTrue(r["changed"] and r["needsRestart"] and r["enabled"])
data = json.loads((root / "10.0" / "kicad_common.json").read_text())
self.assertTrue(data["api"]["enable_server"]); self.assertEqual(data["other"], 1)
self.assertTrue(Path(r["backup"]).is_file())
self.assertFalse(ipc_api.handle_ipc_api({}, {"enable": True})["changed"])
self.assertEqual(ipc_api.handle_ipc_api({}, {"enable": "yes"})["errorCode"], "invalid_arg")
def test_missing_settings(self):
with patch.object(ipc_api, "_settings_roots", return_value=[Path("/nonexistent-adom")]):
self.assertEqual(ipc_api.handle_ipc_api({}, {})["errorCode"], "settings_not_found")
if __name__ == "__main__":
unittest.main()