Skip to content

Commit 2b36703

Browse files
committed
Ruby: add def= tags to API graph test
1 parent 66b1c86 commit 2b36703

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

ruby/ql/test/library-tests/dataflow/api-graphs/test1.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MyModule #$ use=getMember("MyModule")
22
print MyModule.foo #$ use=getMember("MyModule").getMethod("foo").getReturn()
3-
Kernel.print(e) #$ use=getMember("Kernel").getMethod("print").getReturn()
3+
Kernel.print(e) #$ use=getMember("Kernel").getMethod("print").getReturn() def=getMember("Kernel").getMethod("print").getParameter(0)
44
Object::Kernel #$ use=getMember("Kernel")
55
Object::Kernel.print(e) #$ use=getMember("Kernel").getMethod("print").getReturn()
66
begin
@@ -13,7 +13,7 @@
1313
Foo::Bar::Baz #$ use=getMember("Foo").getMember("Bar").getMember("Baz")
1414

1515
Const = [1, 2, 3] #$ use=getMember("Array").getMethod("[]").getReturn()
16-
Const.each do |c| #$ use=getMember("Const").getMethod("each").getReturn()
16+
Const.each do |c| #$ use=getMember("Const").getMethod("each").getReturn() def=getMember("Const").getMethod("each").getBlock()
1717
puts c #$ use=getMember("Const").getMethod("each").getBlock().getParameter(0)
1818
end
1919

@@ -60,3 +60,5 @@ class C4 < C2 #$ use=getMember("C2")
6060

6161
M1::C1.new.m #$ use=getMember("M1").getMember("C1").getMethod("new").getReturn().getMethod("m").getReturn()
6262
M2::C3.new.m #$ use=getMember("M2").getMember("C3").getMethod("new").getReturn().getMethod("m").getReturn()
63+
64+
Foo.foo(a,b:c) #$ use=getMember("Foo").getMethod("foo").getReturn() def=getMember("Foo").getMethod("foo").getParameter(0) def=getMember("Foo").getMethod("foo").getKeywordParameter("b")

ruby/ql/test/library-tests/dataflow/api-graphs/use.ql

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,26 @@ import codeql.ruby.ApiGraphs
66
class ApiUseTest extends InlineExpectationsTest {
77
ApiUseTest() { this = "ApiUseTest" }
88

9-
override string getARelevantTag() { result = "use" }
9+
override string getARelevantTag() { result = ["use", "def"] }
1010

11-
private predicate relevantNode(API::Node a, DataFlow::Node n, Location l) {
12-
n = a.getAUse() and
13-
l = n.getLocation()
11+
private predicate relevantNode(API::Node a, DataFlow::Node n, Location l, string tag) {
12+
l = n.getLocation() and
13+
(
14+
tag = "use" and
15+
n = a.getAUse()
16+
or
17+
tag = "def" and
18+
n = a.getARhs()
19+
)
1420
}
1521

1622
override predicate hasActualResult(Location location, string element, string tag, string value) {
17-
exists(API::Node a, DataFlow::Node n | relevantNode(a, n, location) |
18-
tag = "use" and
23+
tag = "use" and // def tags are always optional
24+
exists(API::Node a, DataFlow::Node n | relevantNode(a, n, location, tag) |
1925
// Only report the longest path on this line:
2026
value =
2127
max(API::Node a2, Location l2, DataFlow::Node n2 |
22-
relevantNode(a2, n2, l2) and
28+
relevantNode(a2, n2, l2, tag) and
2329
l2.getFile() = location.getFile() and
2430
l2.getStartLine() = location.getStartLine()
2531
|
@@ -34,8 +40,7 @@ class ApiUseTest extends InlineExpectationsTest {
3440
// We also permit optional annotations for any other path on the line.
3541
// This is used to test subclass paths, which typically have a shorter canonical path.
3642
override predicate hasOptionalResult(Location location, string element, string tag, string value) {
37-
exists(API::Node a, DataFlow::Node n | relevantNode(a, n, location) |
38-
tag = "use" and
43+
exists(API::Node a, DataFlow::Node n | relevantNode(a, n, location, tag) |
3944
element = n.toString() and
4045
value = getAPath(a, _)
4146
)

0 commit comments

Comments
 (0)