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

Unified Diff: tests/compiler/dart2js/js_spec_string_test.dart

Issue 969093002: dart2js: Allow to encode side-effects in the spec-string of JS and similar built-ins. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix long lines. Created 5 years, 10 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: tests/compiler/dart2js/js_spec_string_test.dart
diff --git a/tests/compiler/dart2js/js_spec_string_test.dart b/tests/compiler/dart2js/js_spec_string_test.dart
index 42d938e3fb2b4e555d08c4bc49465fc6e95fd663..b4bbac4213caa282ae0f29a78aa7dca7c2ecca2e 100644
--- a/tests/compiler/dart2js/js_spec_string_test.dart
+++ b/tests/compiler/dart2js/js_spec_string_test.dart
@@ -8,13 +8,18 @@ import 'package:expect/expect.dart';
import 'package:compiler/src/native/native.dart';
import 'package:compiler/src/dart2jslib.dart'
show DiagnosticListener;
+import 'package:compiler/src/universe/universe.dart'
+ show SideEffects;
const OBJECT = 'Object';
const NULL = 'Null';
class Listener implements DiagnosticListener {
String errorMessage;
- internalError(spannable, message) => errorMessage = message;
+ internalError(spannable, message) {
+ errorMessage = message;
+ throw "error";
+ }
noSuchMethod(_) => null;
}
@@ -22,24 +27,155 @@ class Listener implements DiagnosticListener {
void test(String specString,
{List returns,
List creates,
+ SideEffects expectedSideEffects,
bool expectError: false}) {
List actualReturns = [];
List actualCreates = [];
+ SideEffects actualSideEffects;
Listener listener = new Listener();
- NativeBehavior.processSpecString(
- listener,
- null,
- specString,
- resolveType: (t) => t,
- typesReturned: actualReturns, typesInstantiated: actualCreates,
- objectType: OBJECT, nullType: NULL);
- if (expectError) {
+ try {
+ NativeBehavior.processSpecString(
+ listener,
+ null,
+ specString,
+ setSideEffects: (effects) { actualSideEffects = effects; },
+ resolveType: (t) => t,
+ typesReturned: actualReturns, typesInstantiated: actualCreates,
+ objectType: OBJECT, nullType: NULL);
+ } catch (e) {
+ Expect.isTrue(expectError);
Expect.isNotNull(listener.errorMessage, 'Internal error expected.');
- } else {
- Expect.isNull(listener.errorMessage, 'Unexpected internal error.');
- Expect.listEquals(returns, actualReturns, 'Unexpected returns.');
- Expect.listEquals(creates, actualCreates, 'Unexpected creates.');
+ return;
+ }
+ Expect.isNull(listener.errorMessage, 'Unexpected internal error.');
+ Expect.listEquals(returns, actualReturns, 'Unexpected returns.');
+ Expect.listEquals(creates, actualCreates, 'Unexpected creates.');
+ Expect.equals(expectedSideEffects, actualSideEffects);
+}
+
+void testWithSideEffects(String specString,
+ {List returns,
+ List creates,
+ bool expectError: false}) {
+
+ void sideEffectsTest(String newSpecString, SideEffects expectedSideEffects,
+ {bool sideEffectsExpectError}) {
+ test(newSpecString,
+ returns: returns,
+ creates: creates,
+ expectedSideEffects: expectedSideEffects,
+ expectError: sideEffectsExpectError == null
+ ? expectError
+ : sideEffectsExpectError);
}
+
+ SideEffects emptySideEffects = new SideEffects.empty();
+ sideEffectsTest(specString + "effects:empty;depends:empty;",
+ emptySideEffects);
+ sideEffectsTest(specString + "depends:empty;effects:empty;",
+ emptySideEffects);
+ sideEffectsTest("effects:empty;depends:empty;" + specString,
+ emptySideEffects);
+ sideEffectsTest("depends:empty;effects:empty;" + specString,
+ emptySideEffects);
+
+ SideEffects effects = new SideEffects();
+ effects.clearChangesIndex();
+ effects.clearAllDependencies();
+ sideEffectsTest(specString + "effects:-index;depends:empty;", effects);
+
+ effects = new SideEffects();
+ effects.clearAllSideEffects();
+ effects.clearDependsOnIndexStore();
+ sideEffectsTest(specString + "effects:empty;depends:-index;", effects);
+
+ effects = new SideEffects();
+ effects.clearChangesInstanceProperty();
+ effects.clearChangesStaticProperty();
+ effects.clearAllDependencies();
+ sideEffectsTest(specString + "effects:-instance,-static;depends:empty;",
+ effects);
+
+ effects = new SideEffects();
+ effects.clearAllSideEffects();
+ effects.clearDependsOnInstancePropertyStore();
+ effects.clearDependsOnStaticPropertyStore();
+ sideEffectsTest(specString + "effects:empty;depends:-instance,-static;",
+ effects);
+
+ effects = new SideEffects();
+ effects.clearChangesInstanceProperty();
+ effects.clearChangesStaticProperty();
+ effects.clearDependsOnIndexStore();
+ sideEffectsTest(specString + "effects:-instance,-static;depends:-index;",
+ effects);
+
+ effects = new SideEffects();
+ effects.clearChangesIndex();
+ effects.clearDependsOnInstancePropertyStore();
+ effects.clearDependsOnStaticPropertyStore();
+ sideEffectsTest(specString + "effects:-index;depends:-instance,-static;",
+ effects);
+
+ effects = new SideEffects();
+ effects.clearChangesIndex();
+ sideEffectsTest(specString + "effects:-index;depends:all;", effects);
+
+ effects = new SideEffects();
+ effects.clearDependsOnIndexStore();
+ sideEffectsTest(specString + "effects:all;depends:-index;", effects);
+
+ effects = new SideEffects();
+ effects.clearChangesInstanceProperty();
+ effects.clearChangesStaticProperty();
+ sideEffectsTest(specString + "effects:-instance,-static;depends:all;",
+ effects);
+
+ effects = new SideEffects();
+ effects.clearDependsOnInstancePropertyStore();
+ effects.clearDependsOnStaticPropertyStore();
+ sideEffectsTest(specString + "effects:all;depends:-instance,-static;",
+ effects);
+
+ sideEffectsTest(specString + "effects:-instance,-static;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "depends:-instance,-static;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:empty;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "depends:all;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:-instance,-static;depends:foo;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:foo;depends:-instance,-static;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:all;depends:foo",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:foo;depends:empty;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:;depends:empty;",
+ effects,
+ sideEffectsExpectError: true);
+
+ sideEffectsTest(specString + "effects:all;depends:;",
+ effects,
+ sideEffectsExpectError: true);
}
void main() {
@@ -73,4 +209,31 @@ void main() {
returns: ['A', 'B'], creates: ['A', 'C']);
test(' returns:A|B|C; creates:A; ',
returns: ['A', 'B', 'C'], creates: ['A']);
+
+ testWithSideEffects('returns:void;', returns: [], creates: []);
+ testWithSideEffects('returns:void;', returns: [], creates: []);
+ testWithSideEffects('returns:;', returns: [OBJECT, NULL], creates: []);
+ testWithSideEffects('returns:var;', returns: [OBJECT, NULL], creates: []);
+ testWithSideEffects('returns:A;', returns: ['A'], creates: []);
+ testWithSideEffects('returns:A|B;', returns: ['A', 'B'], creates: []);
+ testWithSideEffects('returns:A|B|C;', returns: ['A', 'B', 'C'], creates: []);
+
+ testWithSideEffects('creates:void;', expectError: true);
+ testWithSideEffects('creates:;', expectError: true);
+ testWithSideEffects('creates:var;', expectError: true);
+ testWithSideEffects('creates:A;', returns: [], creates: ['A']);
+ testWithSideEffects('creates:A|B;', returns: [], creates: ['A', 'B']);
+ testWithSideEffects('creates:A|B|C;', returns: [], creates: ['A', 'B', 'C']);
+
+ testWithSideEffects('returns:void;creates:A;', returns: [], creates: ['A']);
+ testWithSideEffects('returns:;creates:A|B;',
+ returns: [OBJECT, NULL], creates: ['A', 'B']);
+ testWithSideEffects('returns:var;creates:A|B|C;',
+ returns: [OBJECT, NULL], creates: ['A', 'B', 'C']);
+ testWithSideEffects('returns:A; creates:A|B|C; ',
+ returns: ['A'], creates: ['A', 'B', 'C']);
+ testWithSideEffects(' returns:A|B; creates:A|C;',
+ returns: ['A', 'B'], creates: ['A', 'C']);
+ testWithSideEffects(' returns:A|B|C; creates:A; ',
+ returns: ['A', 'B', 'C'], creates: ['A']);
}
« pkg/compiler/lib/src/native/behavior.dart ('K') | « pkg/compiler/lib/src/universe/side_effects.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698