JS: Verify models even if package is not used in database

This commit is contained in:
Asger Feldthaus
2022-03-15 10:51:44 +01:00
parent a19f06ffc0
commit 82750638c6
5 changed files with 53 additions and 31 deletions

View File

@@ -149,6 +149,14 @@ module ModelInput {
private import ModelInput
/**
* An empty class, except in specific tests.
*
* If this is non-empty, all models are parsed even if the package is not
* considered relevant for the current database.
*/
abstract class TestAllModels extends Unit { }
/**
* Append `;dummy` to the value of `s` to work around the fact that `string.split(delim,n)`
* does not preserve empty trailing substrings.
@@ -237,7 +245,11 @@ private predicate isRelevantPackage(string package) {
summaryModel(package, _, _, _, _, _) or
typeModel(package, _, _, _, _)
) and
Specific::isPackageUsed(package)
(
Specific::isPackageUsed(package)
or
exists(TestAllModels t)
)
or
exists(string other |
isRelevantPackage(other) and

View File

@@ -88,16 +88,3 @@ syntaxErrors
| Member[foo]Member[bar] |
| Member[foo]] |
| Member[foo]].Member[bar] |
warning
| CSV type row should have 5 columns but has 2: testlib;TooFewColumns |
| CSV type row should have 5 columns but has 8: testlib;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
| Invalid token 'Member' is missing its arguments, in access path: Method[foo].Member |
| Invalid token name 'Arg' in access path: Method[foo].Arg[0] |
| Invalid token name 'Method' in access path: Method[foo].Arg[0] |
| Invalid token name 'Method' in access path: Method[foo].Argument |
| Invalid token name 'Method' in access path: Method[foo].Argument[0-1] |
| Invalid token name 'Method' in access path: Method[foo].Argument[*] |
| Invalid token name 'Method' in access path: Method[foo].Member |

View File

@@ -73,20 +73,3 @@ class SyntaxErrorTest extends ModelInput::SinkModelCsv {
}
query predicate syntaxErrors(AccessPathSyntax::AccessPath path) { path.hasSyntaxError() }
private class InvalidTypeModel extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"testlib;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
"testlib;TooFewColumns", //
"testlib;X;testlib;Y;Method[foo].Arg[0]", //
"testlib;X;testlib;Y;Method[foo].Argument[0-1]", //
"testlib;X;testlib;Y;Method[foo].Argument[*]", //
"testlib;X;testlib;Y;Method[foo].Argument", //
"testlib;X;testlib;Y;Method[foo].Member", //
]
}
}
query predicate warning = ModelOutput::getAWarning/0;

View File

@@ -0,0 +1,16 @@
| CSV type row should have 5 columns but has 2: test;TooFewColumns |
| CSV type row should have 5 columns but has 8: test;TooManyColumns;;;Member[Foo].Instance;too;many;columns |
| Invalid argument '0-1' in token 'Argument[0-1]' in access path: Method[foo].Argument[0-1] |
| Invalid argument '0..' in token 'Argument[0..]' in access path: Argument[0..].Member[password] |
| Invalid argument '0..' in token 'Argument[0..]' in access path: Argument[0..].Member[username] |
| Invalid argument '0..' in token 'Argument[0..]' in access path: Member[executeSql].Argument[0..].Parameter[1] |
| Invalid argument '0..' in token 'Argument[0..]' in access path: Member[run].Argument[0..].Parameter[1] |
| Invalid argument '*' in token 'Argument[*]' in access path: Method[foo].Argument[*] |
| Invalid token 'Argument' is missing its arguments, in access path: Method[foo].Argument |
| Invalid token 'Member' is missing its arguments, in access path: Method[foo].Member |
| Invalid token name 'Arg' in access path: Method[foo].Arg[0] |
| Invalid token name 'Method' in access path: Method[foo].Arg[0] |
| Invalid token name 'Method' in access path: Method[foo].Argument |
| Invalid token name 'Method' in access path: Method[foo].Argument[0-1] |
| Invalid token name 'Method' in access path: Method[foo].Argument[*] |
| Invalid token name 'Method' in access path: Method[foo].Member |

View File

@@ -0,0 +1,24 @@
import javascript
import semmle.javascript.frameworks.data.internal.AccessPathSyntax as AccessPathSyntax
import semmle.javascript.frameworks.data.internal.ApiGraphModels as ApiGraphModels
private class InvalidTypeModel extends ModelInput::TypeModelCsv {
override predicate row(string row) {
row =
[
"test;TooManyColumns;;;Member[Foo].Instance;too;many;columns", //
"test;TooFewColumns", //
"test;X;test;Y;Method[foo].Arg[0]", //
"test;X;test;Y;Method[foo].Argument[0-1]", //
"test;X;test;Y;Method[foo].Argument[*]", //
"test;X;test;Y;Method[foo].Argument", //
"test;X;test;Y;Method[foo].Member", //
]
}
}
class IsTesting extends ApiGraphModels::TestAllModels {
IsTesting() { this = this }
}
query predicate warning = ModelOutput::getAWarning/0;