/******************************************************************************* * Copyright (c) 2009, 2014 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation * Zend Technologies * Dawid PakuĊ‚a - convert to JUnit4 *******************************************************************************/ package org.eclipse.php.internal.core.ast.locator; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.eclipse.php.core.ast.nodes.ASTNode; import org.eclipse.php.core.ast.nodes.FunctionDeclaration; import org.eclipse.php.core.ast.nodes.Program; import org.eclipse.php.core.ast.nodes.TypeDeclaration; import org.junit.Test; public class PhpElementConciliatorTest extends AbstractConciliatorTest { @Test public void concileClassName() { setFileContent("<?php class TestRenameClass{}?>"); Program program = createProgram(file); assertNotNull(program); // select the class name. int start = 13; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); // select the class declaration start = 7; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); } @Test public void concileClassName1() { setFileContent("<?php class TestRenameClass{} class TestExtendedClass extends TestRenameClass{}?>"); Program program = createProgram(file); assertNotNull(program); // select the class name. int start = 63; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); } @Test public void concileClassName2() { setFileContent( "<?php class A{function foo(){}} class B{function bar(){}} $a = new A();$a->foo(); A::foo(); $b = new B();$b->bar();B::bar();?>"); Program program = createProgram(file); assertNotNull(program); // select the class name. int start = 68; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); start = 83; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); } @Test public void concileInterface() { setFileContent("<?php interface iTemplate{public function setVariable($name, $var);}?>"); Program program = createProgram(file); assertNotNull(program); // select the class name. int start = 6; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); // select the class declaration start = 17; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); } @Test public void concileInterface1() { setFileContent( "<?php interface iTemplate{public function setVariable($name, $var);} class Template implements iTemplate{ public function setVariable($name, $var){}}?>"); Program program = createProgram(file); assertNotNull(program); // select the class name. int start = 6; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); // select the class declaration start = 96; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASSNAME, PHPElementConciliator.concile(selectedNode)); } @Test public void concileProgram() { setFileContent("<?php class TestRenameClass{}?>"); Program program = createProgram(file); assertNotNull(program); assertEquals(PHPElementConciliator.CONCILIATOR_PROGRAM, PHPElementConciliator.concile(program)); } @Test public void concileGlobalVar() { setFileContent("<?php $a = 1; function test(){ global $a; echo $a;} ?>"); Program program = createProgram(file); assertNotNull(program); // select the variable declaration. int start = 7; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_GLOBAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); // select the 'global $a' start = 41; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_GLOBAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); // select the 'echo $a' start = 50; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_GLOBAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); } @Test public void concileGlobalVar1() { setFileContent("<?php $a = 1; function test(){ echo $GLOBALS['a'];} ?>"); Program program = createProgram(file); assertNotNull(program); int start = 48; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_GLOBAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); } @Test public void concileGlobalVar2() { setFileContent("<?php $a = 1; function test(){ global $a; echo $a;} ?>"); Program program = createProgram(file); assertNotNull(program); // select the variable declaration. int start = 41; ASTNode selectedNode = locateNode(program, start, 0); selectedNode = selectedNode.getParent(); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_GLOBAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); } @Test public void concileFunc() { setFileContent("<?php $a = 1; function test(){ echo $GLOBALS['a'];} ?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 16; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_FUNCTION, PHPElementConciliator.concile(selectedNode)); // selection the function name. start = 25; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_FUNCTION, PHPElementConciliator.concile(selectedNode)); } @Test public void concileFunc1() { setFileContent("<?php function a($n){return ($n * $n);}echo a(5);?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 45; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_FUNCTION, PHPElementConciliator.concile(selectedNode)); } @Test public void concileMethod1() { setFileContent( "<?class foo {public static function bar(){return 'bar in a class called';}}$strFN2 = foo::bar;echo bar();?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 91; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileMethod2() { setFileContent( "<?class foo {public function bar(){return 'bar in a class called';}}$strFN2 = new foo(); $strFN2->bar()?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 99; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileMethod3() { setFileContent( "<?class foo {public function bar(){return 'bar in a class called';} public function f(){$this->bar();}}?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 96; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileMethod4() { setFileContent( "<?class foo {public function bar(){return 'bar in a class called';} public function f(){$this->bar();}}?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 30; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileField1() { setFileContent("<?class foo {var $f; public function f(){$this->$f;}}?>"); Program program = createProgram(file); assertNotNull(program); // int start = 14; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); start = 45; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileField2() { setFileContent("<?class foo {var $f; public function f(){$this->$f;}} $cls= new foo(); $cls->f;?>"); Program program = createProgram(file); assertNotNull(program); // int start = 78; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileField3() { setFileContent("<?class foo {var $f; public function f(){$this->$f;}} $cls= new foo(); $cls->f;?>"); Program program = createProgram(file); assertNotNull(program); // int start = 18; ASTNode selectedNode = locateNode(program, start, 0); selectedNode = selectedNode.getParent(); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void concileStaticField1() { setFileContent("<?class foo {public static $my_static = 'foo';} echo Foo::$my_static; echo $foo->my_static?>"); Program program = createProgram(file); assertNotNull(program); // int start = 28; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); start = 59; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); start = 82; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CLASS_MEMBER, PHPElementConciliator.concile(selectedNode)); } @Test public void localVar() { setFileContent("<? $x = 4; function assignx () {$x = 0; echo $x;} ?>"); Program program = createProgram(file); assertNotNull(program); // select 'echo $x' int start = 46; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_LOCAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); // declaration start = 33; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_LOCAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); } @Test public void localVar1() { setFileContent("<? $x = 4; function assignx () {$x = 0; echo $x;} ?>"); Program program = createProgram(file); assertNotNull(program); // select 'echo $x' int start = 33; ASTNode selectedNode = locateNode(program, start, 0); selectedNode = selectedNode.getParent(); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_LOCAL_VARIABLE, PHPElementConciliator.concile(selectedNode)); } @Test public void concileConstant() { setFileContent("<?php define(\"CONSTANT\", \"Hello world.\"); echo CONSTANT; echo Constant; ?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 6; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CONSTANT, PHPElementConciliator.concile(selectedNode)); start = 15; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CONSTANT, PHPElementConciliator.concile(selectedNode)); start = 48; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CONSTANT, PHPElementConciliator.concile(selectedNode)); start = 63; selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CONSTANT, PHPElementConciliator.concile(selectedNode)); } @Test public void concileConstant1() { setFileContent("<?php define (\"TEST\", 1234);"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 6; ASTNode selectedNode = locateNode(program, start, 0); assertNotNull(selectedNode); assertEquals(PHPElementConciliator.CONCILIATOR_CONSTANT, PHPElementConciliator.concile(selectedNode)); } @Test public void concileConstantExists() { setFileContent("<?php define (\"TEST\", 1234);"); Program program = createProgram(file); assertNotNull(program); assertTrue(PHPElementConciliator.constantAlreadyExists(program, "TEST")); } @Test public void concileClsMemberExists() { setFileContent( "<?class foo {public static function bar(){return 'bar in a class called';}}$strFN2 = foo::bar;echo bar();?>"); Program program = createProgram(file); assertNotNull(program); // select the function declaration. int start = 8; ASTNode selectedNode = locateNode(program, start, 0); selectedNode = selectedNode.getParent(); assertNotNull(selectedNode); assertTrue(selectedNode instanceof TypeDeclaration); assertTrue(PHPElementConciliator.classMemeberAlreadyExists((TypeDeclaration) selectedNode, "bar", ASTNode.FUNCTION_DECLARATION)); } @Test public void concileClassNameExists() { setFileContent("<?php class TestRenameClass{}?>"); Program program = createProgram(file); assertNotNull(program); PHPElementConciliator.classNameAlreadyExists(program, "TestRenameClass"); } @Test public void localVarExists() { setFileContent("<? $x = 4; function assignx () {$x = 0; echo $x;} ?>"); Program program = createProgram(file); assertNotNull(program); int start = 21; ASTNode selectedNode = locateNode(program, start, 0); selectedNode = selectedNode.getParent(); assertNotNull(selectedNode); PHPElementConciliator.localVariableAlreadyExists((FunctionDeclaration) selectedNode, "x"); } @Test public void funExists1() { setFileContent("<? $x = 4; function assignx () {$x = 0; echo $x;} ?>"); Program program = createProgram(file); assertNotNull(program); PHPElementConciliator.functionAlreadyExists(program, "assignx"); } @Test public void concileGlobalExists() { setFileContent("<?php $a = 1; function test(){ echo $GLOBALS['a'];} ?>"); Program program = createProgram(file); assertNotNull(program); assertTrue(PHPElementConciliator.globalVariableAlreadyExists(program, "a")); } }