/*
* Copyright (c) 2014, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.engine.utilities.ast;
import com.google.dart.engine.EngineTestCase;
import com.google.dart.engine.ast.AstNode;
import com.google.dart.engine.ast.ClassDeclaration;
import com.google.dart.engine.ast.ClassTypeAlias;
import com.google.dart.engine.ast.Combinator;
import com.google.dart.engine.ast.Comment;
import com.google.dart.engine.ast.CommentReference;
import com.google.dart.engine.ast.CompilationUnitMember;
import com.google.dart.engine.ast.ConstructorDeclaration;
import com.google.dart.engine.ast.ConstructorInitializer;
import com.google.dart.engine.ast.Directive;
import com.google.dart.engine.ast.ExportDirective;
import com.google.dart.engine.ast.Expression;
import com.google.dart.engine.ast.FieldDeclaration;
import com.google.dart.engine.ast.ForEachStatement;
import com.google.dart.engine.ast.FunctionDeclaration;
import com.google.dart.engine.ast.FunctionTypeAlias;
import com.google.dart.engine.ast.ImportDirective;
import com.google.dart.engine.ast.LibraryDirective;
import com.google.dart.engine.ast.MethodDeclaration;
import com.google.dart.engine.ast.PartDirective;
import com.google.dart.engine.ast.PartOfDirective;
import com.google.dart.engine.ast.TypeParameter;
import com.google.dart.engine.ast.VariableDeclaration;
import com.google.dart.engine.ast.VariableDeclarationList;
import com.google.dart.engine.scanner.Keyword;
import com.google.dart.engine.scanner.Token;
import com.google.dart.engine.scanner.TokenType;
import static com.google.dart.engine.ast.AstFactory.*;
import static com.google.dart.engine.scanner.TokenFactory.tokenFromKeyword;
import static com.google.dart.engine.scanner.TokenFactory.tokenFromString;
import static com.google.dart.engine.scanner.TokenFactory.tokenFromType;
public class AstClonerTest extends EngineTestCase {
public void test_visitAdjacentStrings() {
assertClone(adjacentStrings(string("a"), string("b")));
}
public void test_visitAnnotation_constant() {
assertClone(annotation(identifier("A")));
}
public void test_visitAnnotation_constructor() {
assertClone(annotation(identifier("A"), identifier("c"), argumentList()));
}
public void test_visitArgumentList() {
assertClone(argumentList(identifier("a"), identifier("b")));
}
public void test_visitAsExpression() {
assertClone(asExpression(identifier("e"), typeName("T")));
}
public void test_visitAssertStatement() {
assertClone(assertStatement(identifier("a")));
}
public void test_visitAssignmentExpression() {
assertClone(assignmentExpression(identifier("a"), TokenType.EQ, identifier("b")));
}
public void test_visitAwaitExpression() {
assertClone(awaitExpression(identifier("a")));
}
public void test_visitBinaryExpression() {
assertClone(binaryExpression(identifier("a"), TokenType.PLUS, identifier("b")));
}
public void test_visitBlock_empty() {
assertClone(block());
}
public void test_visitBlock_nonEmpty() {
assertClone(block(breakStatement(), breakStatement()));
}
public void test_visitBlockFunctionBody() {
assertClone(blockFunctionBody());
}
public void test_visitBooleanLiteral_false() {
assertClone(booleanLiteral(false));
}
public void test_visitBooleanLiteral_true() {
assertClone(booleanLiteral(true));
}
public void test_visitBreakStatement_label() {
assertClone(breakStatement("l"));
}
public void test_visitBreakStatement_noLabel() {
assertClone(breakStatement());
}
public void test_visitCascadeExpression_field() {
assertClone(cascadeExpression(
identifier("a"),
cascadedPropertyAccess("b"),
cascadedPropertyAccess("c")));
}
public void test_visitCascadeExpression_index() {
assertClone(cascadeExpression(
identifier("a"),
cascadedIndexExpression(integer(0L)),
cascadedIndexExpression(integer(1L))));
}
public void test_visitCascadeExpression_method() {
assertClone(cascadeExpression(
identifier("a"),
cascadedMethodInvocation("b"),
cascadedMethodInvocation("c")));
}
public void test_visitCatchClause_catch_noStack() {
assertClone(catchClause("e"));
}
public void test_visitCatchClause_catch_stack() {
assertClone(catchClause("e", "s"));
}
public void test_visitCatchClause_on() {
assertClone(catchClause(typeName("E")));
}
public void test_visitCatchClause_on_catch() {
assertClone(catchClause(typeName("E"), "e"));
}
public void test_visitClassDeclaration_abstract() {
assertClone(classDeclaration(Keyword.ABSTRACT, "C", null, null, null, null));
}
public void test_visitClassDeclaration_empty() {
assertClone(classDeclaration(null, "C", null, null, null, null));
}
public void test_visitClassDeclaration_extends() {
assertClone(classDeclaration(null, "C", null, extendsClause(typeName("A")), null, null));
}
public void test_visitClassDeclaration_extends_implements() {
assertClone(classDeclaration(
null,
"C",
null,
extendsClause(typeName("A")),
null,
implementsClause(typeName("B"))));
}
public void test_visitClassDeclaration_extends_with() {
assertClone(classDeclaration(
null,
"C",
null,
extendsClause(typeName("A")),
withClause(typeName("M")),
null));
}
public void test_visitClassDeclaration_extends_with_implements() {
assertClone(classDeclaration(
null,
"C",
null,
extendsClause(typeName("A")),
withClause(typeName("M")),
implementsClause(typeName("B"))));
}
public void test_visitClassDeclaration_implements() {
assertClone(classDeclaration(null, "C", null, null, null, implementsClause(typeName("B"))));
}
public void test_visitClassDeclaration_multipleMember() {
assertClone(classDeclaration(
null,
"C",
null,
null,
null,
null,
fieldDeclaration(false, Keyword.VAR, variableDeclaration("a")),
fieldDeclaration(false, Keyword.VAR, variableDeclaration("b"))));
}
public void test_visitClassDeclaration_parameters() {
assertClone(classDeclaration(null, "C", typeParameterList("E"), null, null, null));
}
public void test_visitClassDeclaration_parameters_extends() {
assertClone(classDeclaration(
null,
"C",
typeParameterList("E"),
extendsClause(typeName("A")),
null,
null));
}
public void test_visitClassDeclaration_parameters_extends_implements() {
assertClone(classDeclaration(
null,
"C",
typeParameterList("E"),
extendsClause(typeName("A")),
null,
implementsClause(typeName("B"))));
}
public void test_visitClassDeclaration_parameters_extends_with() {
assertClone(classDeclaration(
null,
"C",
typeParameterList("E"),
extendsClause(typeName("A")),
withClause(typeName("M")),
null));
}
public void test_visitClassDeclaration_parameters_extends_with_implements() {
assertClone(classDeclaration(
null,
"C",
typeParameterList("E"),
extendsClause(typeName("A")),
withClause(typeName("M")),
implementsClause(typeName("B"))));
}
public void test_visitClassDeclaration_parameters_implements() {
assertClone(classDeclaration(
null,
"C",
typeParameterList("E"),
null,
null,
implementsClause(typeName("B"))));
}
public void test_visitClassDeclaration_singleMember() {
assertClone(classDeclaration(
null,
"C",
null,
null,
null,
null,
fieldDeclaration(false, Keyword.VAR, variableDeclaration("a"))));
}
public void test_visitClassDeclaration_withMetadata() {
ClassDeclaration declaration = classDeclaration(null, "C", null, null, null, null);
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitClassTypeAlias_abstract() {
assertClone(classTypeAlias(
"C",
null,
Keyword.ABSTRACT,
typeName("S"),
withClause(typeName("M1")),
null));
}
public void test_visitClassTypeAlias_abstract_implements() {
assertClone(classTypeAlias(
"C",
null,
Keyword.ABSTRACT,
typeName("S"),
withClause(typeName("M1")),
implementsClause(typeName("I"))));
}
public void test_visitClassTypeAlias_generic() {
assertClone(classTypeAlias(
"C",
typeParameterList("E"),
null,
typeName("S", typeName("E")),
withClause(typeName("M1", typeName("E"))),
null));
}
public void test_visitClassTypeAlias_implements() {
assertClone(classTypeAlias(
"C",
null,
null,
typeName("S"),
withClause(typeName("M1")),
implementsClause(typeName("I"))));
}
public void test_visitClassTypeAlias_minimal() {
assertClone(classTypeAlias("C", null, null, typeName("S"), withClause(typeName("M1")), null));
}
public void test_visitClassTypeAlias_parameters_abstract() {
assertClone(classTypeAlias(
"C",
typeParameterList("E"),
Keyword.ABSTRACT,
typeName("S"),
withClause(typeName("M1")),
null));
}
public void test_visitClassTypeAlias_parameters_abstract_implements() {
assertClone(classTypeAlias(
"C",
typeParameterList("E"),
Keyword.ABSTRACT,
typeName("S"),
withClause(typeName("M1")),
implementsClause(typeName("I"))));
}
public void test_visitClassTypeAlias_parameters_implements() {
assertClone(classTypeAlias(
"C",
typeParameterList("E"),
null,
typeName("S"),
withClause(typeName("M1")),
implementsClause(typeName("I"))));
}
public void test_visitClassTypeAlias_withMetadata() {
ClassTypeAlias declaration = classTypeAlias(
"C",
null,
null,
typeName("S"),
withClause(typeName("M1")),
null);
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitComment() {
assertClone(Comment.createBlockComment(new Token[] {tokenFromString("/* comment */")}));
}
public void test_visitCommentReference() {
assertClone(new CommentReference(null, identifier("a")));
}
public void test_visitCompilationUnit_declaration() {
assertClone(compilationUnit(topLevelVariableDeclaration(Keyword.VAR, variableDeclaration("a"))));
}
public void test_visitCompilationUnit_directive() {
assertClone(compilationUnit(libraryDirective("l")));
}
public void test_visitCompilationUnit_directive_declaration() {
assertClone(compilationUnit(
list((Directive) libraryDirective("l")),
list((CompilationUnitMember) topLevelVariableDeclaration(
Keyword.VAR,
variableDeclaration("a")))));
}
public void test_visitCompilationUnit_empty() {
assertClone(compilationUnit());
}
public void test_visitCompilationUnit_script() {
assertClone(compilationUnit("!#/bin/dartvm"));
}
public void test_visitCompilationUnit_script_declaration() {
assertClone(compilationUnit(
"!#/bin/dartvm",
topLevelVariableDeclaration(Keyword.VAR, variableDeclaration("a"))));
}
public void test_visitCompilationUnit_script_directive() {
assertClone(compilationUnit("!#/bin/dartvm", libraryDirective("l")));
}
public void test_visitCompilationUnit_script_directives_declarations() {
assertClone(compilationUnit(
"!#/bin/dartvm",
list((Directive) libraryDirective("l")),
list((CompilationUnitMember) topLevelVariableDeclaration(
Keyword.VAR,
variableDeclaration("a")))));
}
public void test_visitConditionalExpression() {
assertClone(conditionalExpression(identifier("a"), identifier("b"), identifier("c")));
}
public void test_visitConstructorDeclaration_const() {
assertClone(constructorDeclaration(
Keyword.CONST,
null,
identifier("C"),
null,
formalParameterList(),
null,
blockFunctionBody()));
}
public void test_visitConstructorDeclaration_external() {
assertClone(constructorDeclaration(identifier("C"), null, formalParameterList(), null));
}
public void test_visitConstructorDeclaration_minimal() {
assertClone(constructorDeclaration(
null,
null,
identifier("C"),
null,
formalParameterList(),
null,
blockFunctionBody()));
}
public void test_visitConstructorDeclaration_multipleInitializers() {
assertClone(constructorDeclaration(
null,
null,
identifier("C"),
null,
formalParameterList(),
list(
(ConstructorInitializer) constructorFieldInitializer(false, "a", identifier("b")),
constructorFieldInitializer(false, "c", identifier("d"))),
blockFunctionBody()));
}
public void test_visitConstructorDeclaration_multipleParameters() {
assertClone(constructorDeclaration(
null,
null,
identifier("C"),
null,
formalParameterList(
simpleFormalParameter(Keyword.VAR, "a"),
simpleFormalParameter(Keyword.VAR, "b")),
null,
blockFunctionBody()));
}
public void test_visitConstructorDeclaration_named() {
assertClone(constructorDeclaration(
null,
null,
identifier("C"),
"m",
formalParameterList(),
null,
blockFunctionBody()));
}
public void test_visitConstructorDeclaration_singleInitializer() {
assertClone(constructorDeclaration(
null,
null,
identifier("C"),
null,
formalParameterList(),
list((ConstructorInitializer) constructorFieldInitializer(false, "a", identifier("b"))),
blockFunctionBody()));
}
public void test_visitConstructorDeclaration_withMetadata() {
ConstructorDeclaration declaration = constructorDeclaration(
null,
null,
identifier("C"),
null,
formalParameterList(),
null,
blockFunctionBody());
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitConstructorFieldInitializer_withoutThis() {
assertClone(constructorFieldInitializer(false, "a", identifier("b")));
}
public void test_visitConstructorFieldInitializer_withThis() {
assertClone(constructorFieldInitializer(true, "a", identifier("b")));
}
public void test_visitConstructorName_named_prefix() {
assertClone(constructorName(typeName("p.C.n"), null));
}
public void test_visitConstructorName_unnamed_noPrefix() {
assertClone(constructorName(typeName("C"), null));
}
public void test_visitConstructorName_unnamed_prefix() {
assertClone(constructorName(typeName(identifier("p", "C")), null));
}
public void test_visitContinueStatement_label() {
assertClone(continueStatement("l"));
}
public void test_visitContinueStatement_noLabel() {
assertClone(continueStatement());
}
public void test_visitDefaultFormalParameter_named_noValue() {
assertClone(namedFormalParameter(simpleFormalParameter("p"), null));
}
public void test_visitDefaultFormalParameter_named_value() {
assertClone(namedFormalParameter(simpleFormalParameter("p"), integer(0)));
}
public void test_visitDefaultFormalParameter_positional_noValue() {
assertClone(positionalFormalParameter(simpleFormalParameter("p"), null));
}
public void test_visitDefaultFormalParameter_positional_value() {
assertClone(positionalFormalParameter(simpleFormalParameter("p"), integer(0)));
}
public void test_visitDoStatement() {
assertClone(doStatement(block(), identifier("c")));
}
public void test_visitDoubleLiteral() {
assertClone(doubleLiteral(4.2));
}
public void test_visitEmptyFunctionBody() {
assertClone(emptyFunctionBody());
}
public void test_visitEmptyStatement() {
assertClone(emptyStatement());
}
public void test_visitExportDirective_combinator() {
assertClone(exportDirective("a.dart", (Combinator) showCombinator(identifier("A"))));
}
public void test_visitExportDirective_combinators() {
assertClone(exportDirective(
"a.dart",
showCombinator(identifier("A")),
hideCombinator(identifier("B"))));
}
public void test_visitExportDirective_minimal() {
assertClone(exportDirective("a.dart"));
}
public void test_visitExportDirective_withMetadata() {
ExportDirective directive = exportDirective("a.dart");
directive.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(directive);
}
public void test_visitExpressionFunctionBody() {
assertClone(expressionFunctionBody(identifier("a")));
}
public void test_visitExpressionStatement() {
assertClone(expressionStatement(identifier("a")));
}
public void test_visitExtendsClause() {
assertClone(extendsClause(typeName("C")));
}
public void test_visitFieldDeclaration_instance() {
assertClone(fieldDeclaration(false, Keyword.VAR, variableDeclaration("a")));
}
public void test_visitFieldDeclaration_static() {
assertClone(fieldDeclaration(true, Keyword.VAR, variableDeclaration("a")));
}
public void test_visitFieldDeclaration_withMetadata() {
FieldDeclaration declaration = fieldDeclaration(false, Keyword.VAR, variableDeclaration("a"));
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitFieldFormalParameter_functionTyped() {
assertClone(fieldFormalParameter(
null,
typeName("A"),
"a",
formalParameterList(simpleFormalParameter("b"))));
}
public void test_visitFieldFormalParameter_keyword() {
assertClone(fieldFormalParameter(Keyword.VAR, null, "a"));
}
public void test_visitFieldFormalParameter_keywordAndType() {
assertClone(fieldFormalParameter(Keyword.FINAL, typeName("A"), "a"));
}
public void test_visitFieldFormalParameter_type() {
assertClone(fieldFormalParameter(null, typeName("A"), "a"));
}
public void test_visitForEachStatement_declared() {
assertClone(forEachStatement(declaredIdentifier("a"), identifier("b"), block()));
}
public void test_visitForEachStatement_variable() {
assertClone(new ForEachStatement(
null,
tokenFromKeyword(Keyword.FOR),
tokenFromType(TokenType.OPEN_PAREN),
identifier("a"),
tokenFromKeyword(Keyword.IN),
identifier("b"),
tokenFromType(TokenType.CLOSE_PAREN),
block()));
}
public void test_visitForEachStatement_variable_await() {
assertClone(new ForEachStatement(
tokenFromString("await"),
tokenFromKeyword(Keyword.FOR),
tokenFromType(TokenType.OPEN_PAREN),
identifier("a"),
tokenFromKeyword(Keyword.IN),
identifier("b"),
tokenFromType(TokenType.CLOSE_PAREN),
block()));
}
public void test_visitFormalParameterList_empty() {
assertClone(formalParameterList());
}
public void test_visitFormalParameterList_n() {
assertClone(formalParameterList(namedFormalParameter(simpleFormalParameter("a"), integer(0L))));
}
public void test_visitFormalParameterList_nn() {
assertClone(formalParameterList(
namedFormalParameter(simpleFormalParameter("a"), integer(0L)),
namedFormalParameter(simpleFormalParameter("b"), integer(1L))));
}
public void test_visitFormalParameterList_p() {
assertClone(formalParameterList(positionalFormalParameter(
simpleFormalParameter("a"),
integer(0L))));
}
public void test_visitFormalParameterList_pp() {
assertClone(formalParameterList(
positionalFormalParameter(simpleFormalParameter("a"), integer(0L)),
positionalFormalParameter(simpleFormalParameter("b"), integer(1L))));
}
public void test_visitFormalParameterList_r() {
assertClone(formalParameterList(simpleFormalParameter("a")));
}
public void test_visitFormalParameterList_rn() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
namedFormalParameter(simpleFormalParameter("b"), integer(1L))));
}
public void test_visitFormalParameterList_rnn() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
namedFormalParameter(simpleFormalParameter("b"), integer(1L)),
namedFormalParameter(simpleFormalParameter("c"), integer(2L))));
}
public void test_visitFormalParameterList_rp() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
positionalFormalParameter(simpleFormalParameter("b"), integer(1L))));
}
public void test_visitFormalParameterList_rpp() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
positionalFormalParameter(simpleFormalParameter("b"), integer(1L)),
positionalFormalParameter(simpleFormalParameter("c"), integer(2L))));
}
public void test_visitFormalParameterList_rr() {
assertClone(formalParameterList(simpleFormalParameter("a"), simpleFormalParameter("b")));
}
public void test_visitFormalParameterList_rrn() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
simpleFormalParameter("b"),
namedFormalParameter(simpleFormalParameter("c"), integer(3L))));
}
public void test_visitFormalParameterList_rrnn() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
simpleFormalParameter("b"),
namedFormalParameter(simpleFormalParameter("c"), integer(3L)),
namedFormalParameter(simpleFormalParameter("d"), integer(4L))));
}
public void test_visitFormalParameterList_rrp() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
simpleFormalParameter("b"),
positionalFormalParameter(simpleFormalParameter("c"), integer(3L))));
}
public void test_visitFormalParameterList_rrpp() {
assertClone(formalParameterList(
simpleFormalParameter("a"),
simpleFormalParameter("b"),
positionalFormalParameter(simpleFormalParameter("c"), integer(3L)),
positionalFormalParameter(simpleFormalParameter("d"), integer(4L))));
}
public void test_visitForStatement_c() {
assertClone(forStatement((Expression) null, identifier("c"), null, block()));
}
public void test_visitForStatement_cu() {
assertClone(forStatement(
(Expression) null,
identifier("c"),
list((Expression) identifier("u")),
block()));
}
public void test_visitForStatement_e() {
assertClone(forStatement(identifier("e"), null, null, block()));
}
public void test_visitForStatement_ec() {
assertClone(forStatement(identifier("e"), identifier("c"), null, block()));
}
public void test_visitForStatement_ecu() {
assertClone(forStatement(
identifier("e"),
identifier("c"),
list((Expression) identifier("u")),
block()));
}
public void test_visitForStatement_eu() {
assertClone(forStatement(identifier("e"), null, list((Expression) identifier("u")), block()));
}
public void test_visitForStatement_i() {
assertClone(forStatement(
variableDeclarationList(Keyword.VAR, variableDeclaration("i")),
null,
null,
block()));
}
public void test_visitForStatement_ic() {
assertClone(forStatement(
variableDeclarationList(Keyword.VAR, variableDeclaration("i")),
identifier("c"),
null,
block()));
}
public void test_visitForStatement_icu() {
assertClone(forStatement(
variableDeclarationList(Keyword.VAR, variableDeclaration("i")),
identifier("c"),
list((Expression) identifier("u")),
block()));
}
public void test_visitForStatement_iu() {
assertClone(forStatement(
variableDeclarationList(Keyword.VAR, variableDeclaration("i")),
null,
list((Expression) identifier("u")),
block()));
}
public void test_visitForStatement_u() {
assertClone(forStatement((Expression) null, null, list((Expression) identifier("u")), block()));
}
public void test_visitFunctionDeclaration_getter() {
assertClone(functionDeclaration(null, Keyword.GET, "f", functionExpression()));
}
public void test_visitFunctionDeclaration_normal() {
assertClone(functionDeclaration(null, null, "f", functionExpression()));
}
public void test_visitFunctionDeclaration_setter() {
assertClone(functionDeclaration(null, Keyword.SET, "f", functionExpression()));
}
public void test_visitFunctionDeclaration_withMetadata() {
FunctionDeclaration declaration = functionDeclaration(null, null, "f", functionExpression());
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitFunctionDeclarationStatement() {
assertClone(functionDeclarationStatement(null, null, "f", functionExpression()));
}
public void test_visitFunctionExpression() {
assertClone(functionExpression());
}
public void test_visitFunctionExpressionInvocation() {
assertClone(functionExpressionInvocation(identifier("f")));
}
public void test_visitFunctionTypeAlias_generic() {
assertClone(typeAlias(typeName("A"), "F", typeParameterList("B"), formalParameterList()));
}
public void test_visitFunctionTypeAlias_nonGeneric() {
assertClone(typeAlias(typeName("A"), "F", null, formalParameterList()));
}
public void test_visitFunctionTypeAlias_withMetadata() {
FunctionTypeAlias declaration = typeAlias(typeName("A"), "F", null, formalParameterList());
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitFunctionTypedFormalParameter_noType() {
assertClone(functionTypedFormalParameter(null, "f"));
}
public void test_visitFunctionTypedFormalParameter_type() {
assertClone(functionTypedFormalParameter(typeName("T"), "f"));
}
public void test_visitIfStatement_withElse() {
assertClone(ifStatement(identifier("c"), block(), block()));
}
public void test_visitIfStatement_withoutElse() {
assertClone(ifStatement(identifier("c"), block()));
}
public void test_visitImplementsClause_multiple() {
assertClone(implementsClause(typeName("A"), typeName("B")));
}
public void test_visitImplementsClause_single() {
assertClone(implementsClause(typeName("A")));
}
public void test_visitImportDirective_combinator() {
assertClone(importDirective("a.dart", null, showCombinator(identifier("A"))));
}
public void test_visitImportDirective_combinators() {
assertClone(importDirective(
"a.dart",
null,
showCombinator(identifier("A")),
hideCombinator(identifier("B"))));
}
public void test_visitImportDirective_minimal() {
assertClone(importDirective("a.dart", null));
}
public void test_visitImportDirective_prefix() {
assertClone(importDirective("a.dart", "p"));
}
public void test_visitImportDirective_prefix_combinator() {
assertClone(importDirective("a.dart", "p", showCombinator(identifier("A"))));
}
public void test_visitImportDirective_prefix_combinators() {
assertClone(importDirective(
"a.dart",
"p",
showCombinator(identifier("A")),
hideCombinator(identifier("B"))));
}
public void test_visitImportDirective_withMetadata() {
ImportDirective directive = importDirective("a.dart", null);
directive.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(directive);
}
public void test_visitImportHideCombinator_multiple() {
assertClone(hideCombinator(identifier("a"), identifier("b")));
}
public void test_visitImportHideCombinator_single() {
assertClone(hideCombinator(identifier("a")));
}
public void test_visitImportShowCombinator_multiple() {
assertClone(showCombinator(identifier("a"), identifier("b")));
}
public void test_visitImportShowCombinator_single() {
assertClone(showCombinator(identifier("a")));
}
public void test_visitIndexExpression() {
assertClone(indexExpression(identifier("a"), identifier("i")));
}
public void test_visitInstanceCreationExpression_const() {
assertClone(instanceCreationExpression(Keyword.CONST, typeName("C")));
}
public void test_visitInstanceCreationExpression_named() {
assertClone(instanceCreationExpression(Keyword.NEW, typeName("C"), "c"));
}
public void test_visitInstanceCreationExpression_unnamed() {
assertClone(instanceCreationExpression(Keyword.NEW, typeName("C")));
}
public void test_visitIntegerLiteral() {
assertClone(integer(42L));
}
public void test_visitInterpolationExpression_expression() {
assertClone(interpolationExpression(identifier("a")));
}
public void test_visitInterpolationExpression_identifier() {
assertClone(interpolationExpression("a"));
}
public void test_visitInterpolationString() {
assertClone(interpolationString("'x", "x"));
}
public void test_visitIsExpression_negated() {
assertClone(isExpression(identifier("a"), true, typeName("C")));
}
public void test_visitIsExpression_normal() {
assertClone(isExpression(identifier("a"), false, typeName("C")));
}
public void test_visitLabel() {
assertClone(label("a"));
}
public void test_visitLabeledStatement_multiple() {
assertClone(labeledStatement(list(label("a"), label("b")), returnStatement()));
}
public void test_visitLabeledStatement_single() {
assertClone(labeledStatement(list(label("a")), returnStatement()));
}
public void test_visitLibraryDirective() {
assertClone(libraryDirective("l"));
}
public void test_visitLibraryDirective_withMetadata() {
LibraryDirective directive = libraryDirective("l");
directive.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(directive);
}
public void test_visitLibraryIdentifier_multiple() {
assertClone(libraryIdentifier(identifier("a"), identifier("b"), identifier("c")));
}
public void test_visitLibraryIdentifier_single() {
assertClone(libraryIdentifier(identifier("a")));
}
public void test_visitListLiteral_const() {
assertClone(listLiteral(Keyword.CONST, null));
}
public void test_visitListLiteral_empty() {
assertClone(listLiteral());
}
public void test_visitListLiteral_nonEmpty() {
assertClone(listLiteral(identifier("a"), identifier("b"), identifier("c")));
}
public void test_visitMapLiteral_const() {
assertClone(mapLiteral(Keyword.CONST, null));
}
public void test_visitMapLiteral_empty() {
assertClone(mapLiteral());
}
public void test_visitMapLiteral_nonEmpty() {
assertClone(mapLiteral(
mapLiteralEntry("a", identifier("a")),
mapLiteralEntry("b", identifier("b")),
mapLiteralEntry("c", identifier("c"))));
}
public void test_visitMapLiteralEntry() {
assertClone(mapLiteralEntry("a", identifier("b")));
}
public void test_visitMethodDeclaration_external() {
assertClone(methodDeclaration(null, null, null, null, identifier("m"), formalParameterList()));
}
public void test_visitMethodDeclaration_external_returnType() {
assertClone(methodDeclaration(
null,
typeName("T"),
null,
null,
identifier("m"),
formalParameterList()));
}
public void test_visitMethodDeclaration_getter() {
assertClone(methodDeclaration(
null,
null,
Keyword.GET,
null,
identifier("m"),
null,
blockFunctionBody()));
}
public void test_visitMethodDeclaration_getter_returnType() {
assertClone(methodDeclaration(
null,
typeName("T"),
Keyword.GET,
null,
identifier("m"),
null,
blockFunctionBody()));
}
public void test_visitMethodDeclaration_getter_seturnType() {
assertClone(methodDeclaration(
null,
typeName("T"),
Keyword.SET,
null,
identifier("m"),
formalParameterList(simpleFormalParameter(Keyword.VAR, "v")),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_minimal() {
assertClone(methodDeclaration(
null,
null,
null,
null,
identifier("m"),
formalParameterList(),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_multipleParameters() {
assertClone(methodDeclaration(
null,
null,
null,
null,
identifier("m"),
formalParameterList(
simpleFormalParameter(Keyword.VAR, "a"),
simpleFormalParameter(Keyword.VAR, "b")),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_operator() {
assertClone(methodDeclaration(
null,
null,
null,
Keyword.OPERATOR,
identifier("+"),
formalParameterList(),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_operator_returnType() {
assertClone(methodDeclaration(
null,
typeName("T"),
null,
Keyword.OPERATOR,
identifier("+"),
formalParameterList(),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_returnType() {
assertClone(methodDeclaration(
null,
typeName("T"),
null,
null,
identifier("m"),
formalParameterList(),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_setter() {
assertClone(methodDeclaration(
null,
null,
Keyword.SET,
null,
identifier("m"),
formalParameterList(simpleFormalParameter(Keyword.VAR, "v")),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_static() {
assertClone(methodDeclaration(
Keyword.STATIC,
null,
null,
null,
identifier("m"),
formalParameterList(),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_static_returnType() {
assertClone(methodDeclaration(
Keyword.STATIC,
typeName("T"),
null,
null,
identifier("m"),
formalParameterList(),
blockFunctionBody()));
}
public void test_visitMethodDeclaration_withMetadata() {
MethodDeclaration declaration = methodDeclaration(
null,
null,
null,
null,
identifier("m"),
formalParameterList(),
blockFunctionBody());
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitMethodInvocation_noTarget() {
assertClone(methodInvocation("m"));
}
public void test_visitMethodInvocation_target() {
assertClone(methodInvocation(identifier("t"), "m"));
}
public void test_visitNamedExpression() {
assertClone(namedExpression("a", identifier("b")));
}
public void test_visitNamedFormalParameter() {
assertClone(namedFormalParameter(simpleFormalParameter(Keyword.VAR, "a"), integer(0L)));
}
public void test_visitNativeClause() {
assertClone(nativeClause("code"));
}
public void test_visitNativeFunctionBody() {
assertClone(nativeFunctionBody("str"));
}
public void test_visitNullLiteral() {
assertClone(nullLiteral());
}
public void test_visitParenthesizedExpression() {
assertClone(parenthesizedExpression(identifier("a")));
}
public void test_visitPartDirective() {
assertClone(partDirective("a.dart"));
}
public void test_visitPartDirective_withMetadata() {
PartDirective directive = partDirective("a.dart");
directive.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(directive);
}
public void test_visitPartOfDirective() {
assertClone(partOfDirective(libraryIdentifier("l")));
}
public void test_visitPartOfDirective_withMetadata() {
PartOfDirective directive = partOfDirective(libraryIdentifier("l"));
directive.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(directive);
}
public void test_visitPositionalFormalParameter() {
assertClone(positionalFormalParameter(simpleFormalParameter(Keyword.VAR, "a"), integer(0L)));
}
public void test_visitPostfixExpression() {
assertClone(postfixExpression(identifier("a"), TokenType.PLUS_PLUS));
}
public void test_visitPrefixedIdentifier() {
assertClone(identifier("a", "b"));
}
public void test_visitPrefixExpression() {
assertClone(prefixExpression(TokenType.MINUS, identifier("a")));
}
public void test_visitPropertyAccess() {
assertClone(propertyAccess(identifier("a"), "b"));
}
public void test_visitRedirectingConstructorInvocation_named() {
assertClone(redirectingConstructorInvocation("c"));
}
public void test_visitRedirectingConstructorInvocation_unnamed() {
assertClone(redirectingConstructorInvocation());
}
public void test_visitRethrowExpression() {
assertClone(rethrowExpression());
}
public void test_visitReturnStatement_expression() {
assertClone(returnStatement(identifier("a")));
}
public void test_visitReturnStatement_noExpression() {
assertClone(returnStatement());
}
public void test_visitScriptTag() {
String scriptTag = "!#/bin/dart.exe";
assertClone(scriptTag(scriptTag));
}
public void test_visitSimpleFormalParameter_keyword() {
assertClone(simpleFormalParameter(Keyword.VAR, "a"));
}
public void test_visitSimpleFormalParameter_keyword_type() {
assertClone(simpleFormalParameter(Keyword.FINAL, typeName("A"), "a"));
}
public void test_visitSimpleFormalParameter_type() {
assertClone(simpleFormalParameter(typeName("A"), "a"));
}
public void test_visitSimpleIdentifier() {
assertClone(identifier("a"));
}
public void test_visitSimpleStringLiteral() {
assertClone(string("a"));
}
public void test_visitStringInterpolation() {
assertClone(string(
interpolationString("'a", "a"),
interpolationExpression(identifier("e")),
interpolationString("b'", "b")));
}
public void test_visitSuperConstructorInvocation() {
assertClone(superConstructorInvocation());
}
public void test_visitSuperConstructorInvocation_named() {
assertClone(superConstructorInvocation("c"));
}
public void test_visitSuperExpression() {
assertClone(superExpression());
}
public void test_visitSwitchCase_multipleLabels() {
assertClone(switchCase(list(label("l1"), label("l2")), identifier("a"), block()));
}
public void test_visitSwitchCase_multipleStatements() {
assertClone(switchCase(identifier("a"), block(), block()));
}
public void test_visitSwitchCase_noLabels() {
assertClone(switchCase(identifier("a"), block()));
}
public void test_visitSwitchCase_singleLabel() {
assertClone(switchCase(list(label("l1")), identifier("a"), block()));
}
public void test_visitSwitchDefault_multipleLabels() {
assertClone(switchDefault(list(label("l1"), label("l2")), block()));
}
public void test_visitSwitchDefault_multipleStatements() {
assertClone(switchDefault(block(), block()));
}
public void test_visitSwitchDefault_noLabels() {
assertClone(switchDefault(block()));
}
public void test_visitSwitchDefault_singleLabel() {
assertClone(switchDefault(list(label("l1")), block()));
}
public void test_visitSwitchStatement() {
assertClone(switchStatement(
identifier("a"),
switchCase(string("b"), block()),
switchDefault(block())));
}
public void test_visitSymbolLiteral_multiple() {
assertClone(symbolLiteral("a", "b", "c"));
}
public void test_visitSymbolLiteral_single() {
assertClone(symbolLiteral("a"));
}
public void test_visitThisExpression() {
assertClone(thisExpression());
}
public void test_visitThrowStatement() {
assertClone(throwExpression(identifier("e")));
}
public void test_visitTopLevelVariableDeclaration_multiple() {
assertClone(topLevelVariableDeclaration(Keyword.VAR, variableDeclaration("a")));
}
public void test_visitTopLevelVariableDeclaration_single() {
assertClone(topLevelVariableDeclaration(
Keyword.VAR,
variableDeclaration("a"),
variableDeclaration("b")));
}
public void test_visitTryStatement_catch() {
assertClone(tryStatement(block(), catchClause(typeName("E"))));
}
public void test_visitTryStatement_catches() {
assertClone(tryStatement(block(), catchClause(typeName("E")), catchClause(typeName("F"))));
}
public void test_visitTryStatement_catchFinally() {
assertClone(tryStatement(block(), list(catchClause(typeName("E"))), block()));
}
public void test_visitTryStatement_finally() {
assertClone(tryStatement(block(), block()));
}
public void test_visitTypeArgumentList_multiple() {
assertClone(typeArgumentList(typeName("E"), typeName("F")));
}
public void test_visitTypeArgumentList_single() {
assertClone(typeArgumentList(typeName("E")));
}
public void test_visitTypeName_multipleArgs() {
assertClone(typeName("C", typeName("D"), typeName("E")));
}
public void test_visitTypeName_nestedArg() {
assertClone(typeName("C", typeName("D", typeName("E"))));
}
public void test_visitTypeName_noArgs() {
assertClone(typeName("C"));
}
public void test_visitTypeName_singleArg() {
assertClone(typeName("C", typeName("D")));
}
public void test_visitTypeParameter_withExtends() {
assertClone(typeParameter("E", typeName("C")));
}
public void test_visitTypeParameter_withMetadata() {
TypeParameter parameter = typeParameter("E");
parameter.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(parameter);
}
public void test_visitTypeParameter_withoutExtends() {
assertClone(typeParameter("E"));
}
public void test_visitTypeParameterList_multiple() {
assertClone(typeParameterList("E", "F"));
}
public void test_visitTypeParameterList_single() {
assertClone(typeParameterList("E"));
}
public void test_visitVariableDeclaration_initialized() {
assertClone(variableDeclaration("a", identifier("b")));
}
public void test_visitVariableDeclaration_uninitialized() {
assertClone(variableDeclaration("a"));
}
public void test_visitVariableDeclaration_withMetadata() {
VariableDeclaration declaration = variableDeclaration("a");
declaration.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declaration);
}
public void test_visitVariableDeclarationList_const_type() {
assertClone(variableDeclarationList(
Keyword.CONST,
typeName("C"),
variableDeclaration("a"),
variableDeclaration("b")));
}
public void test_visitVariableDeclarationList_final_noType() {
assertClone(variableDeclarationList(
Keyword.FINAL,
variableDeclaration("a"),
variableDeclaration("b")));
}
public void test_visitVariableDeclarationList_final_withMetadata() {
VariableDeclarationList declarationList = variableDeclarationList(
Keyword.FINAL,
variableDeclaration("a"),
variableDeclaration("b"));
declarationList.setMetadata(list(annotation(identifier("deprecated"))));
assertClone(declarationList);
}
public void test_visitVariableDeclarationList_type() {
assertClone(variableDeclarationList(
null,
typeName("C"),
variableDeclaration("a"),
variableDeclaration("b")));
}
public void test_visitVariableDeclarationList_var() {
assertClone(variableDeclarationList(
Keyword.VAR,
variableDeclaration("a"),
variableDeclaration("b")));
}
public void test_visitVariableDeclarationStatement() {
assertClone(variableDeclarationStatement(null, typeName("C"), variableDeclaration("c")));
}
public void test_visitWhileStatement() {
assertClone(whileStatement(identifier("c"), block()));
}
public void test_visitWithClause_multiple() {
assertClone(withClause(typeName("A"), typeName("B"), typeName("C")));
}
public void test_visitWithClause_single() {
assertClone(withClause(typeName("A")));
}
public void test_visitYieldStatement() {
assertClone(yieldStatement(identifier("A")));
}
/**
* Assert that an {@code AstCloner} will produce the expected ASt structure when visiting the
* given node.
*
* @param node the AST node being visited to produce the cloned structure
* @throws AFE if the visitor does not produce the expected source for the given node
*/
private void assertClone(AstNode node) {
AstNode clone = node.accept(new AstCloner());
if (!AstComparator.equalNodes(node, clone)) {
fail("Failed to clone " + node.getClass().getSimpleName());
}
}
}