Skip to content

Commit 4686393

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
[cfe] Add test for the id testing system.
Change-Id: Ie4f3042d4fd0f78e55cd672947fde3fab7950fb3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108802 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent e4689c9 commit 4686393

File tree

2 files changed

+140
-0
lines changed

2 files changed

+140
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
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.
4+
5+
/*member: main:main*/
6+
main() {
7+
// ignore: unused_element
8+
/*main.localFunction*/ localFunction() {}
9+
10+
/*main.<anonymous>*/
11+
() {};
12+
}
13+
14+
/*member: field:field*/
15+
var field;
16+
17+
/*member: getter:getter*/
18+
get getter => null;
19+
20+
/*member: setter=:setter=*/
21+
set setter(_) {}
22+
23+
/*class: Class:Class*/
24+
class Class {
25+
/*member: Class.:Class.*/
26+
Class();
27+
28+
/*member: Class.constructor:Class.constructor*/
29+
factory Class.constructor() => new Class();
30+
31+
/*member: Class.field:Class.field*/
32+
var field;
33+
34+
/*member: Class.getter:Class.getter*/
35+
get getter => null;
36+
37+
/*member: Class.setter=:Class.setter=*/
38+
set setter(_) {}
39+
40+
/*member: Class.method:Class.method*/
41+
void method() {
42+
// ignore: unused_element
43+
/*Class.method.localFunction*/ localFunction() {}
44+
45+
/*Class.method.<anonymous>*/
46+
() {};
47+
}
48+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
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.
4+
5+
import 'dart:io' show Directory, Platform;
6+
import 'package:front_end/src/testing/id.dart' show ActualData, Id;
7+
import 'package:front_end/src/testing/id_testing.dart'
8+
show DataInterpreter, StringDataInterpreter, runTests;
9+
import 'package:front_end/src/testing/id_testing.dart';
10+
import 'package:front_end/src/testing/id_testing_helper.dart'
11+
show
12+
CfeDataExtractor,
13+
CompilerResult,
14+
DataComputer,
15+
defaultCfeConfig,
16+
createUriForFileName,
17+
onFailure,
18+
runTestFor;
19+
import 'package:front_end/src/testing/id_testing_utils.dart';
20+
import 'package:kernel/ast.dart'
21+
show Class, Member, FunctionDeclaration, FunctionExpression, TreeNode;
22+
23+
main(List<String> args) async {
24+
Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
25+
await runTests(dataDir,
26+
args: args,
27+
supportedMarkers: [cfeMarker],
28+
createUriForFileName: createUriForFileName,
29+
onFailure: onFailure,
30+
runTest: runTestFor(const MemberNameDataComputer(), [defaultCfeConfig]));
31+
}
32+
33+
class MemberNameDataComputer extends DataComputer<String> {
34+
const MemberNameDataComputer();
35+
36+
@override
37+
void computeMemberData(CompilerResult compilerResult, Member member,
38+
Map<Id, ActualData<String>> actualMap,
39+
{bool verbose}) {
40+
member.accept(new MemberNameDataExtractor(compilerResult, actualMap));
41+
}
42+
43+
@override
44+
void computeClassData(CompilerResult compilerResult, Class cls,
45+
Map<Id, ActualData<String>> actualMap,
46+
{bool verbose}) {
47+
new MemberNameDataExtractor(compilerResult, actualMap).computeForClass(cls);
48+
}
49+
50+
@override
51+
DataInterpreter<String> get dataValidator => const StringDataInterpreter();
52+
}
53+
54+
class MemberNameDataExtractor extends CfeDataExtractor<String> {
55+
MemberNameDataExtractor(
56+
CompilerResult compilerResult, Map<Id, ActualData<String>> actualMap)
57+
: super(compilerResult, actualMap);
58+
59+
String computeClassName(Class cls) {
60+
return cls.name;
61+
}
62+
63+
String computeMemberName(Member member) {
64+
if (member.enclosingClass != null) {
65+
return '${computeClassName(member.enclosingClass)}.'
66+
'${getMemberName(member)}';
67+
}
68+
return getMemberName(member);
69+
}
70+
71+
@override
72+
String computeClassValue(Id id, Class cls) {
73+
return computeClassName(cls);
74+
}
75+
76+
@override
77+
String computeNodeValue(Id id, TreeNode node) {
78+
if (node is FunctionDeclaration) {
79+
return '${computeMemberName(getEnclosingMember(node))}.'
80+
'${node.variable.name}';
81+
} else if (node is FunctionExpression) {
82+
return '${computeMemberName(getEnclosingMember(node))}.'
83+
'<anonymous>';
84+
}
85+
return null;
86+
}
87+
88+
@override
89+
String computeMemberValue(Id id, Member member) {
90+
return computeMemberName(member);
91+
}
92+
}

0 commit comments

Comments
 (0)