@@ -0,0 +1,1033 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ """
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Tests for the 7 new language parsers:
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ KotlinParser, CSharpParser, PHPParser, RubyParser, SwiftParser, CParser, CppParser
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ All tree-sitter grammar imports are mocked so no grammars need to be installed.
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ """
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ import tempfile
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from pathlib import Path
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from unittest.mock import MagicMock, patch
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ import pytest
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.graph.schema import NodeLabel
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.parser import LANGUAGE_MAP, RepoIngester
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── Shared helpers ────────────────────────────────────────────────────────────
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class MockNode:
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ _id_counter = 0
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def __init__(
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self,
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ type_: str,
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text: bytes = b"",
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ children: list = None,
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ start_byte: int = 0,
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ end_byte: int = 0,
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ start_point: tuple = (0, 0),
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ end_point: tuple = (0, 0),
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parent=None,
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ):
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MockNode._id_counter += 1
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.id = MockNode._id_counter
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.type = type_
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.children = children or []
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.start_byte = start_byte
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.end_byte = end_byte
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.start_point = start_point
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.end_point = end_point
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self.parent = parent
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._fields: dict = {}
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for child in self.children:
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ child.parent = self
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def child_by_field_name(self, name: str):
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return self._fields.get(name)
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def set_field(self, name: str, node):
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._fields[name] = node
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.parent = self
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return self
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _text_node(text: bytes, type_: str = "identifier") -> MockNode:
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return MockNode(type_, text, start_byte=0, end_byte=len(text))
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_store():
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = MagicMock()
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store.query.return_value = MagicMock(result_set=[])
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return store
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_mock_tree(root_node: MockNode):
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tree = MagicMock()
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tree.root_node = root_node
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return tree
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _mock_ts_modules(lang_module_name: str):
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ """Return a patch.dict context that mocks tree_sitter and the given grammar module."""
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mock_lang_module = MagicMock()
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mock_ts = MagicMock()
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return patch.dict("sys.modules", {lang_module_name: mock_lang_module, "tree_sitter": mock_ts})
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── LANGUAGE_MAP coverage ─────────────────────────────────────────────────────
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestLanguageMapExtensions:
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_kotlin_kt(self):
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".kt"] == "kotlin"
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_kotlin_kts(self):
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".kts"] == "kotlin"
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_csharp_cs(self):
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".cs"] == "csharp"
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_php(self):
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".php"] == "php"
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_ruby_rb(self):
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".rb"] == "ruby"
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_swift(self):
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".swift"] == "swift"
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_c_c(self):
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".c"] == "c"
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_c_h(self):
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".h"] == "c"
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_cpp_cpp(self):
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".cpp"] == "cpp"
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_cpp_hpp(self):
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".hpp"] == "cpp"
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_cpp_cc(self):
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".cc"] == "cpp"
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_cpp_cxx(self):
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert LANGUAGE_MAP[".cxx"] == "cpp"
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── _get_parser dispatch ──────────────────────────────────────────────────────
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestGetParserDispatch:
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_ingester(self):
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester = RepoIngester.__new__(RepoIngester)
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester.store = store
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester.redact = False
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester._detector = None
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester._parsers = {}
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return ingester
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _test_parser_type(self, language: str, grammar_module: str, parser_cls_name: str):
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ingester = self._make_ingester()
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with _mock_ts_modules(grammar_module):
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Also need to force re-import of the parser module
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ import sys
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mod_name = f"navegador.ingestion.{language}"
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if mod_name in sys.modules:
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ del sys.modules[mod_name]
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = ingester._get_parser(language)
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert type(parser).__name__ == parser_cls_name
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_kotlin_parser(self):
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("kotlin", "tree_sitter_kotlin", "KotlinParser")
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_csharp_parser(self):
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("csharp", "tree_sitter_c_sharp", "CSharpParser")
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_php_parser(self):
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("php", "tree_sitter_php", "PHPParser")
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_ruby_parser(self):
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("ruby", "tree_sitter_ruby", "RubyParser")
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_swift_parser(self):
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("swift", "tree_sitter_swift", "SwiftParser")
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_c_parser(self):
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("c", "tree_sitter_c", "CParser")
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_cpp_parser(self):
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._test_parser_type("cpp", "tree_sitter_cpp", "CppParser")
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── _get_*_language ImportError ────────────────────────────────────────────────
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestMissingGrammars:
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _assert_import_error(self, module_path: str, fn_name: str, grammar_pkg: str, grammar_module: str):
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ import importlib
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ import sys
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Remove cached module if present
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if module_path in sys.modules:
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ del sys.modules[module_path]
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with patch.dict("sys.modules", {grammar_module: None, "tree_sitter": None}):
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mod = importlib.import_module(module_path)
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn = getattr(mod, fn_name)
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with pytest.raises(ImportError, match=grammar_pkg):
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn()
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_kotlin_missing(self):
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.kotlin", "_get_kotlin_language",
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-kotlin", "tree_sitter_kotlin",
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_csharp_missing(self):
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.csharp", "_get_csharp_language",
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-c-sharp", "tree_sitter_c_sharp",
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_php_missing(self):
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.php", "_get_php_language",
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-php", "tree_sitter_php",
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_ruby_missing(self):
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.ruby", "_get_ruby_language",
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-ruby", "tree_sitter_ruby",
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_swift_missing(self):
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.swift", "_get_swift_language",
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-swift", "tree_sitter_swift",
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_c_missing(self):
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.c", "_get_c_language",
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-c", "tree_sitter_c",
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_cpp_missing(self):
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ self._assert_import_error(
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "navegador.ingestion.cpp", "_get_cpp_language",
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "tree-sitter-cpp", "tree_sitter_cpp",
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ )
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── KotlinParser ──────────────────────────────────────────────────────────────
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_kotlin_parser():
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.kotlin import KotlinParser
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = KotlinParser.__new__(KotlinParser)
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestKotlinParserFileNode:
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("source_file")
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".kt", delete=False) as f:
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"fun main() {}\n")
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "kotlin"
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestKotlinHandleClass:
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_class_node(self):
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo {}"
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Foo", "simple_identifier")
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("class_body")
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 11))
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.kt", store, stats)
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Class
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration")
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, b"", "Foo.kt", store, stats)
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_walks_member_functions(self):
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo { fun bar() {} }"
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class_name = _text_node(b"Foo", "simple_identifier")
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_name = _text_node(b"bar", "simple_identifier")
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node = MockNode("function_declaration", start_point=(0, 12), end_point=(0, 24))
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node.set_field("name", fn_name)
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("class_body", children=[fn_node])
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 25))
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", class_name)
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.kt", store, stats)
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestKotlinHandleFunction:
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_function_node(self):
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"fun greet() {}"
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"greet", "simple_identifier")
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_declaration", start_point=(0, 0), end_point=(0, 13))
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, source, "Foo.kt", store, stats, class_name=None)
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Function
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_method_node_in_class(self):
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"fun run() {}"
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"run", "simple_identifier")
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_declaration", start_point=(0, 0), end_point=(0, 11))
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, source, "Foo.kt", store, stats, class_name="Foo")
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Method
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_declaration")
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, b"", "Foo.kt", store, stats, class_name=None)
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 0
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestKotlinHandleImport:
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node(self):
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_kotlin_parser()
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"import kotlin.collections.List"
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("import_header", start_byte=0, end_byte=len(source), start_point=(0, 0))
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_import(node, source, "Foo.kt", store, stats)
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "kotlin.collections.List" in props["name"]
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── CSharpParser ───────────────────────────────────────────────────────────────
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_csharp_parser():
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.csharp import CSharpParser
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = CSharpParser.__new__(CSharpParser)
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCSharpParserFileNode:
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_csharp_parser()
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("compilation_unit")
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".cs", delete=False) as f:
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"class Foo {}\n")
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "csharp"
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCSharpHandleClass:
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_class_node(self):
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_csharp_parser()
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo {}"
372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Foo")
373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("declaration_list")
374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 11))
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.cs", store, stats)
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Class
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_csharp_parser()
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration")
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, b"", "Foo.cs", store, stats)
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_inherits_edge(self):
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_csharp_parser()
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Child : Parent {}"
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Child")
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parent_id = _text_node(b"Parent")
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bases = MockNode("base_list", children=[parent_id])
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("declaration_list")
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 22))
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("bases", bases)
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Child.cs", store, stats)
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 2 # CONTAINS + INHERITS
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_walks_methods(self):
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_csharp_parser()
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo { void Save() {} }"
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class_name_node = _text_node(b"Foo")
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method_name_node = _text_node(b"Save")
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method = MockNode("method_declaration", start_point=(0, 12), end_point=(0, 25))
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method.set_field("name", method_name_node)
414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("declaration_list", children=[method])
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 27))
416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", class_name_node)
417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.cs", store, stats)
420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCSharpHandleUsing:
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node(self):
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_csharp_parser()
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"using System.Collections.Generic;"
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("using_directive", start_byte=0, end_byte=len(source), start_point=(0, 0))
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_using(node, source, "Foo.cs", store, stats)
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "System.Collections.Generic" in props["name"]
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── PHPParser ─────────────────────────────────────────────────────────────────
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_php_parser():
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.php import PHPParser
441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = PHPParser.__new__(PHPParser)
442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestPHPParserFileNode:
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("program")
451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".php", delete=False) as f:
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"<?php class Foo {} ?>\n")
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "php"
459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestPHPHandleClass:
464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_class_node(self):
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo {}"
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Foo", "name")
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("declaration_list")
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 11))
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.php", store, stats)
475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration")
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, b"", "Foo.php", store, stats)
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_inherits_edge(self):
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Child extends Parent {}"
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Child", "name")
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parent_name_node = _text_node(b"Parent", "qualified_name")
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ base_clause = MockNode("base_clause", children=[parent_name_node])
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("declaration_list")
493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 28))
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("base_clause", base_clause)
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Child.php", store, stats)
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 2 # CONTAINS + INHERITS
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestPHPHandleFunction:
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_function_node(self):
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"function save() {}"
507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"save", "name")
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition", start_point=(0, 0), end_point=(0, 17))
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, source, "Foo.php", store, stats, class_name=None)
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Function
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition")
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, b"", "Foo.php", store, stats, class_name=None)
521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 0
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestPHPHandleUse:
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node(self):
526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_php_parser()
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"use App\\Http\\Controllers\\Controller;"
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("use_declaration", start_byte=0, end_byte=len(source), start_point=(0, 0))
530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_use(node, source, "Foo.php", store, stats)
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "Controller" in props["name"]
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── RubyParser ────────────────────────────────────────────────────────────────
538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_ruby_parser():
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.ruby import RubyParser
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = RubyParser.__new__(RubyParser)
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestRubyParserFileNode:
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("program")
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".rb", delete=False) as f:
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"class Foo; end\n")
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "ruby"
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestRubyHandleClass:
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_class_node(self):
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo; end"
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Foo", "constant")
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("body_statement")
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class", start_point=(0, 0), end_point=(0, 13))
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "foo.rb", store, stats)
576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class")
582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, b"", "foo.rb", store, stats)
584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_inherits_edge(self):
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Child < Parent; end"
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Child", "constant")
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ superclass_node = _text_node(b"Parent", "constant")
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("body_statement")
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class", start_point=(0, 0), end_point=(0, 24))
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("superclass", superclass_node)
596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "child.rb", store, stats)
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] >= 2 # CONTAINS + INHERITS
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_walks_body_methods(self):
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo; def run; end; end"
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class_name_node = _text_node(b"Foo", "constant")
606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method_name_node = _text_node(b"run")
607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method_node = MockNode("method", start_point=(0, 11), end_point=(0, 22))
608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method_node.set_field("name", method_name_node)
609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("body_statement", children=[method_node])
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class", start_point=(0, 0), end_point=(0, 26))
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", class_name_node)
612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "foo.rb", store, stats)
615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestRubyHandleMethod:
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_function_node(self):
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"def run; end"
623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"run")
624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("method", start_point=(0, 0), end_point=(0, 11))
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_method(node, source, "foo.rb", store, stats, class_name=None)
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Function
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_method_node_in_class(self):
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"def run; end"
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"run")
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("method", start_point=(0, 0), end_point=(0, 11))
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_method(node, source, "foo.rb", store, stats, class_name="Foo")
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Method
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("method")
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_method(node, b"", "foo.rb", store, stats, class_name=None)
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 0
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestRubyHandleModule:
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_module_node(self):
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_ruby_parser()
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"module Concerns; end"
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Concerns", "constant")
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("body_statement")
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("module", start_point=(0, 0), end_point=(0, 19))
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_module(node, source, "concerns.rb", store, stats)
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert props.get("docstring") == "module"
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── SwiftParser ───────────────────────────────────────────────────────────────
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_swift_parser():
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.swift import SwiftParser
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = SwiftParser.__new__(SwiftParser)
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestSwiftParserFileNode:
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_swift_parser()
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("source_file")
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".swift", delete=False) as f:
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"class Foo {}\n")
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "swift"
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestSwiftHandleClass:
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_class_node(self):
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_swift_parser()
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo {}"
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Foo", "type_identifier")
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("class_body")
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 11))
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.swift", store, stats)
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_swift_parser()
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration")
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, b"", "Foo.swift", store, stats)
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_inherits_edge(self):
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_swift_parser()
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Child: Parent {}"
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Child", "type_identifier")
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parent_id = _text_node(b"Parent", "type_identifier")
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inheritance = MockNode("type_inheritance_clause", children=[parent_id])
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("class_body")
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 21))
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("type_inheritance_clause", inheritance)
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Child.swift", store, stats)
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 2 # CONTAINS + INHERITS
732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_walks_body_functions(self):
734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_swift_parser()
735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo { func run() {} }"
737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class_name = _text_node(b"Foo", "type_identifier")
738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_name = _text_node(b"run", "simple_identifier")
739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node = MockNode("function_declaration", start_point=(0, 12), end_point=(0, 24))
740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node.set_field("name", fn_name)
741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("class_body", children=[fn_node])
742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_declaration", start_point=(0, 0), end_point=(0, 26))
743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", class_name)
744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.swift", store, stats)
747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestSwiftHandleImport:
751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node(self):
752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_swift_parser()
753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"import Foundation"
755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("import_declaration", start_byte=0, end_byte=len(source), start_point=(0, 0))
756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_import(node, source, "Foo.swift", store, stats)
758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "Foundation" in props["name"]
761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── CParser ───────────────────────────────────────────────────────────────────
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_c_parser():
767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.c import CParser
768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = CParser.__new__(CParser)
769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCParserFileNode:
774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("translation_unit")
778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".c", delete=False) as f:
780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"void foo() {}\n")
781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "c"
786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCHandleFunction:
791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_function_node(self, fn_name: bytes) -> tuple[MockNode, bytes]:
792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = fn_name + b"(void) {}"
793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_id = _text_node(fn_name)
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl = MockNode("function_declarator")
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl.set_field("declarator", fn_id)
796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("compound_statement")
797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition", start_point=(0, 0), end_point=(0, len(source)))
798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("declarator", fn_decl)
799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return node, source
801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_function_node(self):
803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node, source = self._make_function_node(b"main")
806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, source, "main.c", store, stats)
808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Function
810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition")
815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, b"", "main.c", store, stats)
817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 0
818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCHandleStruct:
821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_struct_node(self):
822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"struct Point { int x; int y; };"
825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Point", "type_identifier")
826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("struct_specifier", start_point=(0, 0), end_point=(0, 30))
827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_struct(node, source, "point.c", store, stats)
830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert props["docstring"] == "struct"
833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("struct_specifier")
838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_struct(node, b"", "point.c", store, stats)
840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCHandleInclude:
844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node_angle_bracket(self):
845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"#include <stdio.h>"
848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ path_node = MockNode("system_lib_string", start_byte=9, end_byte=18)
849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("preproc_include", start_byte=0, end_byte=18, start_point=(0, 0))
850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("path", path_node)
851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_include(node, source, "main.c", store, stats)
853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "stdio.h" in props["name"]
856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node_quoted(self):
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_c_parser()
859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b'#include "utils.h"'
861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ path_node = MockNode("string_literal", start_byte=9, end_byte=18)
862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("preproc_include", start_byte=0, end_byte=18, start_point=(0, 0))
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("path", path_node)
864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_include(node, source, "main.c", store, stats)
866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "utils.h" in props["name"]
869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ── CppParser ─────────────────────────────────────────────────────────────────
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def _make_cpp_parser():
875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.cpp import CppParser
876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = CppParser.__new__(CppParser)
877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p._parser = MagicMock()
878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p
879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCppParserFileNode:
882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_parse_file_creates_file_node(self):
883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ root = MockNode("translation_unit")
886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._parser.parse.return_value = _make_mock_tree(root)
887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ with tempfile.NamedTemporaryFile(suffix=".cpp", delete=False) as f:
888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ f.write(b"class Foo {};\n")
889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath = Path(f.name)
890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ try:
891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser.parse_file(fpath, fpath.parent, store)
892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.File
893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][1]["language"] == "cpp"
894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finally:
895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fpath.unlink()
896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCppHandleClass:
899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_class_node(self):
900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo {};"
903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Foo", "type_identifier")
904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("field_declaration_list")
905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_specifier", start_point=(0, 0), end_point=(0, 12))
906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.cpp", store, stats)
910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 1
911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_specifier")
916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, b"", "Foo.cpp", store, stats)
918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["classes"] == 0
919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_inherits_edge(self):
921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Child : public Parent {};"
924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ name_node = _text_node(b"Child", "type_identifier")
925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parent_id = _text_node(b"Parent", "type_identifier")
926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ base_clause = MockNode("base_class_clause", children=[parent_id])
927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("field_declaration_list")
928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_specifier", start_point=(0, 0), end_point=(0, 30))
929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", name_node)
930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("base_clause", base_clause)
931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Child.cpp", store, stats)
934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 2 # CONTAINS + INHERITS
935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_walks_member_functions(self):
937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"class Foo { void run() {} };"
940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class_name = _text_node(b"Foo", "type_identifier")
941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_id = _text_node(b"run")
942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl = MockNode("function_declarator")
943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl.set_field("declarator", fn_id)
944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_body = MockNode("compound_statement")
945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node = MockNode("function_definition", start_point=(0, 12), end_point=(0, 24))
946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node.set_field("declarator", fn_decl)
947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_node.set_field("body", fn_body)
948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("field_declaration_list", children=[fn_node])
949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("class_specifier", start_point=(0, 0), end_point=(0, 27))
950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("name", class_name)
951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_class(node, source, "Foo.cpp", store, stats)
954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCppHandleFunction:
958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_function_node(self):
959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"void main() {}"
962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_id = _text_node(b"main")
963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl = MockNode("function_declarator")
964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl.set_field("declarator", fn_id)
965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("compound_statement")
966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition", start_point=(0, 0), end_point=(0, 13))
967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("declarator", fn_decl)
968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, source, "main.cpp", store, stats, class_name=None)
971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 1
972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Function
973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_method_node_in_class(self):
975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"void run() {}"
978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_id = _text_node(b"run")
979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl = MockNode("function_declarator")
980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl.set_field("declarator", fn_id)
981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ body = MockNode("compound_statement")
982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition", start_point=(0, 0), end_point=(0, 12))
983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("declarator", fn_decl)
984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("body", body)
985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, source, "Foo.cpp", store, stats, class_name="Foo")
987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert store.create_node.call_args[0][0] == NodeLabel.Method
988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_skips_if_no_name(self):
990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("function_definition")
993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_function(node, b"", "main.cpp", store, stats, class_name=None)
995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["functions"] == 0
996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCppHandleInclude:
999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_creates_import_node(self):
1000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = _make_cpp_parser()
1001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ store = _make_store()
1002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"#include <vector>"
1003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ path_node = MockNode("system_lib_string", start_byte=9, end_byte=17)
1004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = MockNode("preproc_include", start_byte=0, end_byte=17, start_point=(0, 0))
1005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node.set_field("path", path_node)
1006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stats = {"functions": 0, "classes": 0, "edges": 0}
1007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser._handle_include(node, source, "Foo.cpp", store, stats)
1008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert stats["edges"] == 1
1009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ props = store.create_node.call_args[0][1]
1010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert "vector" in props["name"]
1011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ class TestCppExtractFunctionName:
1014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_simple_identifier(self):
1015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.cpp import CppParser
1016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = CppParser.__new__(CppParser)
1017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"foo"
1018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ node = _text_node(b"foo")
1019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert parser._extract_function_name(node, source) == "foo"
1020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_function_declarator(self):
1022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.cpp import CppParser
1023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = CppParser.__new__(CppParser)
1024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ source = b"foo"
1025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_id = _text_node(b"foo")
1026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl = MockNode("function_declarator")
1027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fn_decl.set_field("declarator", fn_id)
1028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert parser._extract_function_name(fn_decl, source) == "foo"
1029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ def test_none_input(self):
1031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ from navegador.ingestion.cpp import CppParser
1032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parser = CppParser.__new__(CppParser)
1033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert parser._extract_function_name(None, b"") is None