blob: 5960da861ed53faf3c7e58f5f82278e544625373 [file] [log] [blame]
// Copyright (c) 2011, 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.
package com.google.dart.compiler.parser;
import com.google.dart.compiler.ast.DartBinaryExpression;
import com.google.dart.compiler.ast.DartClass;
import com.google.dart.compiler.ast.DartExprStmt;
import com.google.dart.compiler.ast.DartExpression;
import com.google.dart.compiler.ast.DartMethodDefinition;
import com.google.dart.compiler.ast.DartNode;
import com.google.dart.compiler.ast.DartStatement;
import com.google.dart.compiler.ast.DartStringLiteral;
import com.google.dart.compiler.ast.DartUnit;
import com.google.dart.compiler.ast.DartVariableStatement;
import java.util.List;
/**
* Tests for the parser, which simply assert that valid source units parse
* correctly. All tests invoking {@link #parseUnit} are designed such that they
* will throw an exception if anything goes wrong in the parser.
*/
public class ValidatingSyntaxTest extends AbstractParserTest {
@Override
public void testStrings() {
DartUnit unit = parseUnit("Strings.dart");
// Inspect the first method and check that the strings were
// parsed correctly
List<DartNode> nodes = unit.getTopLevelNodes();
assertEquals(1, nodes.size());
DartClass clazz = (DartClass) nodes.get(0);
List<DartNode> members = clazz.getMembers();
assertEquals(1, members.size());
DartMethodDefinition m = (DartMethodDefinition) members.get(0);
assertEquals("method", m.getName().toString());
List<DartStatement> body = m.getFunction().getBody().getStatements();
String[] expectedStrings = new String[] {
"a simple constant",
"a simple constant",
"an escaped quote \".",
"an escaped quote \'.",
"a new \n line",
"a new \n line",
" multiline 1\n multiline 2\n ",
" multiline 1\n multiline 2\n ",
"multiline 1\n multiline 2\n ",
"multiline 1\n multiline 2\n "};
assertEquals(expectedStrings.length + 1, body.size());
assertTrue(body.get(0) instanceof DartVariableStatement);
for (int i = 0; i < expectedStrings.length; i++) {
DartStatement s = body.get(i + 1);
assertTrue(s instanceof DartExprStmt);
DartExprStmt es = (DartExprStmt) s;
DartExpression e = es.getExpression();
assertTrue(e instanceof DartBinaryExpression);
e = ((DartBinaryExpression) e).getArg2();
assertTrue(e instanceof DartStringLiteral);
assertEquals(expectedStrings[i], ((DartStringLiteral) e).getValue());
}
}
@Override
public void testStringsErrors() {
parseUnitErrors("StringsErrorsNegativeTest.dart",
"Unexpected token 'ILLEGAL'", 7, 13,
"Unexpected token 'ILLEGAL'", 9, 9,
"Unexpected token 'ILLEGAL'", 11, 9);
}
@Override
protected DartUnit parseUnit(String srcName, String sourceCode, Object... errors) {
if (errors.length > 0) {
throw new RuntimeException("Expected errors not implemented");
}
return validateUnit(super.parseUnit(srcName, sourceCode));
}
private DartUnit validateUnit(DartUnit unit) {
DartASTValidator validator = new DartASTValidator();
unit.accept(validator);
validator.assertValid();
return unit;
}
@Override
public void testTiming() {
// Ignored.
}
}