fix(android): normalize Chaquopy Java list inputs for proxy config
This commit is contained in:
parent
fe55624e24
commit
c5f8b40570
|
|
@ -18,7 +18,24 @@ def _remember_error(message: str) -> None:
|
|||
|
||||
|
||||
def _normalize_dc_ip_list(dc_ip_list: Iterable[object]) -> list[str]:
|
||||
return [str(item).strip() for item in dc_ip_list if str(item).strip()]
|
||||
if dc_ip_list is None:
|
||||
return []
|
||||
|
||||
values: list[object]
|
||||
try:
|
||||
values = list(dc_ip_list)
|
||||
except TypeError:
|
||||
# Chaquopy may expose Kotlin's List<String> as java.util.ArrayList,
|
||||
# which isn't always directly iterable from Python.
|
||||
if hasattr(dc_ip_list, "toArray"):
|
||||
values = list(dc_ip_list.toArray())
|
||||
elif hasattr(dc_ip_list, "size") and hasattr(dc_ip_list, "get"):
|
||||
size = int(dc_ip_list.size())
|
||||
values = [dc_ip_list.get(i) for i in range(size)]
|
||||
else:
|
||||
values = [dc_ip_list]
|
||||
|
||||
return [str(item).strip() for item in values if str(item).strip()]
|
||||
|
||||
|
||||
def start_proxy(app_dir: str, host: str, port: int,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
import sys
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
sys.path.insert(0, str(
|
||||
Path(__file__).resolve().parents[1] / "android" / "app" / "src" / "main" / "python"
|
||||
))
|
||||
|
||||
import android_proxy_bridge # noqa: E402
|
||||
|
||||
|
||||
class FakeJavaArrayList:
|
||||
def __init__(self, items):
|
||||
self._items = list(items)
|
||||
|
||||
def size(self):
|
||||
return len(self._items)
|
||||
|
||||
def get(self, index):
|
||||
return self._items[index]
|
||||
|
||||
|
||||
class AndroidProxyBridgeTests(unittest.TestCase):
|
||||
def test_normalize_dc_ip_list_with_python_iterable(self):
|
||||
result = android_proxy_bridge._normalize_dc_ip_list([
|
||||
"2:149.154.167.220",
|
||||
" ",
|
||||
"4:149.154.167.220 ",
|
||||
])
|
||||
|
||||
self.assertEqual(result, [
|
||||
"2:149.154.167.220",
|
||||
"4:149.154.167.220",
|
||||
])
|
||||
|
||||
def test_normalize_dc_ip_list_with_java_array_list_shape(self):
|
||||
result = android_proxy_bridge._normalize_dc_ip_list(FakeJavaArrayList([
|
||||
"2:149.154.167.220",
|
||||
"4:149.154.167.220",
|
||||
]))
|
||||
|
||||
self.assertEqual(result, [
|
||||
"2:149.154.167.220",
|
||||
"4:149.154.167.220",
|
||||
])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Loading…
Reference in New Issue