Add test for Class and SingletonClass

This commit is contained in:
Nick Rolfe
2021-01-29 15:53:26 +00:00
parent d26822ad23
commit 86bb8a246b
5 changed files with 102 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
classes
| classes.rb:3:1:4:3 | Foo | Class | Foo |
| classes.rb:7:1:8:3 | Bar | Class | Bar |
| classes.rb:11:1:12:3 | Baz | Class | Baz |
| classes.rb:16:1:17:3 | MyClass | Class | MyClass |
| classes.rb:20:1:31:3 | Wibble | Class | Wibble |
classesWithScopeResolutionNames
| classes.rb:16:1:17:3 | MyClass | classes.rb:16:7:16:23 | ...::MyClass |
exprsInClasses
| classes.rb:20:1:31:3 | Wibble | 0 | classes.rb:21:3:23:5 | method_a | Method |
| classes.rb:20:1:31:3 | Wibble | 1 | classes.rb:25:3:27:5 | method_b | Method |
| classes.rb:20:1:31:3 | Wibble | 2 | classes.rb:29:3:29:20 | call to some_method_call | Call |
| classes.rb:20:1:31:3 | Wibble | 3 | classes.rb:30:3:30:19 | ... = ... | AssignExpr |
methodsInClasses
| classes.rb:20:1:31:3 | Wibble | classes.rb:21:3:23:5 | method_a |
| classes.rb:20:1:31:3 | Wibble | classes.rb:25:3:27:5 | method_b |
classesWithASuperclass
| classes.rb:11:1:12:3 | Baz | classes.rb:11:13:11:32 | call to superclass_for |

View File

@@ -0,0 +1,17 @@
import ruby
query predicate classes(Class c, string pClass, string name) {
pClass = c.getAPrimaryQlClass() and name = c.getName()
}
query predicate classesWithScopeResolutionNames(Class c, ScopeResolution name) {
name = c.getNameScopeResolution()
}
query predicate exprsInClasses(Class c, int i, Expr e, string eClass) {
e = c.getExpr(i) and eClass = e.getAPrimaryQlClass()
}
query predicate methodsInClasses(Class c, Method m) { m = c.getAMethod() }
query predicate classesWithASuperclass(Class c, Expr scExpr) { scExpr = c.getSuperclassExpr() }

View File

@@ -0,0 +1,46 @@
# a class with no superclass specified
class Foo
end
# a class where the superclass is a constant
class Bar < BaseClass
end
# a class where the superclass is a call expression
class Baz < superclass_for(:baz)
end
# a class where the name is a scope resolution
module MyModule; end
class MyModule::MyClass
end
# a class with some methods and some other arbitrary expressions
class Wibble
def method_a
puts 'a'
end
def method_b
puts 'b'
end
some_method_call()
$global_var = 123
end
# a singleton class with some methods and some other arbitrary expressions
x = 'hello'
class << x
def length
100 * super
end
def wibble
puts 'wibble'
end
another_method_call
$global_var2 = 456
end

View File

@@ -0,0 +1,10 @@
singletonClasses
| classes.rb:35:1:46:3 | class << ... | Class | classes.rb:35:10:35:10 | call to x |
exprsInSingletonClasses
| classes.rb:35:1:46:3 | class << ... | 0 | classes.rb:36:3:38:5 | length | Method |
| classes.rb:35:1:46:3 | class << ... | 1 | classes.rb:40:3:42:5 | wibble | Method |
| classes.rb:35:1:46:3 | class << ... | 2 | classes.rb:44:3:44:21 | call to another_method_call | Call |
| classes.rb:35:1:46:3 | class << ... | 3 | classes.rb:45:3:45:20 | ... = ... | AssignExpr |
methodsInSingletonClasses
| classes.rb:35:1:46:3 | class << ... | classes.rb:36:3:38:5 | length |
| classes.rb:35:1:46:3 | class << ... | classes.rb:40:3:42:5 | wibble |

View File

@@ -0,0 +1,11 @@
import ruby
query predicate singletonClasses(SingletonClass sc, string pClass, Expr value) {
pClass = sc.getAPrimaryQlClass() and value = sc.getValue()
}
query predicate exprsInSingletonClasses(SingletonClass sc, int i, Expr e, string eClass) {
e = sc.getExpr(i) and eClass = e.getAPrimaryQlClass()
}
query predicate methodsInSingletonClasses(SingletonClass sc, Method m) { m = sc.getAMethod() }