/******************************************************************************* * 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.javascript.ast.CallExpression; import org.eclipse.dltk.javascript.ast.Expression; import org.eclipse.dltk.javascript.ast.Identifier; import org.eclipse.dltk.javascript.ast.NewExpression; import org.eclipse.dltk.javascript.ast.PropertyExpression; import org.eclipse.dltk.javascript.ast.Script; import org.eclipse.dltk.javascript.ast.VariableDeclaration; import org.eclipse.dltk.javascript.parser.PropertyExpressionUtils; public class NewTests extends AbstractJSParserTest { public void testNewIdentifier() { Script script = parse("var x = new a()"); assertFalse(reporter.hasErrors()); VariableDeclaration var = uniqueResult(ASTUtil.select(script, VariableDeclaration.class)); NewExpression newExpr = (NewExpression) var.getInitializer(); CallExpression call = (CallExpression) newExpr.getObjectClass(); assertEquals("a", PropertyExpressionUtils.getPath(call.getExpression())); assertTrue(PropertyExpressionUtils.equals(call.getExpression(), "a")); assertIdentifier("a", call.getExpression()); } public void testNewPath2() { Script script = parse("var x = new a.b()"); assertFalse(reporter.hasErrors()); VariableDeclaration var = uniqueResult(ASTUtil.select(script, VariableDeclaration.class)); NewExpression newExpr = (NewExpression) var.getInitializer(); CallExpression call = (CallExpression) newExpr.getObjectClass(); assertEquals("a.b", PropertyExpressionUtils.getPath(call.getExpression())); assertTrue(PropertyExpressionUtils.equals(call.getExpression(), "a", "b")); PropertyExpression property = (PropertyExpression) call.getExpression(); assertIdentifier("a", property.getObject()); assertIdentifier("b", property.getProperty()); final List<Expression> path = property.getPath(); assertEquals(2, path.size()); assertIdentifier("a", path.get(0)); assertIdentifier("b", path.get(1)); } public void testNewPath3() { Script script = parse("var x = new a.b.c()"); assertFalse(reporter.hasErrors()); VariableDeclaration var = uniqueResult(ASTUtil.select(script, VariableDeclaration.class)); NewExpression newExpr = (NewExpression) var.getInitializer(); CallExpression call = (CallExpression) newExpr.getObjectClass(); assertEquals("a.b.c", PropertyExpressionUtils.getPath(call.getExpression())); assertTrue(PropertyExpressionUtils.equals(call.getExpression(), "a", "b", "c")); final List<Identifier> identifiers = PropertyExpressionUtils .getIdentifiers((PropertyExpression) call.getExpression()); assertEquals(3, identifiers.size()); assertIdentifier("a", identifiers.get(0)); assertIdentifier("b", identifiers.get(1)); assertIdentifier("c", identifiers.get(2)); PropertyExpression property = (PropertyExpression) call.getExpression(); PropertyExpression property2 = (PropertyExpression) property .getObject(); assertIdentifier("a", property2.getObject()); assertIdentifier("b", property2.getProperty()); assertIdentifier("c", property.getProperty()); final List<Expression> path = property.getPath(); assertEquals(3, path.size()); assertIdentifier("a", path.get(0)); assertIdentifier("b", path.get(1)); assertIdentifier("c", path.get(2)); } public void testNewNew() { Script script = parse("var x = new new A()()"); assertFalse(reporter.hasErrors()); VariableDeclaration var = uniqueResult(ASTUtil.select(script, VariableDeclaration.class)); NewExpression newExpr1 = (NewExpression) var.getInitializer(); CallExpression call1 = (CallExpression) newExpr1.getObjectClass(); NewExpression new2 = (NewExpression) call1.getExpression(); CallExpression call2 = (CallExpression) new2.getObjectClass(); assertIdentifier("A", call2.getExpression()); } }