b48d4f224f
Change-Id: I60891b46119d6451810adf2846a05a66050bacd0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373246 Reviewed-by: Jens Johansen <jensj@google.com> Commit-Queue: Johnni Winther <johnniwinther@google.com>
159 lines
5.7 KiB
Dart
159 lines
5.7 KiB
Dart
// Copyright (c) 2020, 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.
|
|
|
|
import 'package:expect/expect.dart';
|
|
import 'package:kernel/ast.dart';
|
|
|
|
import 'text_representation_test.dart';
|
|
|
|
void testExpression(Expression node, String normal,
|
|
{String? verbose, String? limited}) {
|
|
Expect.stringEquals(normal, node.toText(normalStrategy),
|
|
"Unexpected normal strategy text for ${node.runtimeType}");
|
|
Expect.stringEquals(verbose ?? normal, node.toText(verboseStrategy),
|
|
"Unexpected verbose strategy text for ${node.runtimeType}");
|
|
Expect.stringEquals(limited ?? normal, node.toText(limitedStrategy),
|
|
"Unexpected limited strategy text for ${node.runtimeType}");
|
|
}
|
|
|
|
void testType(DartType node, String normal,
|
|
{String? verbose, String? limited}) {
|
|
Expect.stringEquals(normal, node.toText(normalStrategy),
|
|
"Unexpected normal strategy text for ${node.runtimeType}");
|
|
Expect.stringEquals(verbose ?? normal, node.toText(verboseStrategy),
|
|
"Unexpected verbose strategy text for ${node.runtimeType}");
|
|
Expect.stringEquals(limited ?? normal, node.toText(limitedStrategy),
|
|
"Unexpected limited strategy text for ${node.runtimeType}");
|
|
}
|
|
|
|
void main() {
|
|
testTypes();
|
|
testMembers();
|
|
}
|
|
|
|
void testTypes() {
|
|
Reference unlinkedClassName = new Reference();
|
|
testType(
|
|
new InterfaceType.byReference(
|
|
unlinkedClassName, Nullability.nonNullable, []),
|
|
'<unlinked-class-reference>');
|
|
testType(
|
|
new TypedefType.byReference(
|
|
unlinkedClassName, Nullability.nonNullable, []),
|
|
'<unlinked-typedef-reference>');
|
|
|
|
CanonicalName root = new CanonicalName.root();
|
|
Reference rootReference = new Reference()..canonicalName = root;
|
|
testType(
|
|
new InterfaceType.byReference(rootReference, Nullability.nonNullable, []),
|
|
'<root>');
|
|
testType(
|
|
new TypedefType.byReference(rootReference, Nullability.nonNullable, []),
|
|
'<root>');
|
|
|
|
CanonicalName library = root.getChild('lib');
|
|
Reference libraryReference = new Reference()..canonicalName = library;
|
|
testType(
|
|
new InterfaceType.byReference(
|
|
libraryReference, Nullability.nonNullable, []),
|
|
'library lib');
|
|
testType(
|
|
new TypedefType.byReference(
|
|
libraryReference, Nullability.nonNullable, []),
|
|
'library lib');
|
|
|
|
CanonicalName className = library.getChild('Class');
|
|
Reference classNameReference = new Reference()..canonicalName = className;
|
|
testType(
|
|
new InterfaceType.byReference(
|
|
classNameReference, Nullability.nonNullable, []),
|
|
'Class',
|
|
verbose: 'library lib::Class');
|
|
testType(
|
|
new TypedefType.byReference(
|
|
classNameReference, Nullability.nonNullable, []),
|
|
'Class',
|
|
verbose: 'library lib::Class');
|
|
}
|
|
|
|
void testMembers() {
|
|
Reference unlinkedMemberName = new Reference();
|
|
testExpression(
|
|
new InstanceGet.byReference(
|
|
InstanceAccessKind.Instance, new IntLiteral(0), new Name('foo'),
|
|
interfaceTargetReference: unlinkedMemberName,
|
|
resultType: const DynamicType()),
|
|
'''
|
|
0.foo''');
|
|
testExpression(new StaticGet.byReference(unlinkedMemberName), '''
|
|
<unlinked-member-reference>''');
|
|
|
|
CanonicalName root = new CanonicalName.root();
|
|
Reference rootReference = new Reference()..canonicalName = root;
|
|
testExpression(
|
|
new InstanceGet.byReference(
|
|
InstanceAccessKind.Instance, new IntLiteral(0), new Name('foo'),
|
|
interfaceTargetReference: rootReference,
|
|
resultType: const DynamicType()),
|
|
'''
|
|
0.foo''');
|
|
testExpression(new StaticGet.byReference(rootReference), '''
|
|
<root>''');
|
|
|
|
CanonicalName library = root.getChild('lib');
|
|
Reference libraryReference = new Reference()..canonicalName = library;
|
|
testExpression(
|
|
new InstanceGet.byReference(
|
|
InstanceAccessKind.Instance, new IntLiteral(0), new Name('foo'),
|
|
interfaceTargetReference: libraryReference,
|
|
resultType: const DynamicType()),
|
|
'''
|
|
0.foo''');
|
|
testExpression(new StaticGet.byReference(libraryReference), '''
|
|
library lib''');
|
|
|
|
CanonicalName topLevelMemberName =
|
|
library.getChild(CanonicalName.methodsName).getChild('member');
|
|
Reference topLevelMemberNameReference = new Reference()
|
|
..canonicalName = topLevelMemberName;
|
|
testExpression(
|
|
new InstanceGet.byReference(
|
|
InstanceAccessKind.Instance, new IntLiteral(0), new Name('foo'),
|
|
interfaceTargetReference: topLevelMemberNameReference,
|
|
resultType: const DynamicType()),
|
|
'''
|
|
0.foo''');
|
|
testExpression(new StaticGet.byReference(topLevelMemberNameReference), '''
|
|
member''', verbose: '''
|
|
library lib::member''');
|
|
|
|
CanonicalName className = library.getChild('Class');
|
|
Reference classNameReference = new Reference()..canonicalName = className;
|
|
testExpression(
|
|
new InstanceGet.byReference(
|
|
InstanceAccessKind.Instance, new IntLiteral(0), new Name('foo'),
|
|
interfaceTargetReference: classNameReference,
|
|
resultType: const DynamicType()),
|
|
'''
|
|
0.foo''');
|
|
testExpression(new StaticGet.byReference(classNameReference), '''
|
|
Class''', verbose: '''
|
|
library lib::Class''');
|
|
|
|
CanonicalName classMemberName =
|
|
className.getChild(CanonicalName.methodsName).getChild('member');
|
|
Reference classMemberNameReference = new Reference()
|
|
..canonicalName = classMemberName;
|
|
testExpression(
|
|
new InstanceGet.byReference(
|
|
InstanceAccessKind.Instance, new IntLiteral(0), new Name('foo'),
|
|
interfaceTargetReference: classMemberNameReference,
|
|
resultType: const DynamicType()),
|
|
'''
|
|
0.foo''');
|
|
testExpression(new StaticGet.byReference(classMemberNameReference), '''
|
|
Class.member''', verbose: '''
|
|
library lib::Class.member''');
|
|
}
|