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

Side by Side 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, 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // Unit test of the [NativeBehavior.processSpecString] method. 5 // Unit test of the [NativeBehavior.processSpecString] method.
6 6
7 import 'package:expect/expect.dart'; 7 import 'package:expect/expect.dart';
8 import 'package:compiler/src/native/native.dart'; 8 import 'package:compiler/src/native/native.dart';
9 import 'package:compiler/src/dart2jslib.dart' 9 import 'package:compiler/src/dart2jslib.dart'
10 show DiagnosticListener; 10 show DiagnosticListener;
11 import 'package:compiler/src/universe/universe.dart'
12 show SideEffects;
11 13
12 const OBJECT = 'Object'; 14 const OBJECT = 'Object';
13 const NULL = 'Null'; 15 const NULL = 'Null';
14 16
15 class Listener implements DiagnosticListener { 17 class Listener implements DiagnosticListener {
16 String errorMessage; 18 String errorMessage;
17 internalError(spannable, message) => errorMessage = message; 19 internalError(spannable, message) {
20 errorMessage = message;
21 throw "error";
22 }
18 23
19 noSuchMethod(_) => null; 24 noSuchMethod(_) => null;
20 } 25 }
21 26
22 void test(String specString, 27 void test(String specString,
23 {List returns, 28 {List returns,
24 List creates, 29 List creates,
30 SideEffects expectedSideEffects,
25 bool expectError: false}) { 31 bool expectError: false}) {
26 List actualReturns = []; 32 List actualReturns = [];
27 List actualCreates = []; 33 List actualCreates = [];
34 SideEffects actualSideEffects;
28 Listener listener = new Listener(); 35 Listener listener = new Listener();
29 NativeBehavior.processSpecString( 36 try {
30 listener, 37 NativeBehavior.processSpecString(
31 null, 38 listener,
32 specString, 39 null,
33 resolveType: (t) => t, 40 specString,
34 typesReturned: actualReturns, typesInstantiated: actualCreates, 41 setSideEffects: (effects) { actualSideEffects = effects; },
35 objectType: OBJECT, nullType: NULL); 42 resolveType: (t) => t,
36 if (expectError) { 43 typesReturned: actualReturns, typesInstantiated: actualCreates,
44 objectType: OBJECT, nullType: NULL);
45 } catch (e) {
46 Expect.isTrue(expectError);
37 Expect.isNotNull(listener.errorMessage, 'Internal error expected.'); 47 Expect.isNotNull(listener.errorMessage, 'Internal error expected.');
38 } else { 48 return;
39 Expect.isNull(listener.errorMessage, 'Unexpected internal error.');
40 Expect.listEquals(returns, actualReturns, 'Unexpected returns.');
41 Expect.listEquals(creates, actualCreates, 'Unexpected creates.');
42 } 49 }
50 Expect.isNull(listener.errorMessage, 'Unexpected internal error.');
51 Expect.listEquals(returns, actualReturns, 'Unexpected returns.');
52 Expect.listEquals(creates, actualCreates, 'Unexpected creates.');
53 Expect.equals(expectedSideEffects, actualSideEffects);
54 }
55
56 void testWithSideEffects(String specString,
57 {List returns,
58 List creates,
59 bool expectError: false}) {
60
61 void sideEffectsTest(String newSpecString, SideEffects expectedSideEffects,
62 {bool sideEffectsExpectError}) {
63 test(newSpecString,
64 returns: returns,
65 creates: creates,
66 expectedSideEffects: expectedSideEffects,
67 expectError: sideEffectsExpectError == null
68 ? expectError
69 : sideEffectsExpectError);
70 }
71
72 SideEffects emptySideEffects = new SideEffects.empty();
73 sideEffectsTest(specString + "effects:empty;depends:empty;",
74 emptySideEffects);
75 sideEffectsTest(specString + "depends:empty;effects:empty;",
76 emptySideEffects);
77 sideEffectsTest("effects:empty;depends:empty;" + specString,
78 emptySideEffects);
79 sideEffectsTest("depends:empty;effects:empty;" + specString,
80 emptySideEffects);
81
82 SideEffects effects = new SideEffects();
83 effects.clearChangesIndex();
84 effects.clearAllDependencies();
85 sideEffectsTest(specString + "effects:-index;depends:empty;", effects);
86
87 effects = new SideEffects();
88 effects.clearAllSideEffects();
89 effects.clearDependsOnIndexStore();
90 sideEffectsTest(specString + "effects:empty;depends:-index;", effects);
91
92 effects = new SideEffects();
93 effects.clearChangesInstanceProperty();
94 effects.clearChangesStaticProperty();
95 effects.clearAllDependencies();
96 sideEffectsTest(specString + "effects:-instance,-static;depends:empty;",
97 effects);
98
99 effects = new SideEffects();
100 effects.clearAllSideEffects();
101 effects.clearDependsOnInstancePropertyStore();
102 effects.clearDependsOnStaticPropertyStore();
103 sideEffectsTest(specString + "effects:empty;depends:-instance,-static;",
104 effects);
105
106 effects = new SideEffects();
107 effects.clearChangesInstanceProperty();
108 effects.clearChangesStaticProperty();
109 effects.clearDependsOnIndexStore();
110 sideEffectsTest(specString + "effects:-instance,-static;depends:-index;",
111 effects);
112
113 effects = new SideEffects();
114 effects.clearChangesIndex();
115 effects.clearDependsOnInstancePropertyStore();
116 effects.clearDependsOnStaticPropertyStore();
117 sideEffectsTest(specString + "effects:-index;depends:-instance,-static;",
118 effects);
119
120 effects = new SideEffects();
121 effects.clearChangesIndex();
122 sideEffectsTest(specString + "effects:-index;depends:all;", effects);
123
124 effects = new SideEffects();
125 effects.clearDependsOnIndexStore();
126 sideEffectsTest(specString + "effects:all;depends:-index;", effects);
127
128 effects = new SideEffects();
129 effects.clearChangesInstanceProperty();
130 effects.clearChangesStaticProperty();
131 sideEffectsTest(specString + "effects:-instance,-static;depends:all;",
132 effects);
133
134 effects = new SideEffects();
135 effects.clearDependsOnInstancePropertyStore();
136 effects.clearDependsOnStaticPropertyStore();
137 sideEffectsTest(specString + "effects:all;depends:-instance,-static;",
138 effects);
139
140 sideEffectsTest(specString + "effects:-instance,-static;",
141 effects,
142 sideEffectsExpectError: true);
143
144 sideEffectsTest(specString + "depends:-instance,-static;",
145 effects,
146 sideEffectsExpectError: true);
147
148 sideEffectsTest(specString + "effects:empty;",
149 effects,
150 sideEffectsExpectError: true);
151
152 sideEffectsTest(specString + "depends:all;",
153 effects,
154 sideEffectsExpectError: true);
155
156 sideEffectsTest(specString + "effects:-instance,-static;depends:foo;",
157 effects,
158 sideEffectsExpectError: true);
159
160 sideEffectsTest(specString + "effects:foo;depends:-instance,-static;",
161 effects,
162 sideEffectsExpectError: true);
163
164 sideEffectsTest(specString + "effects:all;depends:foo",
165 effects,
166 sideEffectsExpectError: true);
167
168 sideEffectsTest(specString + "effects:foo;depends:empty;",
169 effects,
170 sideEffectsExpectError: true);
171
172 sideEffectsTest(specString + "effects:;depends:empty;",
173 effects,
174 sideEffectsExpectError: true);
175
176 sideEffectsTest(specString + "effects:all;depends:;",
177 effects,
178 sideEffectsExpectError: true);
43 } 179 }
44 180
45 void main() { 181 void main() {
46 test('void', returns: [], creates: []); 182 test('void', returns: [], creates: []);
47 test('', returns: [OBJECT, NULL], creates: []); 183 test('', returns: [OBJECT, NULL], creates: []);
48 test('var', returns: [OBJECT, NULL], creates: []); 184 test('var', returns: [OBJECT, NULL], creates: []);
49 test('A', returns: ['A'], creates: ['A']); 185 test('A', returns: ['A'], creates: ['A']);
50 test('A|B', returns: ['A', 'B'], creates: ['A', 'B']); 186 test('A|B', returns: ['A', 'B'], creates: ['A', 'B']);
51 test('A|B|C', returns: ['A', 'B', 'C'], creates: ['A', 'B', 'C']); 187 test('A|B|C', returns: ['A', 'B', 'C'], creates: ['A', 'B', 'C']);
52 188
(...skipping 13 matching lines...) Expand all
66 202
67 test('returns:void;creates:A;', returns: [], creates: ['A']); 203 test('returns:void;creates:A;', returns: [], creates: ['A']);
68 test('returns:;creates:A|B;', returns: [OBJECT, NULL], creates: ['A', 'B']); 204 test('returns:;creates:A|B;', returns: [OBJECT, NULL], creates: ['A', 'B']);
69 test('returns:var;creates:A|B|C;', 205 test('returns:var;creates:A|B|C;',
70 returns: [OBJECT, NULL], creates: ['A', 'B', 'C']); 206 returns: [OBJECT, NULL], creates: ['A', 'B', 'C']);
71 test('returns:A; creates:A|B|C; ', returns: ['A'], creates: ['A', 'B', 'C']); 207 test('returns:A; creates:A|B|C; ', returns: ['A'], creates: ['A', 'B', 'C']);
72 test(' returns:A|B; creates:A|C;', 208 test(' returns:A|B; creates:A|C;',
73 returns: ['A', 'B'], creates: ['A', 'C']); 209 returns: ['A', 'B'], creates: ['A', 'C']);
74 test(' returns:A|B|C; creates:A; ', 210 test(' returns:A|B|C; creates:A; ',
75 returns: ['A', 'B', 'C'], creates: ['A']); 211 returns: ['A', 'B', 'C'], creates: ['A']);
212
213 testWithSideEffects('returns:void;', returns: [], creates: []);
214 testWithSideEffects('returns:void;', returns: [], creates: []);
215 testWithSideEffects('returns:;', returns: [OBJECT, NULL], creates: []);
216 testWithSideEffects('returns:var;', returns: [OBJECT, NULL], creates: []);
217 testWithSideEffects('returns:A;', returns: ['A'], creates: []);
218 testWithSideEffects('returns:A|B;', returns: ['A', 'B'], creates: []);
219 testWithSideEffects('returns:A|B|C;', returns: ['A', 'B', 'C'], creates: []);
220
221 testWithSideEffects('creates:void;', expectError: true);
222 testWithSideEffects('creates:;', expectError: true);
223 testWithSideEffects('creates:var;', expectError: true);
224 testWithSideEffects('creates:A;', returns: [], creates: ['A']);
225 testWithSideEffects('creates:A|B;', returns: [], creates: ['A', 'B']);
226 testWithSideEffects('creates:A|B|C;', returns: [], creates: ['A', 'B', 'C']);
227
228 testWithSideEffects('returns:void;creates:A;', returns: [], creates: ['A']);
229 testWithSideEffects('returns:;creates:A|B;',
230 returns: [OBJECT, NULL], creates: ['A', 'B']);
231 testWithSideEffects('returns:var;creates:A|B|C;',
232 returns: [OBJECT, NULL], creates: ['A', 'B', 'C']);
233 testWithSideEffects('returns:A; creates:A|B|C; ',
234 returns: ['A'], creates: ['A', 'B', 'C']);
235 testWithSideEffects(' returns:A|B; creates:A|C;',
236 returns: ['A', 'B'], creates: ['A', 'C']);
237 testWithSideEffects(' returns:A|B|C; creates:A; ',
238 returns: ['A', 'B', 'C'], creates: ['A']);
76 } 239 }
OLDNEW
« 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