Skip to content

Commit 4361c5f

Browse files
Test worked Locally 1
1 parent da61136 commit 4361c5f

10 files changed

Lines changed: 403 additions & 1834 deletions

Utilities/GPIB_Instrument_Scanner_GUI_v4.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
# -------------------------------------------------------------------------------
2727

2828

29-
class GpibScannerGUI:
29+
class GPIB_Instrument_Scanner_GUI:
3030
"""The main GUI application class for scanning VISA instruments."""
3131
PROGRAM_VERSION = "2.0"
3232
# --- Styling constants from PICA Launcher ---
@@ -285,7 +285,7 @@ def run_scan_thread(self):
285285
def main():
286286
"""Initializes the application."""
287287
root = tk.Tk()
288-
GpibScannerGUI(root)
288+
GPIB_Instrument_Scanner_GUI(root)
289289
root.mainloop()
290290

291291

deployment/Picachu.py

Lines changed: 0 additions & 1158 deletions
This file was deleted.

deployment/build-exe.yml

Lines changed: 0 additions & 102 deletions
This file was deleted.

deployment/build.py

Lines changed: 0 additions & 185 deletions
This file was deleted.

tests/conftest.py

Lines changed: 56 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,60 @@
1+
# tests/conftest.py
2+
"""
3+
This file contains shared fixtures for the PICA test suite.
4+
Fixtures defined here are automatically available to all test files.
5+
"""
16
import pytest
2-
import matplotlib
7+
from unittest.mock import MagicMock, patch
8+
import sys
39

4-
# Force matplotlib to not use any X11/Windows GUI backend
5-
# This prevents "KeyError" and display issues during testing
6-
matplotlib.use('Agg')
710

11+
@pytest.fixture
12+
def mock_tkinter():
13+
"""
14+
A comprehensive pytest fixture that mocks essential libraries (tkinter,
15+
matplotlib, pyvisa, etc.) to prevent any actual GUI rendering or hardware
16+
communication during tests. This is crucial for CI/CD environments.
817
9-
@pytest.fixture(autouse=True)
10-
def reset_matplotlib_params():
11-
"""Ensures matplotlib config is clean for every test."""
12-
matplotlib.rcdefaults()
18+
It correctly mocks matplotlib as a package to allow submodule imports
19+
like 'from matplotlib.figure import Figure'.
20+
"""
21+
# Create a mock for matplotlib that acts like a package
22+
mock_matplotlib = MagicMock()
23+
mock_matplotlib.figure.Figure = MagicMock()
24+
mock_matplotlib.backends.backend_tkagg.FigureCanvasTkAgg = MagicMock(
25+
return_value=MagicMock(get_tk_widget=MagicMock())
26+
)
27+
28+
# Create a mock for pymeasure that acts like a package
29+
mock_pymeasure = MagicMock()
30+
mock_pymeasure.instruments.keithley.Keithley2400 = MagicMock()
31+
mock_pymeasure.instruments.keithley.Keithley6517B = MagicMock()
32+
mock_pymeasure.instruments.agilent.AgilentE4980 = MagicMock()
33+
34+
# Mock libraries that would otherwise create windows or require hardware
35+
mocked_modules = {
36+
'tkinter': MagicMock(),
37+
'tkinter.ttk': MagicMock(),
38+
'tkinter.messagebox': MagicMock(),
39+
'tkinter.filedialog': MagicMock(),
40+
'tkinter.simpledialog': MagicMock(),
41+
'tkinter.font': MagicMock(),
42+
'matplotlib': mock_matplotlib,
43+
'matplotlib.pyplot': MagicMock(),
44+
'matplotlib.figure': mock_matplotlib.figure,
45+
'matplotlib.backends': mock_matplotlib.backends,
46+
'matplotlib.backends.backend_tkagg': mock_matplotlib.backends.backend_tkagg,
47+
'pyvisa': MagicMock(), # Mock pyvisa
48+
'pymeasure': mock_pymeasure,
49+
'pymeasure.instruments': mock_pymeasure.instruments,
50+
'pymeasure.instruments.keithley': mock_pymeasure.instruments.keithley,
51+
'PIL': MagicMock(),
52+
'PIL.Image': MagicMock(),
53+
'PIL.ImageTk': MagicMock(),
54+
}
55+
with patch.dict('sys.modules', {
56+
**mocked_modules,
57+
'sys': sys.modules['sys'],
58+
'warnings': sys.modules['warnings'],
59+
}) as patched_modules:
60+
yield

0 commit comments

Comments
 (0)