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

Unified Diff: pkg/analyzer/test/generated/non_hint_code_test.dart

Issue 1782463002: Split resolver_test.dart into smaller files. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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
Index: pkg/analyzer/test/generated/non_hint_code_test.dart
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..fff8a6a6b86155e061d59dc644a40ca372988a21
--- /dev/null
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -0,0 +1,1156 @@
+// Copyright (c) 2016, 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.
+
+library analyzer.test.generated.non_hint_code_test;
+
+import 'package:analyzer/src/generated/error.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+
+import '../reflective_tests.dart';
+import '../utils.dart';
+import 'resolver_test_case.dart';
+
+main() {
+ initializeTestEnvironment();
+ runReflectiveTests(NonHintCodeTest);
+}
+
+@reflectiveTest
+class NonHintCodeTest extends ResolverTestCase {
+ void test_deadCode_deadBlock_conditionalElse_debugConst() {
+ Source source = addSource(r'''
+const bool DEBUG = true;
+f() {
+ DEBUG ? 1 : 2;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_conditionalIf_debugConst() {
+ Source source = addSource(r'''
+const bool DEBUG = false;
+f() {
+ DEBUG ? 1 : 2;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_else() {
+ Source source = addSource(r'''
+const bool DEBUG = true;
+f() {
+ if(DEBUG) {} else {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_if_debugConst_prefixedIdentifier() {
+ Source source = addSource(r'''
+class A {
+ static const bool DEBUG = false;
+}
+f() {
+ if(A.DEBUG) {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_if_debugConst_prefixedIdentifier2() {
+ Source source = addSource(r'''
+library L;
+import 'lib2.dart';
+f() {
+ if(A.DEBUG) {}
+}''');
+ addNamedSource(
+ "/lib2.dart",
+ r'''
+library lib2;
+class A {
+ static const bool DEBUG = false;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_if_debugConst_propertyAccessor() {
+ Source source = addSource(r'''
+library L;
+import 'lib2.dart' as LIB;
+f() {
+ if(LIB.A.DEBUG) {}
+}''');
+ addNamedSource(
+ "/lib2.dart",
+ r'''
+library lib2;
+class A {
+ static const bool DEBUG = false;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_if_debugConst_simpleIdentifier() {
+ Source source = addSource(r'''
+const bool DEBUG = false;
+f() {
+ if(DEBUG) {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadBlock_while_debugConst() {
+ Source source = addSource(r'''
+const bool DEBUG = false;
+f() {
+ while(DEBUG) {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadCatch_onCatchSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {}
+f() {
+ try {} on B catch (e) {} on A catch (e) {} catch (e) {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadOperandLHS_and_debugConst() {
+ Source source = addSource(r'''
+const bool DEBUG = false;
+f() {
+ bool b = DEBUG && false;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deadCode_deadOperandLHS_or_debugConst() {
+ Source source = addSource(r'''
+const bool DEBUG = true;
+f() {
+ bool b = DEBUG || true;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_deprecatedAnnotationUse_classWithConstructor() {
+ Source source = addSource(r'''
+@deprecated
+class C {
+ C();
+}
+''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_divisionOptimization() {
+ Source source = addSource(r'''
+f(int x, int y) {
+ var v = x / y.toInt();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_divisionOptimization_supressIfDivisionNotDefinedInCore() {
+ Source source = addSource(r'''
+f(x, y) {
+ var v = (x / y).toInt();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_divisionOptimization_supressIfDivisionOverridden() {
+ Source source = addSource(r'''
+class A {
+ num operator /(x) { return x; }
+}
+f(A x, A y) {
+ var v = (x / y).toInt();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_duplicateImport_as() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+import 'lib1.dart' as one;
+A a;
+one.A a2;''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+class A {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_duplicateImport_hide() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+import 'lib1.dart' hide A;
+A a;
+B b;''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+class A {}
+class B {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_duplicateImport_show() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+import 'lib1.dart' show A;
+A a;
+B b;''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+class A {}
+class B {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_importDeferredLibraryWithLoadFunction() {
+ resolveWithErrors(<String>[
+ r'''
+library lib1;
+f() {}''',
+ r'''
+library root;
+import 'lib1.dart' deferred as lib1;
+main() { lib1.f(); }'''
+ ], ErrorCode.EMPTY_LIST);
+ }
+
+ void test_issue20904BuggyTypePromotionAtIfJoin_1() {
+ // https://code.google.com/p/dart/issues/detail?id=20904
+ Source source = addSource(r'''
+f(var message, var dynamic_) {
+ if (message is Function) {
+ message = dynamic_;
+ }
+ int s = message;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_issue20904BuggyTypePromotionAtIfJoin_3() {
+ // https://code.google.com/p/dart/issues/detail?id=20904
+ Source source = addSource(r'''
+f(var message) {
+ var dynamic_;
+ if (message is Function) {
+ message = dynamic_;
+ } else {
+ return;
+ }
+ int s = message;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_issue20904BuggyTypePromotionAtIfJoin_4() {
+ // https://code.google.com/p/dart/issues/detail?id=20904
+ Source source = addSource(r'''
+f(var message) {
+ if (message is Function) {
+ message = '';
+ } else {
+ return;
+ }
+ String s = message;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_missingReturn_emptyFunctionBody() {
+ Source source = addSource(r'''
+abstract class A {
+ int m();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_missingReturn_expressionFunctionBody() {
+ Source source = addSource("int f() => 0;");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_missingReturn_noReturnType() {
+ Source source = addSource("f() {}");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_missingReturn_voidReturnType() {
+ Source source = addSource("void f() {}");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_nullAwareInCondition_for_noCondition() {
+ Source source = addSource(r'''
+m(x) {
+ for (var v = x; ; v++) {}
+}
+''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_nullAwareInCondition_if_notTopLevel() {
+ Source source = addSource(r'''
+m(x) {
+ if (x?.y == null) {}
+}
+''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideEqualsButNotHashCode() {
+ Source source = addSource(r'''
+class A {
+ bool operator ==(x) { return x; }
+ get hashCode => 0;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingGetter_inInterface() {
+ Source source = addSource(r'''
+library dart.core;
+const override = null;
+class A {
+ int get m => 0;
+}
+class B implements A {
+ @override
+ int get m => 1;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingGetter_inSuperclass() {
+ Source source = addSource(r'''
+library dart.core;
+const override = null;
+class A {
+ int get m => 0;
+}
+class B extends A {
+ @override
+ int get m => 1;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingMethod_inInterface() {
+ Source source = addSource(r'''
+library dart.core;
+const override = null;
+class A {
+ int m() => 0;
+}
+class B implements A {
+ @override
+ int m() => 1;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingMethod_inSuperclass() {
+ Source source = addSource(r'''
+library dart.core;
+const override = null;
+class A {
+ int m() => 0;
+}
+class B extends A {
+ @override
+ int m() => 1;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingSetter_inInterface() {
+ Source source = addSource(r'''
+library dart.core;
+const override = null;
+class A {
+ set m(int x) {}
+}
+class B implements A {
+ @override
+ set m(int x) {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_overrideOnNonOverridingSetter_inSuperclass() {
+ Source source = addSource(r'''
+library dart.core;
+const override = null;
+class A {
+ set m(int x) {}
+}
+class B extends A {
+ @override
+ set m(int x) {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_propagatedFieldType() {
+ Source source = addSource(r'''
+class A { }
+class X<T> {
+ final x = new List<T>();
+}
+class Z {
+ final X<A> y = new X<A>();
+ foo() {
+ y.x.add(new A());
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_proxy_annotation_prefixed() {
+ Source source = addSource(r'''
+library L;
+@proxy
+class A {}
+f(var a) {
+ a = new A();
+ a.m();
+ var x = a.g;
+ a.s = 1;
+ var y = a + a;
+ a++;
+ ++a;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_proxy_annotation_prefixed2() {
+ Source source = addSource(r'''
+library L;
+@proxy
+class A {}
+class B {
+ f(var a) {
+ a = new A();
+ a.m();
+ var x = a.g;
+ a.s = 1;
+ var y = a + a;
+ a++;
+ ++a;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_proxy_annotation_prefixed3() {
+ Source source = addSource(r'''
+library L;
+class B {
+ f(var a) {
+ a = new A();
+ a.m();
+ var x = a.g;
+ a.s = 1;
+ var y = a + a;
+ a++;
+ ++a;
+ }
+}
+@proxy
+class A {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedGetter_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ get b => 0;
+}
+f(var a) {
+ if(a is A) {
+ return a.b;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedMethod_assignmentExpression_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator +(B b) {return new B();}
+}
+f(var a, var a2) {
+ a = new A();
+ a2 = new A();
+ a += a2;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedMethod_dynamic() {
+ Source source = addSource(r'''
+class D<T extends dynamic> {
+ fieldAccess(T t) => t.abc;
+ methodAccess(T t) => t.xyz(1, 2, 'three');
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedMethod_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ b() {}
+}
+f() {
+ var a = new A();
+ a.b();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedMethod_unionType_all() {
+ Source source = addSource(r'''
+class A {
+ int m(int x) => 0;
+}
+class B {
+ String m() => '0';
+}
+f(A a, B b) {
+ var ab;
+ if (0 < 1) {
+ ab = a;
+ } else {
+ ab = b;
+ }
+ ab.m();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedMethod_unionType_some() {
+ Source source = addSource(r'''
+class A {
+ int m(int x) => 0;
+}
+class B {}
+f(A a, B b) {
+ var ab;
+ if (0 < 1) {
+ ab = a;
+ } else {
+ ab = b;
+ }
+ ab.m(0);
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedOperator_binaryExpression_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator +(B b) {}
+}
+f(var a) {
+ if(a is A) {
+ a + 1;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedOperator_indexBoth_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator [](int index) {}
+}
+f(var a) {
+ if(a is A) {
+ a[0]++;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedOperator_indexGetter_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator [](int index) {}
+}
+f(var a) {
+ if(a is A) {
+ a[0];
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedOperator_indexSetter_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator []=(i, v) {}
+}
+f(var a) {
+ if(a is A) {
+ a[0] = 1;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedOperator_postfixExpression() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator +(B b) {return new B();}
+}
+f(var a) {
+ if(a is A) {
+ a++;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedOperator_prefixExpression() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ operator +(B b) {return new B();}
+}
+f(var a) {
+ if(a is A) {
+ ++a;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_undefinedSetter_inSubtype() {
+ Source source = addSource(r'''
+class A {}
+class B extends A {
+ set b(x) {}
+}
+f(var a) {
+ if(a is A) {
+ a.b = 0;
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_unnecessaryCast_13855_parameter_A() {
+ // dartbug.com/13855, dartbug.com/13732
+ Source source = addSource(r'''
+class A{
+ a() {}
+}
+class B<E> {
+ E e;
+ m() {
+ (e as A).a();
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryCast_conditionalExpression() {
+ Source source = addSource(r'''
+abstract class I {}
+class A implements I {}
+class B implements I {}
+I m(A a, B b) {
+ return a == null ? b as I : a as I;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryCast_dynamic_type() {
+ Source source = addSource(r'''
+m(v) {
+ var b = v as Object;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryCast_generics() {
+ // dartbug.com/18953
+ Source source = addSource(r'''
+import 'dart:async';
+Future<int> f() => new Future.value(0);
+void g(bool c) {
+ (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryCast_type_dynamic() {
+ Source source = addSource(r'''
+m(v) {
+ var b = Object as dynamic;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryNoSuchMethod_blockBody_notReturnStatement() {
+ Source source = addSource(r'''
+class A {
+ noSuchMethod(x) => super.noSuchMethod(x);
+}
+class B extends A {
+ mmm();
+ noSuchMethod(y) {
+ print(y);
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryNoSuchMethod_blockBody_notSingleStatement() {
+ Source source = addSource(r'''
+class A {
+ noSuchMethod(x) => super.noSuchMethod(x);
+}
+class B extends A {
+ mmm();
+ noSuchMethod(y) {
+ print(y);
+ return super.noSuchMethod(y);
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryNoSuchMethod_expressionBody_notNoSuchMethod() {
+ Source source = addSource(r'''
+class A {
+ noSuchMethod(x) => super.noSuchMethod(x);
+}
+class B extends A {
+ mmm();
+ noSuchMethod(y) => super.hashCode;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unnecessaryNoSuchMethod_expressionBody_notSuper() {
+ Source source = addSource(r'''
+class A {
+ noSuchMethod(x) => super.noSuchMethod(x);
+}
+class B extends A {
+ mmm();
+ noSuchMethod(y) => 42;
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unusedImport_annotationOnDirective() {
+ Source source = addSource(r'''
+library L;
+@A()
+import 'lib1.dart';''');
+ Source source2 = addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+class A {
+ const A() {}
+}''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source);
+ verify([source, source2]);
+ }
+
+ void test_unusedImport_as_equalPrefixes() {
+ // 18818
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' as one;
+import 'lib2.dart' as one;
+one.A a;
+one.B b;''');
+ Source source2 = addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+class A {}''');
+ Source source3 = addNamedSource(
+ "/lib2.dart",
+ r'''
+library lib2;
+class B {}''');
+ computeLibrarySourceErrors(source);
+ assertErrors(source);
+ assertNoErrors(source2);
+ assertNoErrors(source3);
+ verify([source, source2, source3]);
+ }
+
+ void test_unusedImport_core_library() {
+ Source source = addSource(r'''
+library L;
+import 'dart:core';''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unusedImport_export() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+Two two;''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+export 'lib2.dart';
+class One {}''');
+ addNamedSource(
+ "/lib2.dart",
+ r'''
+library lib2;
+class Two {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unusedImport_export2() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+Three three;''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+export 'lib2.dart';
+class One {}''');
+ addNamedSource(
+ "/lib2.dart",
+ r'''
+library lib2;
+export 'lib3.dart';
+class Two {}''');
+ addNamedSource(
+ "/lib3.dart",
+ r'''
+library lib3;
+class Three {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unusedImport_export_infiniteLoop() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart';
+Two two;''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+export 'lib2.dart';
+class One {}''');
+ addNamedSource(
+ "/lib2.dart",
+ r'''
+library lib2;
+export 'lib3.dart';
+class Two {}''');
+ addNamedSource(
+ "/lib3.dart",
+ r'''
+library lib3;
+export 'lib2.dart';
+class Three {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unusedImport_metadata() {
+ Source source = addSource(r'''
+library L;
+@A(x)
+import 'lib1.dart';
+class A {
+ final int value;
+ const A(this.value);
+}''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+const x = 0;''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_unusedImport_prefix_topLevelFunction() {
+ Source source = addSource(r'''
+library L;
+import 'lib1.dart' hide topLevelFunction;
+import 'lib1.dart' as one show topLevelFunction;
+class A {
+ static void x() {
+ One o;
+ one.topLevelFunction();
+ }
+}''');
+ addNamedSource(
+ "/lib1.dart",
+ r'''
+library lib1;
+class One {}
+topLevelFunction() {}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_useOfVoidResult_implicitReturnValue() {
+ Source source = addSource(r'''
+f() {}
+class A {
+ n() {
+ var a = f();
+ }
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
+ void test_useOfVoidResult_nonVoidReturnValue() {
+ Source source = addSource(r'''
+int f() => 1;
+g() {
+ var a = f();
+}''');
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+}
+
+class PubSuggestionCodeTest extends ResolverTestCase {
+ void test_import_package() {
+ Source source = addSource("import 'package:somepackage/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
+ }
+
+ void test_import_packageWithDotDot() {
+ Source source = addSource("import 'package:somepackage/../other.dart';");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CompileTimeErrorCode.URI_DOES_NOT_EXIST,
+ HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
+ ]);
+ }
+
+ void test_import_packageWithLeadingDotDot() {
+ Source source = addSource("import 'package:../other.dart';");
+ computeLibrarySourceErrors(source);
+ assertErrors(source, [
+ CompileTimeErrorCode.URI_DOES_NOT_EXIST,
+ HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT
+ ]);
+ }
+
+ void test_import_referenceIntoLibDirectory() {
+ cacheSource("/myproj/pubspec.yaml", "");
+ cacheSource("/myproj/lib/other.dart", "");
+ Source source =
+ addNamedSource("/myproj/web/test.dart", "import '../lib/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertErrors(
+ source, [HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE]);
+ }
+
+ void test_import_referenceIntoLibDirectory_no_pubspec() {
+ cacheSource("/myproj/lib/other.dart", "");
+ Source source =
+ addNamedSource("/myproj/web/test.dart", "import '../lib/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_import_referenceOutOfLibDirectory() {
+ cacheSource("/myproj/pubspec.yaml", "");
+ cacheSource("/myproj/web/other.dart", "");
+ Source source =
+ addNamedSource("/myproj/lib/test.dart", "import '../web/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertErrors(
+ source, [HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE]);
+ }
+
+ void test_import_referenceOutOfLibDirectory_no_pubspec() {
+ cacheSource("/myproj/web/other.dart", "");
+ Source source =
+ addNamedSource("/myproj/lib/test.dart", "import '../web/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_import_valid_inside_lib1() {
+ cacheSource("/myproj/pubspec.yaml", "");
+ cacheSource("/myproj/lib/other.dart", "");
+ Source source =
+ addNamedSource("/myproj/lib/test.dart", "import 'other.dart';");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_import_valid_inside_lib2() {
+ cacheSource("/myproj/pubspec.yaml", "");
+ cacheSource("/myproj/lib/bar/other.dart", "");
+ Source source = addNamedSource(
+ "/myproj/lib/foo/test.dart", "import '../bar/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+
+ void test_import_valid_outside_lib() {
+ cacheSource("/myproj/pubspec.yaml", "");
+ cacheSource("/myproj/web/other.dart", "");
+ Source source =
+ addNamedSource("/myproj/lib2/test.dart", "import '../web/other.dart';");
+ computeLibrarySourceErrors(source);
+ assertNoErrors(source);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698