Chromium Code Reviews| OLD | NEW |
|---|---|
| 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; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 throw "error"; | 21 throw "error"; |
| 22 } | 22 } |
| 23 | 23 |
| 24 noSuchMethod(_) => null; | 24 noSuchMethod(_) => null; |
| 25 } | 25 } |
| 26 | 26 |
| 27 void test(String specString, | 27 void test(String specString, |
| 28 {List returns, | 28 {List returns, |
| 29 List creates, | 29 List creates, |
| 30 SideEffects expectedSideEffects, | 30 SideEffects expectedSideEffects, |
| 31 NativeThrowBehavior expectedThrows, | |
| 32 bool expectedNew, | |
| 33 bool expectedGvn, | |
| 31 bool expectError: false}) { | 34 bool expectError: false}) { |
| 32 List actualReturns = []; | 35 List actualReturns = []; |
| 33 List actualCreates = []; | 36 List actualCreates = []; |
| 34 SideEffects actualSideEffects; | 37 SideEffects actualSideEffects; |
| 38 NativeThrowBehavior actualThrows; | |
| 39 bool actualNew; | |
| 40 bool actualGvn; | |
| 35 Listener listener = new Listener(); | 41 Listener listener = new Listener(); |
| 36 try { | 42 try { |
| 37 NativeBehavior.processSpecString( | 43 NativeBehavior.processSpecString( |
| 38 listener, | 44 listener, |
| 39 null, | 45 null, |
| 40 specString, | 46 specString, |
| 41 setSideEffects: (effects) { actualSideEffects = effects; }, | 47 setSideEffects: (effects) { actualSideEffects = effects; }, |
| 48 setThrows: (b) { actualThrows = b; }, | |
| 49 setIsAllocation: (b) { actualNew = b; }, | |
| 50 setUseGvn: (b) { actualGvn = b; }, | |
| 42 resolveType: (t) => t, | 51 resolveType: (t) => t, |
| 43 typesReturned: actualReturns, typesInstantiated: actualCreates, | 52 typesReturned: actualReturns, typesInstantiated: actualCreates, |
| 44 objectType: OBJECT, nullType: NULL); | 53 objectType: OBJECT, nullType: NULL); |
| 45 } catch (e) { | 54 } catch (e) { |
| 46 Expect.isTrue(expectError); | 55 Expect.isTrue(expectError); |
| 47 Expect.isNotNull(listener.errorMessage, 'Internal error expected.'); | 56 Expect.isNotNull(listener.errorMessage, 'Internal error expected.'); |
| 48 return; | 57 return; |
| 49 } | 58 } |
| 50 Expect.isNull(listener.errorMessage, 'Unexpected internal error.'); | 59 Expect.isNull(listener.errorMessage, 'Unexpected internal error.'); |
| 51 Expect.listEquals(returns, actualReturns, 'Unexpected returns.'); | 60 if (returns != null) { |
| 52 Expect.listEquals(creates, actualCreates, 'Unexpected creates.'); | 61 Expect.listEquals(returns, actualReturns, 'Unexpected returns.'); |
| 62 } | |
| 63 if (creates != null) { | |
| 64 Expect.listEquals(creates, actualCreates, 'Unexpected creates.'); | |
| 65 } | |
| 53 Expect.equals(expectedSideEffects, actualSideEffects); | 66 Expect.equals(expectedSideEffects, actualSideEffects); |
| 67 Expect.equals(expectedThrows, actualThrows); | |
| 68 Expect.equals(expectedNew, actualNew); | |
| 69 Expect.equals(expectedGvn, actualGvn); | |
| 54 } | 70 } |
| 55 | 71 |
| 56 void testWithSideEffects(String specString, | 72 void testWithSideEffects(String specString, |
| 57 {List returns, | 73 {List returns, |
| 58 List creates, | 74 List creates, |
| 59 bool expectError: false}) { | 75 bool expectError: false}) { |
| 60 | 76 |
| 61 void sideEffectsTest(String newSpecString, SideEffects expectedSideEffects, | 77 void sideEffectsTest(String newSpecString, SideEffects expectedSideEffects, |
| 62 {bool sideEffectsExpectError}) { | 78 {bool sideEffectsExpectError}) { |
| 63 test(newSpecString, | 79 test(newSpecString, |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 test(' returns:A|B|C; creates:A; ', | 226 test(' returns:A|B|C; creates:A; ', |
| 211 returns: ['A', 'B', 'C'], creates: ['A']); | 227 returns: ['A', 'B', 'C'], creates: ['A']); |
| 212 | 228 |
| 213 testWithSideEffects('returns:void;', returns: [], creates: []); | 229 testWithSideEffects('returns:void;', returns: [], creates: []); |
| 214 testWithSideEffects('returns:void;', returns: [], creates: []); | 230 testWithSideEffects('returns:void;', returns: [], creates: []); |
| 215 testWithSideEffects('returns:;', returns: [OBJECT, NULL], creates: []); | 231 testWithSideEffects('returns:;', returns: [OBJECT, NULL], creates: []); |
| 216 testWithSideEffects('returns:var;', returns: [OBJECT, NULL], creates: []); | 232 testWithSideEffects('returns:var;', returns: [OBJECT, NULL], creates: []); |
| 217 testWithSideEffects('returns:A;', returns: ['A'], creates: []); | 233 testWithSideEffects('returns:A;', returns: ['A'], creates: []); |
| 218 testWithSideEffects('returns:A|B;', returns: ['A', 'B'], creates: []); | 234 testWithSideEffects('returns:A|B;', returns: ['A', 'B'], creates: []); |
| 219 testWithSideEffects('returns:A|B|C;', returns: ['A', 'B', 'C'], creates: []); | 235 testWithSideEffects('returns:A|B|C;', returns: ['A', 'B', 'C'], creates: []); |
| 236 testWithSideEffects('returns: A| B |C ;', returns: ['A', 'B', 'C'], creates: [ ]); | |
|
floitsch
2015/04/07 15:35:16
long line.
sra1
2015/04/07 17:59:47
Done.
| |
| 220 | 237 |
| 221 testWithSideEffects('creates:void;', expectError: true); | 238 testWithSideEffects('creates:void;', expectError: true); |
| 222 testWithSideEffects('creates:;', expectError: true); | 239 testWithSideEffects('creates:;', expectError: true); |
| 223 testWithSideEffects('creates:var;', expectError: true); | 240 testWithSideEffects('creates:var;', expectError: true); |
| 224 testWithSideEffects('creates:A;', returns: [], creates: ['A']); | 241 testWithSideEffects('creates:A;', returns: [], creates: ['A']); |
| 225 testWithSideEffects('creates:A|B;', returns: [], creates: ['A', 'B']); | 242 testWithSideEffects('creates:A|B;', returns: [], creates: ['A', 'B']); |
| 226 testWithSideEffects('creates:A|B|C;', returns: [], creates: ['A', 'B', 'C']); | 243 testWithSideEffects('creates:A|B|C;', returns: [], creates: ['A', 'B', 'C']); |
| 227 | 244 |
| 228 testWithSideEffects('returns:void;creates:A;', returns: [], creates: ['A']); | 245 testWithSideEffects('returns:void;creates:A;', returns: [], creates: ['A']); |
| 229 testWithSideEffects('returns:;creates:A|B;', | 246 testWithSideEffects('returns:;creates:A|B;', |
| 230 returns: [OBJECT, NULL], creates: ['A', 'B']); | 247 returns: [OBJECT, NULL], creates: ['A', 'B']); |
| 231 testWithSideEffects('returns:var;creates:A|B|C;', | 248 testWithSideEffects('returns:var;creates:A|B|C;', |
| 232 returns: [OBJECT, NULL], creates: ['A', 'B', 'C']); | 249 returns: [OBJECT, NULL], creates: ['A', 'B', 'C']); |
| 233 testWithSideEffects('returns:A; creates:A|B|C; ', | 250 testWithSideEffects('returns:A; creates:A|B|C; ', |
| 234 returns: ['A'], creates: ['A', 'B', 'C']); | 251 returns: ['A'], creates: ['A', 'B', 'C']); |
| 235 testWithSideEffects(' returns:A|B; creates:A|C;', | 252 testWithSideEffects(' returns:A|B; creates:A|C;', |
| 236 returns: ['A', 'B'], creates: ['A', 'C']); | 253 returns: ['A', 'B'], creates: ['A', 'C']); |
| 237 testWithSideEffects(' returns:A|B|C; creates:A; ', | 254 testWithSideEffects(' returns:A|B|C; creates:A; ', |
| 238 returns: ['A', 'B', 'C'], creates: ['A']); | 255 returns: ['A', 'B', 'C'], creates: ['A']); |
| 256 | |
| 257 test('throws:must', expectedThrows: NativeThrowBehavior.MUST); | |
| 258 test('throws:may', expectedThrows: NativeThrowBehavior.MAY); | |
| 259 test('throws:never', expectedThrows: NativeThrowBehavior.NEVER); | |
| 260 test('throws:null(1)', | |
| 261 expectedThrows: | |
| 262 NativeThrowBehavior.MAY_THROW_ONLY_ON_FIRST_ARGUMENT_ACCESS); | |
| 263 | |
| 264 test('new:true', expectedNew: true); | |
| 265 test('new:false', expectedNew: false); | |
| 266 test('returns:A;new:true', returns: ['A'], expectedNew: true); | |
| 267 test(' new : true ; returns:A;', returns: ['A'], expectedNew: true); | |
| 268 test('new:true;returns:A;new:true', expectError: true); | |
| 269 | |
| 270 test('gvn:true', expectedGvn: true); | |
| 271 test('gvn:false', expectedGvn: false); | |
| 272 test('returns:A;gvn:true', returns: ['A'], expectedGvn: true); | |
| 273 test(' gvn : true ; returns:A;', returns: ['A'], expectedGvn: true); | |
| 274 test('gvn:true;returns:A;gvn:true', expectError: true); | |
| 275 | |
| 276 test('gvn: true; new: true', expectError: true); | |
| 277 test('gvn: true; new: false', expectedGvn: true, expectedNew: false); | |
| 278 test('gvn: false; new: true', expectedGvn: false, expectedNew: true); | |
| 279 test('gvn: false; new: false', expectedGvn: false, expectedNew: false); | |
| 239 } | 280 } |
| OLD | NEW |