from dataclasses import replace from io import BytesIO import json import os from pathlib import Path import struct import subprocess import sys import tempfile import time import unittest from unittest.mock import patch from logic_analyzer import dslogic from logic_analyzer.files import ImportCancelled class DSLogicCoreTests(unittest.TestCase): def setUp(self): self.options = dslogic.DSLogicSettings('dsview:2.6', channels=(0, 9), sample_rate=1000000) self.metadata = dict(channels=[0,9], samples=70, sample_rate=1000000, format='cross64-le') def test_cross_words_preserve_physical_channels_boundary_edges_and_tail(self): raw = struct.pack(' .1) self.assertIsNotNone(self.processes[0].poll()) def test_native_failure_does_not_hang(self): with self.launch('import sys; sys.stderr.write("native failure"); sys.exit(7)'): with self.assertRaisesRegex(RuntimeError, '7'): dslogic.acquire(self.options, lambda: False, lambda: False) def test_error_result_is_not_a_capture(self): code = "import sys,json; from pathlib import Path; (Path(sys.argv[1])/'result.json').write_text(json.dumps({'error':'USB disconnected'})); sys.exit(1)" with self.launch(code): with self.assertRaisesRegex(RuntimeError, 'USB disconnected'): dslogic.acquire(self.options, lambda: False, lambda: False)