Skip to content
File

Blob: src/pyodide/internal/test_introspection.py

python91 lines
1import sys
2import unittest
3from contextlib import ExitStack
4from pathlib import Path
5from unittest.mock import MagicMock, patch
6 
7DIR = Path(__file__).parent
8 
9sys.path.append(str(DIR))
10sys.path.append(str(DIR / "workers-api/src"))
11 
12 
13class TestIntrospection(unittest.TestCase):
14 @classmethod
15 def setup_gen(cls):
16 with ExitStack() as stack:
17 stack.enter_context(patch.dict("sys.modules", js=MagicMock()))
18 stack.enter_context(
19 patch.dict("sys.modules", _pyodide_entrypoint_helper=MagicMock())
20 )
21 stack.enter_context(
22 patch.dict("sys.modules", _cloudflare_compat_flags=MagicMock())
23 )
24 stack.enter_context(
25 patch.dict("sys.modules", {"pyodide": MagicMock(__version__=2)})
26 )
27 stack.enter_context(
28 patch.dict("sys.modules", {"pyodide.code": MagicMock()})
29 )
30 stack.enter_context(patch.dict("sys.modules", {"pyodide.ffi": MagicMock()}))
31 stack.enter_context(
32 patch.dict("sys.modules", {"pyodide.http": MagicMock()})
33 )
34 yield
35 
36 @classmethod
37 def setUpClass(cls):
38 cls.gen = cls.setup_gen()
39 next(cls.gen)
40 
41 @classmethod
42 def tearDownClass(cls):
43 next(cls.gen, None)
44 
45 def test_collect_methods(self):
46 from introspection import collect_methods
47 
48 class A:
49 x = 2
50 
51 @staticmethod
52 def f():
53 pass
54 
55 @classmethod
56 def g(cls):
57 pass
58 
59 @property
60 def y(self):
61 return 7
62 
63 async def fetch(request):
64 pass
65 
66 self.assertEqual(collect_methods(A), ["fetch"])
67 
68 class B(A):
69 def some_method(self):
70 pass
71 
72 self.assertEqual(collect_methods(B), ["fetch", "some_method"])
73 
74 from workers import WorkerEntrypoint
75 
76 class C(WorkerEntrypoint, B):
77 def third_method(self):
78 pass
79 
80 self.assertEqual(collect_methods(C), ["fetch", "some_method", "third_method"])
81 
82 class D(B, WorkerEntrypoint):
83 def third_method(self):
84 pass
85 
86 self.assertEqual(collect_methods(C), ["fetch", "some_method", "third_method"])
87 
88 
89if __name__ == "__main__":
90 unittest.main()