mirror of
https://github.com/Such-Software/adaptive-multi-protocol-browser.git
synced 2026-10-19 23:38:32 +02:00
Initial AMPB scaffold
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from ampbrowser.docsgen import generate_docs
|
||||
|
||||
|
||||
class DocsGenTest(unittest.TestCase):
|
||||
def test_generate_docs_writes_and_then_checks_clean(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as tmp:
|
||||
root = Path(tmp)
|
||||
changed = generate_docs(root)
|
||||
|
||||
self.assertEqual(
|
||||
{Path("docs/generated/route-rules.md"), Path("docs/generated/transports.md")},
|
||||
set(changed),
|
||||
)
|
||||
self.assertEqual([], generate_docs(root, check=True))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
from ampbrowser.plan import plan_url
|
||||
from ampbrowser.transports import TransportStatus
|
||||
|
||||
|
||||
class PlanUrlTest(unittest.TestCase):
|
||||
def test_gemini_uses_builtin_transport(self) -> None:
|
||||
plan = plan_url("gemini://wownero.org/")
|
||||
|
||||
self.assertEqual("gemini", plan.route.transport)
|
||||
self.assertEqual("adopt existing transport", plan.action)
|
||||
self.assertIsNotNone(plan.status)
|
||||
self.assertTrue(plan.status.adoptable)
|
||||
|
||||
def test_clearnet_opens_with_clearnet_profile(self) -> None:
|
||||
plan = plan_url("wownero.org")
|
||||
|
||||
self.assertEqual("https://wownero.org", plan.route.normalized)
|
||||
self.assertEqual("clearnet", plan.route.transport)
|
||||
self.assertEqual("open with clearnet profile", plan.action)
|
||||
self.assertFalse(plan.requires_consent)
|
||||
|
||||
def test_missing_transport_prompts_before_install_or_start(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 = plan_url("http://example.b32.i2p/")
|
||||
|
||||
self.assertEqual("prompt to install and start managed transport", plan.action)
|
||||
self.assertTrue(plan.requires_consent)
|
||||
self.assertIn("install and start", plan.prompt)
|
||||
|
||||
def test_stopped_transport_prompts_before_start(self) -> None:
|
||||
status = TransportStatus(
|
||||
transport="tor",
|
||||
installed=True,
|
||||
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/")
|
||||
|
||||
self.assertEqual("prompt to start managed transport", plan.action)
|
||||
self.assertTrue(plan.requires_consent)
|
||||
self.assertIn("can start", plan.prompt)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -0,0 +1,42 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from ampbrowser.routing import route_url
|
||||
|
||||
|
||||
class RouteUrlTest(unittest.TestCase):
|
||||
def test_defaults_plain_host_to_https_clearnet(self) -> None:
|
||||
route = route_url("wownero.org")
|
||||
|
||||
self.assertEqual("https://wownero.org", route.normalized)
|
||||
self.assertEqual("clearnet", route.transport)
|
||||
self.assertEqual("clearnet", route.profile)
|
||||
|
||||
def test_routes_onion_hosts_to_tor(self) -> None:
|
||||
route = route_url("http://example.onion/")
|
||||
|
||||
self.assertEqual("tor", route.transport)
|
||||
self.assertEqual("tor", route.profile)
|
||||
|
||||
def test_routes_i2p_hosts_to_i2p(self) -> None:
|
||||
route = route_url("http://example.b32.i2p/")
|
||||
|
||||
self.assertEqual("i2p", route.transport)
|
||||
self.assertEqual("i2p", route.profile)
|
||||
|
||||
def test_routes_gemini_scheme(self) -> None:
|
||||
route = route_url("gemini://wownero.org/")
|
||||
|
||||
self.assertEqual("gemini", route.transport)
|
||||
self.assertEqual("gemini", route.profile)
|
||||
|
||||
def test_routes_reticulum_family_scheme(self) -> None:
|
||||
route = route_url("rns://wownero")
|
||||
|
||||
self.assertEqual("reticulum", route.transport)
|
||||
self.assertEqual("reticulum", route.profile)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user