Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Unified Diff: pkg/kernel/test/verify_test.dart

Issue 2539743002: Add more checks to kernel verifier. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/kernel/lib/verifier.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/test/verify_test.dart
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index 67a7e9623662f2ad6fac17252225e1425ecacd1b..e9f03b94caa43e7f25bcadd6e3ccc6e92b92ac9f 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -6,14 +6,17 @@ import 'package:kernel/text/ast_to_text.dart';
import 'package:kernel/verifier.dart';
import 'package:test/test.dart';
-/// Checks that the sanity checks correctly find errors in invalid programs.
+/// Checks that the verifier correctly find errors in invalid programs.
///
/// The frontend should never generate invalid programs, so we have to test
/// these by manually constructing invalid ASTs.
///
-/// We only test negative cases here, as we get plenty of positive cases by
-/// compiling the Dart test suite with sanity checks enabled.
+/// We mostly test negative cases here, as we get plenty of positive cases by
+/// compiling the Dart test suite with the verifier enabled.
main() {
+ positiveTest('Test harness has no errors', () {
+ return new NullLiteral();
+ });
negativeTest('VariableGet out of scope', () {
return new VariableGet(makeVariable());
});
@@ -43,6 +46,24 @@ main() {
supertype: objectClass.asRawSupertype,
fields: [field, field]);
});
+ negativeTest('Class redeclared', () {
+ return otherClass; // Test harness also adds otherClass to program.
+ });
+ negativeTest('Class type parameter redeclared', () {
+ var parameter = makeTypeParameter();
+ return new Class(
+ name: 'Test',
+ supertype: objectClass.asRawSupertype,
+ typeParameters: [parameter, parameter]);
+ });
+ negativeTest('Member type parameter redeclared', () {
+ var parameter = makeTypeParameter();
+ return new Procedure(
+ new Name('test'),
+ ProcedureKind.Method,
+ new FunctionNode(new ReturnStatement(new NullLiteral()),
+ typeParameters: [parameter, parameter]));
+ });
negativeTest('Type parameter out of scope', () {
var parameter = makeTypeParameter();
return new ListLiteral([], typeArgument: new TypeParameterType(parameter));
@@ -129,33 +150,43 @@ Class otherClass = new Class(
typeParameters: [makeTypeParameter('OtherT')],
supertype: objectClass.asRawSupertype);
+Program makeProgram(TreeNode makeBody()) {
+ var node = makeBody();
+ if (node is Expression) {
+ node = new ReturnStatement(node);
+ }
+ if (node is Statement) {
+ node = new FunctionNode(node);
+ }
+ if (node is FunctionNode) {
+ node = new Procedure(new Name('test'), ProcedureKind.Method, node);
+ }
+ if (node is Member) {
+ node = new Class(
+ name: 'Test',
+ typeParameters: [classTypeParameter],
+ supertype: objectClass.asRawSupertype)..addMember(node);
+ }
+ if (node is Class) {
+ node =
+ new Library(Uri.parse('test.dart'), classes: <Class>[node, otherClass]);
+ }
+ if (node is Library) {
+ node = new Program(<Library>[node, stubLibrary]);
+ }
+ assert(node is Program);
+ return node;
+}
+
negativeTest(String name, TreeNode makeBody()) {
test(name, () {
- var node = makeBody();
- if (node is Expression) {
- node = new ReturnStatement(node);
- }
- if (node is Statement) {
- node = new FunctionNode(node);
- }
- if (node is FunctionNode) {
- node = new Procedure(new Name('test'), ProcedureKind.Method, node);
- }
- if (node is Member) {
- node = new Class(
- name: 'Test',
- typeParameters: [classTypeParameter],
- supertype: objectClass.asRawSupertype)..addMember(node);
- }
- if (node is Class) {
- node = new Library(Uri.parse('test.dart'),
- classes: <Class>[node, otherClass]);
- }
- if (node is Library) {
- node = new Program(<Library>[node, stubLibrary]);
- }
- assert(node is Program);
- checkHasError(node);
+ checkHasError(makeProgram(makeBody));
+ });
+}
+
+positiveTest(String name, TreeNode makeBody()) {
+ test(name, () {
+ verifyProgram(makeProgram(makeBody));
});
}
« no previous file with comments | « pkg/kernel/lib/verifier.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698