Skip to content

Commit 8275063

Browse files
committed
JS: Verify models even if package is not used in database
1 parent a19f06f commit 8275063

File tree

5 files changed

+53
-31
lines changed

5 files changed

+53
-31
lines changed

javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModels.qll

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ module ModelInput {
149149

150150
private import ModelInput
151151

152+
/**
153+
* An empty class, except in specific tests.
154+
*
155+
* If this is non-empty, all models are parsed even if the package is not
156+
* considered relevant for the current database.
157+
*/
158+
abstract class TestAllModels extends Unit { }
159+
152160
/**
153161
* Append `;dummy` to the value of `s` to work around the fact that `string.split(delim,n)`
154162
* does not preserve empty trailing substrings.
@@ -237,7 +245,11 @@ private predicate isRelevantPackage(string package) {
237245
summaryModel(package, _, _, _, _, _) or
238246
typeModel(package, _, _, _, _)
239247
) and
240-
Specific::isPackageUsed(package)
248+
(
249+
Specific::isPackageUsed(package)
250+
or
251+
exists(TestAllModels t)
252+
)
241253
or
242254
exists(string other |
243255
isRelevantPackage(other) and

javascript/ql/test/library-tests/frameworks/data/test.expected

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,3 @@ syntaxErrors
8888
| Member[foo]Member[bar] |
8989
| Member[foo]] |
9090
| Member[foo]].Member[bar] |
91-
warning
92-
| CSV type row should have 5 columns but has 2: testlib;TooFewColumns |
93-
| CSV type row should have 5 columns but has 8: testlib;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
94-
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
95-
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
96-
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
97-
| Invalid token 'Member' is missing its arguments, in access path: Method[foo].Member |
98-
| Invalid token name 'Arg' in access path: Method[foo].Arg[0] |
99-
| Invalid token name 'Method' in access path: Method[foo].Arg[0] |
100-
| Invalid token name 'Method' in access path: Method[foo].Argument |
101-
| Invalid token name 'Method' in access path: Method[foo].Argument[0-1] |
102-
| Invalid token name 'Method' in access path: Method[foo].Argument[*] |
103-
| Invalid token name 'Method' in access path: Method[foo].Member |

javascript/ql/test/library-tests/frameworks/data/test.ql

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,3 @@ class SyntaxErrorTest extends ModelInput::SinkModelCsv {
7373
}
7474

7575
query predicate syntaxErrors(AccessPathSyntax::AccessPath path) { path.hasSyntaxError() }
76-
77-
private class InvalidTypeModel extends ModelInput::TypeModelCsv {
78-
override predicate row(string row) {
79-
row =
80-
[
81-
"testlib;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
82-
"testlib;TooFewColumns", //
83-
"testlib;X;testlib;Y;Method[foo].Arg[0]", //
84-
"testlib;X;testlib;Y;Method[foo].Argument[0-1]", //
85-
"testlib;X;testlib;Y;Method[foo].Argument[*]", //
86-
"testlib;X;testlib;Y;Method[foo].Argument", //
87-
"testlib;X;testlib;Y;Method[foo].Member", //
88-
]
89-
}
90-
}
91-
92-
query predicate warning = ModelOutput::getAWarning/0;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
2+
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
3+
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
4+
| Invalid argument '0..' in token 'Argument[0..]' in access path: Argument[0..].Member[password] |
5+
| Invalid argument '0..' in token 'Argument[0..]' in access path: Argument[0..].Member[username] |
6+
| Invalid argument '0..' in token 'Argument[0..]' in access path: Member[executeSql].Argument[0..].Parameter[1] |
7+
| Invalid argument '0..' in token 'Argument[0..]' in access path: Member[run].Argument[0..].Parameter[1] |
8+
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
9+
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
10+
| Invalid token 'Member' is missing its arguments, in access path: Method[foo].Member |
11+
| Invalid token name 'Arg' in access path: Method[foo].Arg[0] |
12+
| Invalid token name 'Method' in access path: Method[foo].Arg[0] |
13+
| Invalid token name 'Method' in access path: Method[foo].Argument |
14+
| Invalid token name 'Method' in access path: Method[foo].Argument[0-1] |
15+
| Invalid token name 'Method' in access path: Method[foo].Argument[*] |
16+
| Invalid token name 'Method' in access path: Method[foo].Member |
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import javascript
2+
import semmle.javascript.frameworks.data.internal.AccessPathSyntax as AccessPathSyntax
3+
import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels
4+
5+
private class InvalidTypeModel extends ModelInput::TypeModelCsv {
6+
override predicate row(string row) {
7+
row =
8+
[
9+
"test;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
10+
"test;TooFewColumns", //
11+
"test;X;test;Y;Method[foo].Arg[0]", //
12+
"test;X;test;Y;Method[foo].Argument[0-1]", //
13+
"test;X;test;Y;Method[foo].Argument[*]", //
14+
"test;X;test;Y;Method[foo].Argument", //
15+
"test;X;test;Y;Method[foo].Member", //
16+
]
17+
}
18+
}
19+
20+
class IsTesting extends ApiGraphModels::TestAllModels {
21+
IsTesting() { this = this }
22+
}
23+
24+
query predicate warning = ModelOutput::getAWarning/0;

0 commit comments

Comments
 (0)