mirror of
https://gitlvb.teallvbs.xyz/IQ.Lvbs/IQ.Pilot.git
synced 2026-09-12 16:53:43 +08:00
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
"""
|
|
Copyright © IQ.Lvbs, apart of Project Teal Lvbs, All Rights Reserved, licensed under https://konn3kt.com/tos
|
|
"""
|
|
import ast
|
|
import copy
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
|
|
from iqpilot.selfdrive.iqmodeld.models import helpers
|
|
|
|
|
|
class Params:
|
|
def __init__(self, values=None):
|
|
self.values = values or {}
|
|
|
|
def get(self, key):
|
|
return self.values.get(key)
|
|
|
|
def put(self, key, value):
|
|
self.values[key] = value
|
|
|
|
def remove(self, key):
|
|
self.values.pop(key, None)
|
|
|
|
def get_bool(self, key):
|
|
return bool(self.get(key))
|
|
|
|
|
|
@pytest.fixture
|
|
def saved():
|
|
bundle = helpers._load_default_bundle_dict()
|
|
bundle.update(ref="custom", internalName="Saved custom", displayName="Saved Custom Model")
|
|
return Params({"ModelManager_ActiveBundle": bundle})
|
|
|
|
|
|
def test_both_ui_names_without_manager(saved):
|
|
before = copy.deepcopy(saved.values)
|
|
for relative, cls, method in [
|
|
("ui/layouts/settings/iq_panels.py", "ModelsLayout", "_update_state"),
|
|
("selfdrive/ui/mici/layouts/settings/models.py", "ModelsLayoutMici", "_active_model_name"),
|
|
]:
|
|
path = Path(__file__).resolve().parents[3] / relative
|
|
tree = ast.parse(path.read_text())
|
|
node = next(n for c in tree.body if isinstance(c, ast.ClassDef) and c.name == cls
|
|
for n in c.body if isinstance(n, ast.FunctionDef) and n.name == method)
|
|
env = {"tr": lambda text: text, "get_selected_model_name": helpers.get_selected_model_name,
|
|
"ui_state": SimpleNamespace(params=saved, sm={"iqModelManager": None}, is_offroad=lambda: True)}
|
|
exec(compile(ast.Module(body=[node], type_ignores=[]), str(path), "exec"), env)
|
|
values = []
|
|
item = SimpleNamespace(set_value=values.append, set_enabled=lambda value: None)
|
|
ui = SimpleNamespace(_update_refresh_state=lambda: None, _handle_bundle_download_progress=lambda: None,
|
|
current_model_item=SimpleNamespace(action_item=item, set_description=lambda value: None),
|
|
redownload_item=SimpleNamespace(action_item=item), _can_redownload=lambda: False,
|
|
_redownload_target_bundle=lambda: None)
|
|
result = env[method](ui)
|
|
assert (result if method == "_active_model_name" else values[0]) == "Saved custom"
|
|
assert saved.values == before
|
|
|
|
|
|
@pytest.mark.parametrize("stored,expected", [(None, "Default (CD210)"), ({"ref": "default"}, "Default (CD210)"),
|
|
({"internalName": "Broken"}, "Model unavailable"), ("bad", "Model unavailable")])
|
|
def test_saved_name_states(stored, expected):
|
|
assert helpers.get_selected_model_name(Params({"ModelManager_ActiveBundle": stored})) == expected
|
|
|
|
|