main
John Lauer Add electronic load equipment prototype, carrier reconstruction and control dashboard d1c6e4f 1d ago
import unittest,time,sys
from pathlib import Path
sys.path.insert(0,str(Path(__file__).resolve().parents[1]))
from driver import Load
class Tests(unittest.TestCase):
 def test_disconnected_refuses_on(self):
  with self.assertRaises(RuntimeError):Load().on()
 def test_invalid_setpoints_never_enable(self):
  l=Load(simulate=True)
  for v in [-1,1.001,float('nan'),float('inf'),True,None,'1']:
   with self.assertRaises(ValueError):l.set_current(v)
  self.assertFalse(l.enabled)
 def test_lease_expiry_disables(self):
  l=Load(simulate=True);l.set_current(1);l.on();l.deadline=time.monotonic()-1;l.sample();self.assertFalse(l.enabled);self.assertIn('expired',l.error)
 def test_simulated_measurements_are_labelled(self):
  l=Load(simulate=True);l.set_current(.5);l.on();r=l.sample();self.assertTrue(r['simulated']);self.assertEqual(r['current_a'],.5);l.off();self.assertEqual(l.sample()['current_a'],0)
 def test_instrument_timeout_clears_measurements(self):
  class Bad:
   def query(self,c):raise TimeoutError('link lost')
   def write(self,c):raise TimeoutError('link lost')
  l=Load(simulate=True);l.sample();l.simulate=False;l.io=Bad();l.sample();self.assertFalse(l.connected);self.assertIsNone(l.state()['measurement']);self.assertIn('UNKNOWN',l.error)
if __name__=='__main__':unittest.main()