blob: 22643b3921114b005737f802e0b176c4bf3aea6e [file] [log] [blame]
// 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.
// @dart = 2.9
import 'package:expect/expect.dart';
import 'package:kernel/ast.dart';
import 'text_representation_test.dart';
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}");
}
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}");
}
main() {
testTypes();
testMembers();
}
void testTypes() {
testType(new InterfaceType.byReference(null, Nullability.nonNullable, []),
'<missing-class-reference>');
testType(new TypedefType.byReference(null, Nullability.nonNullable, []),
'<missing-typedef-reference>');
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('library');
Reference libraryReference = new Reference()..canonicalName = library;
testType(
new InterfaceType.byReference(
libraryReference, Nullability.nonNullable, []),
'library');
testType(
new TypedefType.byReference(
libraryReference, Nullability.nonNullable, []),
'library');
CanonicalName className = library.getChild('Class');
Reference classNameReference = new Reference()..canonicalName = className;
testType(
new InterfaceType.byReference(
classNameReference, Nullability.nonNullable, []),
'Class',
verbose: 'library::Class');
testType(
new TypedefType.byReference(
classNameReference, Nullability.nonNullable, []),
'Class',
verbose: 'library::Class');
}
void testMembers() {
testExpression(new PropertyGet(new IntLiteral(0), new Name('foo')), '''
0.foo''');
testExpression(new StaticGet(null), '''
<missing-member-reference>''');
Reference unlinkedMemberName = new Reference();
testExpression(
new PropertyGet.byReference(
new IntLiteral(0), new Name('foo'), unlinkedMemberName),
'''
0.foo''');
testExpression(new StaticGet.byReference(unlinkedMemberName), '''
<unlinked-member-reference>''');
CanonicalName root = new CanonicalName.root();
Reference rootReference = new Reference()..canonicalName = root;
testExpression(
new PropertyGet.byReference(
new IntLiteral(0), new Name('foo'), rootReference),
'''
0.foo''');
testExpression(new StaticGet.byReference(rootReference), '''
<root>''');
CanonicalName library = root.getChild('library');
Reference libraryReference = new Reference()..canonicalName = library;
testExpression(
new PropertyGet.byReference(
new IntLiteral(0), new Name('foo'), libraryReference),
'''
0.foo''');
testExpression(new StaticGet.byReference(libraryReference), '''
library''');
CanonicalName topLevelMemberName = library.getChild('member');
Reference topLevelMemberNameReference = new Reference()
..canonicalName = topLevelMemberName;
testExpression(
new PropertyGet.byReference(
new IntLiteral(0), new Name('foo'), topLevelMemberNameReference),
'''
0.foo''');
testExpression(new StaticGet.byReference(topLevelMemberNameReference), '''
member''', verbose: '''
library::member''');
CanonicalName className = library.getChild('Class');
Reference classNameReference = new Reference()..canonicalName = className;
testExpression(
new PropertyGet.byReference(
new IntLiteral(0), new Name('foo'), classNameReference),
'''
0.foo''');
testExpression(new StaticGet.byReference(classNameReference), '''
Class''', verbose: '''
library::Class''');
CanonicalName classMemberName = className.getChild('member');
Reference classMemberNameReference = new Reference()
..canonicalName = classMemberName;
testExpression(
new PropertyGet.byReference(
new IntLiteral(0), new Name('foo'), classMemberNameReference),
'''
0.foo''');
testExpression(new StaticGet.byReference(classMemberNameReference), '''
Class.member''', verbose: '''
library::Class.member''');
}