| // 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'''); |
| } |