mirror of
https://github.com/Such-Software/adaptive-multi-protocol-browser.git
synced 2026-10-22 00:38:32 +02:00
Add mobile platform capability planning
This commit is contained in:
@@ -14,7 +14,11 @@ class DocsGenTest(unittest.TestCase):
|
||||
changed = generate_docs(root)
|
||||
|
||||
self.assertEqual(
|
||||
{Path("docs/generated/route-rules.md"), Path("docs/generated/transports.md")},
|
||||
{
|
||||
Path("docs/generated/platform-capabilities.md"),
|
||||
Path("docs/generated/route-rules.md"),
|
||||
Path("docs/generated/transports.md"),
|
||||
},
|
||||
set(changed),
|
||||
)
|
||||
self.assertEqual([], generate_docs(root, check=True))
|
||||
|
||||
@@ -62,6 +62,31 @@ class PrepareOpenTest(unittest.TestCase):
|
||||
|
||||
self.assertEqual(".local/ampb/profiles/clearnet", plan.profile_path)
|
||||
|
||||
def test_android_setup_steps_include_foreground_service(self) -> None:
|
||||
status = TransportStatus(
|
||||
transport="i2p",
|
||||
installed=False,
|
||||
running=False,
|
||||
endpoint="http://127.0.0.1:4444",
|
||||
adoptable=False,
|
||||
manage_supported=True,
|
||||
note="I2P HTTP proxy",
|
||||
)
|
||||
|
||||
with patch("ampbrowser.plan.inspect_transport", return_value=status):
|
||||
plan = prepare_open("http://example.b32.i2p/", platform="android")
|
||||
|
||||
self.assertEqual("android", plan.browse_plan.platform_capability.platform)
|
||||
self.assertEqual(
|
||||
(
|
||||
"install or enable Android i2p provider",
|
||||
"start visible Android foreground service",
|
||||
"start managed Android i2p transport",
|
||||
"wait for http://127.0.0.1:4444",
|
||||
),
|
||||
plan.setup_steps,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -89,6 +89,41 @@ class PlanUrlTest(unittest.TestCase):
|
||||
self.assertEqual("blocked by policy: tor mode is adopt", plan.action)
|
||||
self.assertFalse(plan.requires_consent)
|
||||
|
||||
def test_android_platform_is_reported_on_plan(self) -> None:
|
||||
status = TransportStatus(
|
||||
transport="tor",
|
||||
installed=False,
|
||||
running=False,
|
||||
endpoint="socks5://127.0.0.1:9050",
|
||||
adoptable=False,
|
||||
manage_supported=True,
|
||||
note="Tor SOCKS proxy",
|
||||
)
|
||||
|
||||
with patch("ampbrowser.plan.inspect_transport", return_value=status):
|
||||
plan = plan_url("http://example.onion/", platform="android")
|
||||
|
||||
self.assertEqual("android", plan.platform_capability.platform)
|
||||
self.assertEqual("planned", plan.platform_capability.manage)
|
||||
self.assertTrue(plan.requires_consent)
|
||||
|
||||
def test_ios_foreground_only_transport_prompt(self) -> None:
|
||||
status = TransportStatus(
|
||||
transport="tor",
|
||||
installed=False,
|
||||
running=False,
|
||||
endpoint="socks5://127.0.0.1:9050",
|
||||
adoptable=False,
|
||||
manage_supported=True,
|
||||
note="Tor SOCKS proxy",
|
||||
)
|
||||
|
||||
with patch("ampbrowser.plan.inspect_transport", return_value=status):
|
||||
plan = plan_url("http://example.onion/", platform="ios")
|
||||
|
||||
self.assertEqual("prompt to enable foreground-only transport session", plan.action)
|
||||
self.assertIn("foreground-only", plan.prompt)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from ampbrowser.platforms import capability_for, normalize_platform
|
||||
|
||||
|
||||
class PlatformsTest(unittest.TestCase):
|
||||
def test_android_tor_is_managed_setup_capable(self) -> None:
|
||||
capability = capability_for("tor", "android")
|
||||
|
||||
self.assertEqual("android", capability.platform)
|
||||
self.assertEqual("planned", capability.manage)
|
||||
self.assertTrue(capability.can_manage_setup)
|
||||
|
||||
def test_ios_tor_is_foreground_only(self) -> None:
|
||||
capability = capability_for("tor", "ios")
|
||||
|
||||
self.assertEqual("foreground-only", capability.manage)
|
||||
self.assertTrue(capability.can_manage_setup)
|
||||
self.assertIn("foreground", capability.note)
|
||||
|
||||
def test_unknown_platform_is_rejected(self) -> None:
|
||||
with self.assertRaises(ValueError):
|
||||
normalize_platform("watch")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user