blob: 2f2bb957d4a7332e3dd5b1d5a1c7156c67c7d067 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 xored software, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.javascript.parser.tests;
import java.util.List;
import org.eclipse.dltk.ast.utils.ASTUtil;
import org.eclipse.dltk.compiler.problem.IProblem;
import org.eclipse.dltk.core.tests.util.StringList;
import org.eclipse.dltk.javascript.ast.FunctionStatement;
import org.eclipse.dltk.javascript.ast.Script;
import org.eclipse.dltk.javascript.parser.JavaScriptParserProblems;
public class ErrorReportingTests extends AbstractJSParserTest {
public void test1() {
parseRaw("a.");
assertTrue(reporter.hasErrors());
final List<IProblem> errors = reporter.getErrors();
assertEquals(1, errors.size());
assertEquals("missing name after . operator", errors.get(0)
.getMessage());
}
public void testNotFinishedComment() {
StringList code = new StringList();
code.add("function a() {}");
code.add("/* not finished comment");
code.add("function b() {}");
Script script = parseRaw(code.toString());
assertTrue(reporter.hasErrors());
assertTrue(ASTUtil.select(script, FunctionStatement.class).size() > 0);
}
public void testMisplacedDiv() {
StringList code = new StringList();
code.add("function a() {}");
code.add("/");
code.add("function b() {}");
Script script = parseRaw(code.toString());
assertTrue(reporter.hasErrors());
assertTrue(ASTUtil.select(script, FunctionStatement.class).size() > 0);
}
public void testMisplacedMul() {
StringList code = new StringList();
code.add("function a() {}");
code.add("***");
code.add("function b() {}");
Script script = parseRaw(code.toString());
assertTrue(reporter.hasErrors());
assertTrue(ASTUtil.select(script, FunctionStatement.class).size() > 0);
}
public void testNotFinishedStringLiteral() {
StringList code = new StringList();
code.add("function a() {}");
code.add("\"");
code.add("function b() {}");
Script script = parseRaw(code.toString());
assertTrue(reporter.hasErrors());
assertTrue(ASTUtil.select(script, FunctionStatement.class).size() > 0);
}
public void testNotFinishedCall() {
StringList code = new StringList();
code.add("function test(event) {");
code.add("application.output(e");
code.add("}");
Script script = parseRaw(code.toString());
assertTrue(reporter.hasErrors());
assertEquals(JavaScriptParserProblems.SYNTAX_ERROR, getProblemId());
assertTrue(ASTUtil.select(script, FunctionStatement.class).size() > 0);
}
public void testNoArrayIndex() {
parseRaw("var x = a[]");
assertTrue(reporter.hasErrors());
assertEquals(1, reporter.getProblems().size());
}
public void testEmptyParentheses() {
parseRaw("var x = x * ()");
assertTrue(reporter.hasErrors());
assertEquals(1, reporter.getProblems().size());
}
public void testNotFinishedConditionalOperator() {
parse("var x = x ? 0:");
assertEquals(1, reporter.getProblems().size());
assertEquals(JavaScriptParserProblems.SYNTAX_ERROR, getProblemId());
parse("var x = x ? 0:;");
assertEquals(1, reporter.getProblems().size());
assertEquals(JavaScriptParserProblems.SYNTAX_ERROR, getProblemId());
}
public void testLabelledFunctionExpression() {
parse("L: function() {}");
assertEquals(1, reporter.getProblems().size());
assertEquals(JavaScriptParserProblems.SYNTAX_ERROR, getProblemId());
}
}