Skip to content

Commit e3e09be

Browse files
committed
test: update testcase
1 parent 19ab5bf commit e3e09be

File tree

5 files changed

+135
-10
lines changed

5 files changed

+135
-10
lines changed

tests/samples/c/main.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ int main(int argc, char** argv)
1414
int c = count + argc;
1515
while (a < 10 && add(c, c)) {
1616
a += 1;
17-
if (b > 5)
17+
if (b > 5)
1818
a -= 1;
1919
else if (b < 3) {
2020
a += 2;
@@ -52,7 +52,7 @@ int mul(int a, int b)
5252
return a * add(a, b);
5353
}
5454

55-
int cp(int *x, int *y)
55+
int cp(int* x, int* y)
5656
{
5757
*x = *y;
5858
return 0;
@@ -61,13 +61,13 @@ int cp(int *x, int *y)
6161
int test_switch(int a)
6262
{
6363
switch (a) {
64-
case 1:
65-
return 1;
66-
case 2:
67-
return 2;
68-
default:
69-
a = 0;
70-
}
64+
case 1:
65+
return 1;
66+
case 2:
67+
return 2;
68+
default:
69+
a = 0;
70+
}
7171
return a;
7272
}
7373

tests/test_file.py

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,19 @@ def setUp(self):
1414
)
1515
self.file = self.project.files.get("main.c")
1616

17+
def test_file_create(self):
18+
file = scubatrace.File.create(
19+
str(self.project_path / "main.c"),
20+
self.project,
21+
)
22+
self.assertIsNotNone(file)
23+
1724
def test_file_imports(self):
1825
assert self.file is not None
1926
imports = self.file.imports
2027
self.assertGreater(len(imports), 0)
2128
for imp in imports:
22-
self.assertIsNotNone(imp.name)
29+
self.assertTrue(imp.name in ["stdio.h", "sub.h"])
2330

2431
def test_file_functions(self):
2532
assert self.file is not None
@@ -28,13 +35,38 @@ def test_file_functions(self):
2835
for func in functions:
2936
self.assertIsNotNone(func.name)
3037

38+
def test_file_function_by_line(self):
39+
assert self.file is not None
40+
function = self.file.function_by_line(5)
41+
self.assertIsNotNone(function)
42+
assert function is not None
43+
self.assertEqual(function.name, "add")
44+
3145
def test_file_statements(self):
3246
assert self.file is not None
3347
statements = self.file.statements
3448
self.assertGreater(len(statements), 0)
3549
for stmt in statements:
3650
self.assertIsNotNone(stmt.text)
3751

52+
def test_file_statement_by_line(self):
53+
assert self.file is not None
54+
statements = self.file.statements_by_line(14)
55+
self.assertGreater(len(statements), 0)
56+
statement = statements[0]
57+
self.assertIsNotNone(statement)
58+
self.assertEqual(statement.text, "int c = count + argc;")
59+
60+
self.assertEqual(len(self.file.statements_by_line(-1)), 0)
61+
self.assertGreater(len(self.file.statements_by_line(1)), 0)
62+
63+
def test_file_identifiers(self):
64+
assert self.file is not None
65+
identifiers = self.file.identifiers
66+
self.assertGreater(len(identifiers), 0)
67+
for identifier in identifiers:
68+
self.assertIsNotNone(identifier.name)
69+
3870
def test_file_variables(self):
3971
assert self.file is not None
4072
variables = self.file.variables
@@ -48,3 +80,22 @@ def test_file_cfg(self):
4880
self.assertIsNotNone(cfg)
4981
self.assertGreater(len(cfg.nodes), 0)
5082
self.assertGreater(len(cfg.edges), 0)
83+
84+
def test_file_query(self):
85+
assert self.file is not None
86+
query_str = """
87+
(call_expression
88+
function: (identifier)@func
89+
(#eq? @func "sub")
90+
)@call
91+
"""
92+
query = self.file.query(query_str)
93+
target_lines = [6, 36]
94+
self.assertEqual(len(query), len(target_lines))
95+
for stat in query:
96+
self.assertIn(stat.start_line, target_lines)
97+
98+
one_shot_result = self.file.query_oneshot(query_str)
99+
self.assertIsNotNone(one_shot_result)
100+
assert one_shot_result is not None
101+
self.assertIn(one_shot_result.start_line, target_lines)

tests/test_function.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import unittest
2+
from pathlib import Path
3+
4+
import scubatrace
5+
6+
7+
class TestProject(unittest.TestCase):
8+
def setUp(self):
9+
self.test_dir = Path(__file__).parent
10+
self.samples_dir = self.test_dir / "samples"
11+
self.project_path = self.samples_dir / "c"
12+
self.project = scubatrace.Project.create(
13+
str(self.project_path), language=scubatrace.language.C
14+
)
15+
self.file = self.project.files.get("main.c")
16+
assert self.file is not None
17+
self.function = self.file.function_by_line(11)
18+
19+
def test_function_create(self):
20+
assert self.function is not None
21+
function = scubatrace.Function.create(self.function.node, self.function.parent)
22+
self.assertIsNotNone(function)

tests/test_identifer.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import unittest
2+
from pathlib import Path
3+
4+
import scubatrace
5+
6+
7+
class TestProject(unittest.TestCase):
8+
def setUp(self):
9+
self.test_dir = Path(__file__).parent
10+
self.samples_dir = self.test_dir / "samples"
11+
self.project_path = self.samples_dir / "c"
12+
self.project = scubatrace.Project.create(
13+
str(self.project_path), language=scubatrace.language.C
14+
)
15+
self.file = self.project.files.get("main.c")
16+
assert self.file is not None
17+
self.assertGreater(len(self.file.statements), 0)
18+
self.statement = self.file.statements_by_line(14)[0]
19+
self.assertGreater(len(self.statement.identifiers), 0)
20+
self.identifier = self.statement.identifiers[0]
21+
22+
def test_identifier_create(self):
23+
identifier = scubatrace.Identifier(self.identifier.node, self.statement)
24+
self.assertIsNotNone(identifier)

tests/test_statement.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import unittest
2+
from pathlib import Path
3+
4+
import scubatrace
5+
6+
7+
class TestProject(unittest.TestCase):
8+
def setUp(self):
9+
self.test_dir = Path(__file__).parent
10+
self.samples_dir = self.test_dir / "samples"
11+
self.project_path = self.samples_dir / "c"
12+
self.project = scubatrace.Project.create(
13+
str(self.project_path), language=scubatrace.language.C
14+
)
15+
self.file = self.project.files.get("main.c")
16+
assert self.file is not None
17+
self.function = self.file.function_by_line(11)
18+
assert self.function is not None
19+
statement = self.function.statements_by_line(14)
20+
assert statement is not None and len(statement) == 1
21+
self.statement = statement[0]
22+
23+
def test_statement_create(self):
24+
assert self.statement is not None
25+
statement = scubatrace.SimpleStatement.create(
26+
self.statement.node, self.statement.parent
27+
)
28+
self.assertIsNotNone(statement)

0 commit comments

Comments
 (0)