From 0d2afb6f709c899d3e53c6ec14a6e49c09caef55 Mon Sep 17 00:00:00 2001 From: Thomas Farstrike Date: Sun, 2 Nov 2025 13:28:29 +0100 Subject: [PATCH] PackageManager: add unit tests --- .gitignore | 1 + internal_filesystem/lib/README.md | 1 + .../lib/mpos/content/package_manager.py | 8 ++- internal_filesystem/lib/unittest/__init__.mpy | Bin 0 -> 5853 bytes tests/package_manager.py | 37 ++++++++++ tests/simple.py | 6 ++ tests/tests/check_syntax.sh | 20 ++++++ tests/unittest.sh | 63 ++++++++++++++++++ 8 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 internal_filesystem/lib/unittest/__init__.mpy create mode 100644 tests/package_manager.py create mode 100644 tests/simple.py create mode 100755 tests/tests/check_syntax.sh create mode 100755 tests/unittest.sh diff --git a/.gitignore b/.gitignore index 45013b9e..cab0b726 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ conf.json* # auto created when running on desktop: internal_filesystem/SDLPointer_2 +internal_filesystem/SDLPointer_3 # config files etc: internal_filesystem/data diff --git a/internal_filesystem/lib/README.md b/internal_filesystem/lib/README.md index 1c149121..fe3eabff 100644 --- a/internal_filesystem/lib/README.md +++ b/internal_filesystem/lib/README.md @@ -7,4 +7,5 @@ This /lib folder contains: - mip.install("aiohttp") # easy websockets - mip.install("base64") # for nostr etc - mip.install("collections") # used by aiohttp +- mip.install("unittest") diff --git a/internal_filesystem/lib/mpos/content/package_manager.py b/internal_filesystem/lib/mpos/content/package_manager.py index 114b5c19..60aa365e 100644 --- a/internal_filesystem/lib/mpos/content/package_manager.py +++ b/internal_filesystem/lib/mpos/content/package_manager.py @@ -166,8 +166,12 @@ class PackageManager: """Compare two version numbers (e.g., '1.2.3' vs '4.5.6'). Returns True if ver1 is greater than ver2, False otherwise.""" print(f"Comparing versions: {ver1} vs {ver2}") - v1_parts = [int(x) for x in ver1.split('.')] - v2_parts = [int(x) for x in ver2.split('.')] + try: + v1_parts = [int(x) for x in ver1.split('.')] + v2_parts = [int(x) for x in ver2.split('.')] + except ValueError as e: + print(f"Invalid input, got error: {e}") + return False print(f"Version 1 parts: {v1_parts}") print(f"Version 2 parts: {v2_parts}") for i in range(max(len(v1_parts), len(v2_parts))): diff --git a/internal_filesystem/lib/unittest/__init__.mpy b/internal_filesystem/lib/unittest/__init__.mpy new file mode 100644 index 0000000000000000000000000000000000000000..ce71760c6ae6314e0db15e51d9c1631170cda7bf GIT binary patch literal 5853 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 f3pMg?Fkw6(#Jxe-(1h{OCK2NeW{i=LayJ