Starting main tests

This commit is contained in:
Ad5001 2024-09-19 00:50:47 +02:00
parent 7dd64c8e31
commit b55b2a11fe
Signed by: Ad5001
GPG key ID: EF45F9C6AFE20160
3 changed files with 77 additions and 42 deletions

View file

@ -16,18 +16,18 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
from os import getcwd, chdir, environ, path
from platform import release as os_release
from sys import path as sys_path
from sys import platform, argv, exit
from tempfile import TemporaryDirectory
from time import time from time import time
from PySide6.QtWidgets import QApplication from PySide6.QtCore import QTranslator, QLocale
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import Qt, QTranslator, QLocale
from PySide6.QtGui import QIcon from PySide6.QtGui import QIcon
from PySide6.QtQml import QQmlApplicationEngine
from tempfile import TemporaryDirectory from PySide6.QtQuickControls2 import QQuickStyle
from os import getcwd, chdir, environ, path, remove, close from PySide6.QtWidgets import QApplication
from platform import release as os_release
from sys import platform, argv, version as sys_version, exit
from sys import path as sys_path
start_time = time() start_time = time()
@ -48,10 +48,7 @@ from LogarithmPlotter.util.helper import Helper
from LogarithmPlotter.util.latex import Latex from LogarithmPlotter.util.latex import Latex
from LogarithmPlotter.util.js import PyJSValue from LogarithmPlotter.util.js import PyJSValue
config.init() def get_linux_theme() -> str:
def get_linux_theme():
des = { des = {
"KDE": "Fusion", "KDE": "Fusion",
"gnome": "Basic", "gnome": "Basic",
@ -59,59 +56,59 @@ def get_linux_theme():
"mate": "Fusion", "mate": "Fusion",
} }
if "XDG_SESSION_DESKTOP" in environ: if "XDG_SESSION_DESKTOP" in environ:
return des[environ["XDG_SESSION_DESKTOP"]] if environ["XDG_SESSION_DESKTOP"] in des else "Fusion" if environ["XDG_SESSION_DESKTOP"] in des:
return des[environ["XDG_SESSION_DESKTOP"]]
return "Fusion"
else: else:
# Android # Android
return "Material" return "Material"
def run(): def get_platform_qt_style(os) -> str:
if not 'QT_QUICK_CONTROLS_STYLE' in environ: return {
environ["QT_QUICK_CONTROLS_STYLE"] = {
"linux": get_linux_theme(), "linux": get_linux_theme(),
"freebsd": get_linux_theme(), "freebsd": get_linux_theme(),
"win32": "Universal" if os_release == "10" else "Fusion", "win32": "Universal" if os_release() in ["10", "11", "12", "13", "14"] else "Windows",
"cygwin": "Fusion", "cygwin": "Fusion",
"darwin": "macOS" "darwin": "macOS"
}[platform] }[os]
dep_time = time()
print("Loaded dependencies in " + str((dep_time - start_time) * 1000) + "ms.")
icon_fallbacks = QIcon.fallbackSearchPaths(); def register_icon_directories() -> None:
icon_fallbacks = QIcon.fallbackSearchPaths()
base_icon_path = path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons") base_icon_path = path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "icons")
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "common"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "common")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "objects"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "objects")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "history"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "history")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings")))
icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings", "custom"))) icon_fallbacks.append(path.realpath(path.join(base_icon_path, "settings", "custom")))
QIcon.setFallbackSearchPaths(icon_fallbacks); QIcon.setFallbackSearchPaths(icon_fallbacks)
def create_qapp() -> QApplication:
app = QApplication(argv) app = QApplication(argv)
app.setApplicationName("LogarithmPlotter") app.setApplicationName("LogarithmPlotter")
app.setDesktopFileName("eu.ad5001.LogarithmPlotter.desktop") app.setDesktopFileName("eu.ad5001.LogarithmPlotter.desktop")
app.setOrganizationName("Ad5001") app.setOrganizationName("Ad5001")
app.styleHints().setShowShortcutsInContextMenus(True) app.styleHints().setShowShortcutsInContextMenus(True)
app.setWindowIcon(QIcon(path.realpath(path.join(getcwd(), "logarithmplotter.svg")))) app.setWindowIcon(QIcon(path.realpath(path.join(getcwd(), "logarithmplotter.svg"))))
return app
def install_translation(app: QApplication) -> QTranslator:
# Installing translators # Installing translators
translator = QTranslator() translator = QTranslator()
# Check if lang is forced. # Check if lang is forced.
forcedlang = [p for p in argv if p[:7] == "--lang="] forcedlang = [p for p in argv if p[:7] == "--lang="]
locale = QLocale(forcedlang[0][7:]) if len(forcedlang) > 0 else QLocale() locale = QLocale(forcedlang[0][7:]) if len(forcedlang) > 0 else QLocale()
if translator.load(locale, "lp", "_", path.realpath(path.join(getcwd(), "i18n"))): if translator.load(locale, "lp", "_", path.realpath(path.join(getcwd(), "i18n"))):
app.installTranslator(translator); app.installTranslator(translator)
return translator
# Installing macOS file handler.
macos_file_open_handler = None
if platform == "darwin":
macos_file_open_handler = native.MacOSFileOpenHandler()
app.installEventFilter(macos_file_open_handler)
engine = QQmlApplicationEngine() def create_engine(helper: Helper, latex: Latex, dep_time: float) -> tuple[QQmlApplicationEngine, PyJSValue]:
global tmpfile global tmpfile
helper = Helper(pwd, tmpfile) engine = QQmlApplicationEngine()
latex = Latex(tempdir)
js_globals = PyJSValue(engine.globalObject()) js_globals = PyJSValue(engine.globalObject())
js_globals.Modules = engine.newObject() js_globals.Modules = engine.newObject()
js_globals.Helper = engine.newQObject(helper) js_globals.Helper = engine.newQObject(helper)
@ -119,15 +116,37 @@ def run():
engine.rootContext().setContextProperty("TestBuild", "--test-build" in argv) engine.rootContext().setContextProperty("TestBuild", "--test-build" in argv)
engine.rootContext().setContextProperty("StartTime", dep_time) engine.rootContext().setContextProperty("StartTime", dep_time)
app.translate("About", "About LogarithmPlotter")
# FOR SOME REASON, if this isn't included, Qt refuses to load the QML file.
engine.addImportPath(path.realpath(path.join(getcwd(), "qml"))) engine.addImportPath(path.realpath(path.join(getcwd(), "qml")))
engine.load(path.realpath(path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml"))) engine.load(path.realpath(path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml")))
if not engine.rootObjects(): return engine, js_globals
def run():
config.init()
if not 'QT_QUICK_CONTROLS_STYLE' in environ:
QQuickStyle.setStyle(get_platform_qt_style(platform))
dep_time = time()
print("Loaded dependencies in " + str((dep_time - start_time) * 1000) + "ms.")
register_icon_directories()
app = create_qapp()
translator = install_translation(app)
# Installing macOS file handler.
macos_file_open_handler = None
if platform == "darwin":
macos_file_open_handler = native.MacOSFileOpenHandler()
app.installEventFilter(macos_file_open_handler)
helper = Helper(pwd, tmpfile)
latex = Latex(tempdir)
engine, js_globals = create_engine(helper, latex, dep_time)
if len(engine.rootObjects()) == 0: # No root objects loaded
print("No root object", path.realpath(path.join(getcwd(), "qml"))) print("No root object", path.realpath(path.join(getcwd(), "qml")))
print(path.realpath(path.join(getcwd(), "qml", "eu", "ad5001", "LogarithmPlotter", "LogarithmPlotter.qml")))
exit(-1) exit(-1)
# Open the current diagram # Open the current diagram

View file

@ -34,7 +34,7 @@ class IOAPI extends Module {
/** /**
* Initializes module with QML elements. * Initializes module with QML elements.
* @param {LogarithmPlotter} rootElement * @param {{width: number, height: number, updateObjectsLists: function()}} rootElement
* @param {Settings} settings * @param {Settings} settings
* @param {{show: function(string)}} alert * @param {{show: function(string)}} alert
*/ */

16
tests/python/test_main.py Normal file
View file

@ -0,0 +1,16 @@
import pytest
from LogarithmPlotter.logarithmplotter import get_linux_theme
THEMES = [
"Basic",
"Universal",
"Material",
"Fusion",
"Windows",
"macOS"
]
class TestMain:
def test_themes(self):
get_linux_theme()