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

Unified Diff: pkg/analyzer2dart/test/tree_shaker_test.dart

Issue 652613004: Add tree shaker support for setters and field writes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 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/analyzer2dart/test/tree_shaker_test.dart
diff --git a/pkg/analyzer2dart/test/tree_shaker_test.dart b/pkg/analyzer2dart/test/tree_shaker_test.dart
index c094f09c76dc97ba8100a55791cbe040975e7f12..d1caca94217bd09485bde4e9fa2e455d352bbbe7 100644
--- a/pkg/analyzer2dart/test/tree_shaker_test.dart
+++ b/pkg/analyzer2dart/test/tree_shaker_test.dart
@@ -27,7 +27,7 @@ foo() {
helper.assertHasFunction('foo');
});
- test('Toplevel field access', () {
+ test('Toplevel field read', () {
var helper = new TreeShakerTestHelper('''
main() {
return foo;
@@ -40,6 +40,19 @@ var bar;
helper.assertNoVariable('bar');
});
+ test('Toplevel field write', () {
+ var helper = new TreeShakerTestHelper('''
+main() {
+ foo = 1;
+}
+var foo;
+var bar;
+''');
+ helper.assertHasFunction('main');
+ helper.assertHasVariable('foo');
+ helper.assertNoVariable('bar');
+ });
+
test('Toplevel field invocation', () {
var helper = new TreeShakerTestHelper('''
main() {
@@ -145,10 +158,14 @@ main() {
class A {
get g1 => null;
get g2 => null;
+ set g1(x) {}
+ set g2(x) {}
}
class B {
get g1 => null;
get g2 => null;
+ set g1(x) {}
+ set g2(x) {}
}
main() {
new A().g1;
@@ -158,9 +175,41 @@ main() {
helper.assertNoGetter('A.g2');
helper.assertNoGetter('B.g1');
helper.assertNoGetter('B.g2');
+ helper.assertNoSetter('A.g1');
+ helper.assertNoSetter('A.g2');
+ helper.assertNoSetter('B.g1');
+ helper.assertNoSetter('B.g2');
+ });
+
+ test('Setter usage', () {
+ var helper = new TreeShakerTestHelper('''
+class A {
+ get g1 => null;
+ get g2 => null;
+ set g1(x) {}
+ set g2(x) {}
+}
+class B {
+ get g1 => null;
+ get g2 => null;
+ set g1(x) {}
+ set g2(x) {}
+}
+main() {
+ new A().g1 = 1;
+}
+''');
+ helper.assertHasSetter('A.g1');
+ helper.assertNoSetter('A.g2');
+ helper.assertNoSetter('B.g1');
+ helper.assertNoSetter('B.g2');
+ helper.assertNoGetter('A.g1');
+ helper.assertNoGetter('A.g2');
+ helper.assertNoGetter('B.g1');
+ helper.assertNoGetter('B.g2');
});
- test('Field access', () {
+ test('Field read', () {
var helper = new TreeShakerTestHelper('''
class A {
var f1;
@@ -180,6 +229,26 @@ main() {
helper.assertNoField('B.f2');
});
+ test('Field write', () {
+ var helper = new TreeShakerTestHelper('''
+class A {
+ var f1;
+ var f2;
+}
+class B {
+ var f1;
+ var f2;
+}
+main() {
+ new A().f1 = 1;
+}
+''');
+ helper.assertHasField('A.f1');
+ helper.assertNoField('A.f2');
+ helper.assertNoField('B.f1');
+ helper.assertNoField('B.f2');
+ });
+
test('Ordinary constructor with initializer list', () {
var helper = new TreeShakerTestHelper('''
class A {
@@ -276,6 +345,11 @@ class TreeShakerTestHelper {
Map<String, MethodDeclaration> getters = <String, MethodDeclaration>{};
/**
+ * Setters contained in [world], indexed by className.propertyName.
+ */
+ Map<String, MethodDeclaration> setters = <String, MethodDeclaration>{};
+
+ /**
* Fields contained in [world], indexed by className.fieldName.
*/
Map<String, VariableDeclaration> fields = <String, VariableDeclaration>{};
@@ -322,9 +396,16 @@ class TreeShakerTestHelper {
if (declaration.isGetter) {
getters['${element.enclosingElement.name}.${element.name}'] =
declaration;
+ } else if (declaration.isSetter) {
+ // element.name uses the convention that setter names end in '='.
+ // Strip off the '=' to avoid confusion in writing the tests.
scheglov 2014/10/21 14:58:21 We could use element.displayName instead.
Paul Berry 2014/10/21 15:14:04 Done.
+ String setterName =
+ '${element.enclosingElement.name}.${element.name}';
+ assert(setterName.endsWith('='));
+ setters[setterName.substring(0, setterName.length - 1)] =
+ declaration;
} else {
- // TODO(paulberry): handle setters.
- throw new UnimplementedError();
+ fail('Unexpected property accessor (neither getter nor setter)');
}
}
});
@@ -377,6 +458,13 @@ class TreeShakerTestHelper {
}
/**
+ * Asserts that [world] contains a setter with the given qualified name.
+ */
+ void assertHasSetter(String qualifiedName) {
+ expect(setters, contains(qualifiedName));
+ }
+
+ /**
* Asserts that [world] instantiates a class with the given name.
*/
void assertHasInstantiatedClass(String name) {
@@ -425,6 +513,14 @@ class TreeShakerTestHelper {
}
/**
+ * Asserts that [world] doesn't contain a setter with the given qualified
+ * name.
+ */
+ void assertNoSetter(String qualifiedName) {
+ expect(setters, isNot(contains(qualifiedName)));
+ }
+
+ /**
* Asserts that [world] doesn't instantiate a class with the given name.
*/
void assertNoInstantiatedClass(String name) {
« pkg/analyzer2dart/lib/src/tree_shaker.dart ('K') | « pkg/analyzer2dart/lib/src/tree_shaker.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698