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

Unified Diff: tests/language/malformed_test.dart

Issue 19097003: Support new malformed types semantics. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix unittests. Created 7 years, 5 months 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 | « tests/language/malformed_inheritance_test.dart ('k') | tests/language/new_expression_type_args_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/language/malformed_test.dart
diff --git a/tests/language/malformed_test.dart b/tests/language/malformed_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..eb2834ab36d21351b2f2ff8b432f9d77e57d8b6b
--- /dev/null
+++ b/tests/language/malformed_test.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests that malformed types are handled as dynamic, and that types with the
+// wrong number of type arguments are handled as raw types.
+
+import 'package:expect/expect.dart';
+
+checkIsUnresolved(var v) {
+ Expect.isTrue(v is Unresolved);
+ Expect.isTrue(v is Unresolved<int>);
+ Expect.isTrue(v is prefix.Unresolved);
+ Expect.isTrue(v is prefix.Unresolved<int>);
+}
+
+checkIsListUnresolved(bool expect, var v) {
+ Expect.equals(expect, v is List<Unresolved>);
+ Expect.equals(expect, v is List<Unresolved<int>>);
+ Expect.equals(expect, v is List<prefix.Unresolved>);
+ Expect.equals(expect, v is List<prefix.Unresolved<int>>);
+ Expect.equals(expect, v is List<int, String>);
+}
+
+checkIsListDynamic(bool expect, var v) {
+ checkIsListUnresolved(true, v);
+ Expect.equals(expect, v is List<int> && v is List<String>);
+}
+
+checkAsUnresolved(var v) {
+ Expect.equals(v, v as Unresolved);
+ Expect.equals(v, v as Unresolved<int>);
+ Expect.equals(v, v as prefix.Unresolved);
+ Expect.equals(v, v as prefix.Unresolved<int>);
+}
+
+checkAsListUnresolved(bool expect, var v) {
+ if (expect) {
+ Expect.equals(v, v as List<Unresolved>);
+ Expect.equals(v, v as List<Unresolved<int>>);
+ Expect.equals(v, v as List<prefix.Unresolved>);
+ Expect.equals(v, v as List<prefix.Unresolved<int>>);
+ Expect.equals(v, v as List<int, String>);
+ } else {
+ Expect.throws(() => v as List<Unresolved>, (e) => e is CastError);
+ Expect.throws(() => v as List<Unresolved<int>>, (e) => e is CastError);
+ Expect.throws(() => v as List<prefix.Unresolved>, (e) => e is CastError);
+ Expect.throws(() => v as List<prefix.Unresolved<int>>,
+ (e) => e is CastError);
+ Expect.throws(() => v as List<int, String>, (e) => e is CastError);
+ }
+}
+
+checkIsMapDynamic(bool first, bool second, var v) {
+ Expect.equals(first, v is Map<String, Object> && v is Map<int, Object>);
+ Expect.equals(second, v is Map<Object, int> && v is Map<Object, String>);
+}
+
+
+void main() {
+ checkIsUnresolved('');
+ checkIsUnresolved(0);
+ checkIsListUnresolved(false, '');
+ checkIsListUnresolved(true, new List());
+ checkIsListUnresolved(true, new List<int>());
+ checkIsListUnresolved(true, new List<String>());
+ checkIsListUnresolved(true, new List<int, String>());
+
+ checkAsUnresolved('');
+ checkAsUnresolved(0);
+ checkAsListUnresolved(false, '');
+ checkAsListUnresolved(true, new List());
+ checkAsListUnresolved(true, new List<int>());
+ checkAsListUnresolved(true, new List<String>());
+ checkAsListUnresolved(true, new List<int, String>());
+
+ checkIsListDynamic(true, []);
+ checkIsListDynamic(true, <>[]); /// 01: compile-time error
+// TODO(johnniwinther): Create runtime type information on literal lists.
+// checkIsListDynamic(false, <int>[]);
+ checkIsListDynamic(true, <Unresolved>[]);
+ checkIsListDynamic(true, <Unresolved<int>>[]);
+ checkIsListDynamic(true, <prefix.Unresolved>[]);
+ checkIsListDynamic(true, <prefix.Unresolved<int>>[]);
+ checkIsListDynamic(true, <int, String>[]);
+
+ checkIsListDynamic(true, new List());
+ checkIsListDynamic(true, new List<>()); /// 02: compile-time error
+ checkIsListDynamic(true, new List<Unresolved>());
+ checkIsListDynamic(true, new List<Unresolved<int>>());
+ checkIsListDynamic(true, new List<prefix.Unresolved>());
+ checkIsListDynamic(true, new List<prefix.Unresolved<int>>());
+ checkIsListDynamic(true, new List<int, String>());
+
+ checkIsMapDynamic(true, true, {});
+ checkIsMapDynamic(true, true, <>{}); /// 03: compile-time error
+ checkIsMapDynamic(true, true, <int>{});
+// TODO(johnniwinther): Create runtime type information on literal maps.
+// checkIsMapDynamic(false, false, <String, int>{});
+ checkIsMapDynamic(true, true, <String, int, String>{});
+// checkIsMapDynamic(true, false, <Unresolved, int>{});
+// checkIsMapDynamic(false, true, <String, Unresolved<int>>{});
+// checkIsMapDynamic(true, false, <prefix.Unresolved, int>{});
+// checkIsMapDynamic(false, true, <String, prefix.Unresolved<int>>{});
+
+ checkIsMapDynamic(true, true, new Map());
+ checkIsMapDynamic(true, true, new Map<>); /// 04: compile-time error
+ checkIsMapDynamic(true, true, new Map<int>());
+ checkIsMapDynamic(false, false, new Map<String, int>());
+ checkIsMapDynamic(true, true, new Map<String, int, String>());
+ checkIsMapDynamic(true, false, new Map<Unresolved, int>());
+ checkIsMapDynamic(false, true, new Map<String, Unresolved<int>>());
+ checkIsMapDynamic(true, false, new Map<prefix.Unresolved, int>());
+ checkIsMapDynamic(false, true, new Map<String, prefix.Unresolved<int>>());
+
+ Expect.throws(() => new Unresolved(), (e) => true);
+ Expect.throws(() => new Unresolved<int>(), (e) => true);
+ Expect.throws(() => new prefix.Unresolved(), (e) => true);
+ Expect.throws(() => new prefix.Unresolved<int>(), (e) => true);
+
+ try {
+ throw 'foo';
+ } on Unresolved catch (e) {
+ } catch (e) {
+ Expect.fail();
+ }
+ try {
+ throw 'foo';
+ } on Unresolved<int> catch (e) {
+ } catch (e) {
+ Expect.fail();
+ }
+ try {
+ throw 'foo';
+ } on prefix.Unresolved catch (e) {
+ } catch (e) {
+ Expect.fail();
+ }
+ try {
+ throw 'foo';
+ } on prefix.Unresolved<int> catch (e) {
+ } catch (e) {
+ Expect.fail();
+ }
+}
« no previous file with comments | « tests/language/malformed_inheritance_test.dart ('k') | tests/language/new_expression_type_args_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698