|  | // Copyright (c) 2018, 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. | 
|  |  | 
|  | // @dart = 2.7 | 
|  |  | 
|  | import 'package:async_helper/async_helper.dart'; | 
|  | import 'package:compiler/src/js_backend/namer.dart'; | 
|  | import 'package:compiler/src/universe/call_structure.dart'; | 
|  | import 'package:expect/expect.dart'; | 
|  |  | 
|  | main() { | 
|  | asyncTest(() async { | 
|  | test(List<String> expectedSuffixes, | 
|  | {int positionalParameters: 0, | 
|  | int typeParameters: 0, | 
|  | List<String> namedParameters: const <String>[]}) { | 
|  | CallStructure callStructure = new CallStructure( | 
|  | positionalParameters + namedParameters.length, | 
|  | namedParameters, | 
|  | typeParameters); | 
|  | List<String> actualSuffixes = Namer.callSuffixForStructure(callStructure); | 
|  | Expect.listEquals( | 
|  | expectedSuffixes, | 
|  | actualSuffixes, | 
|  | "Unexpected suffixes for $callStructure. " | 
|  | "Expected: $expectedSuffixes, actual: $actualSuffixes."); | 
|  | } | 
|  |  | 
|  | test(['0']); | 
|  | test(['1'], positionalParameters: 1); | 
|  | test(['2'], positionalParameters: 2); | 
|  | test(['1', 'a'], namedParameters: ['a']); | 
|  | test(['2', 'a', 'b'], namedParameters: ['a', 'b']); | 
|  | test(['2', 'b', 'c'], namedParameters: ['c', 'b']); | 
|  | test(['2', 'a'], positionalParameters: 1, namedParameters: ['a']); | 
|  |  | 
|  | test(['1', '0'], typeParameters: 1); | 
|  | test(['1', '1'], positionalParameters: 1, typeParameters: 1); | 
|  | test(['1', '2'], positionalParameters: 2, typeParameters: 1); | 
|  | test(['1', '1', 'a'], namedParameters: ['a'], typeParameters: 1); | 
|  | test(['1', '2', 'a', 'b'], namedParameters: ['a', 'b'], typeParameters: 1); | 
|  | test(['1', '2', 'b', 'c'], namedParameters: ['c', 'b'], typeParameters: 1); | 
|  | test(['1', '2', 'a'], | 
|  | positionalParameters: 1, namedParameters: ['a'], typeParameters: 1); | 
|  |  | 
|  | test(['2', '0'], typeParameters: 2); | 
|  | test(['2', '1'], positionalParameters: 1, typeParameters: 2); | 
|  | test(['2', '2'], positionalParameters: 2, typeParameters: 2); | 
|  | test(['2', '1', 'a'], namedParameters: ['a'], typeParameters: 2); | 
|  | test(['2', '2', 'a', 'b'], namedParameters: ['a', 'b'], typeParameters: 2); | 
|  | test(['2', '2', 'b', 'c'], namedParameters: ['c', 'b'], typeParameters: 2); | 
|  | test(['2', '2', 'a'], | 
|  | positionalParameters: 1, namedParameters: ['a'], typeParameters: 2); | 
|  | }); | 
|  | } |