package org.maziarz.yiiclipse.codegen;
import java.io.StringReader;
import java.util.Map;
import junit.framework.Assert;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
import org.eclipse.dltk.ast.parser.IModuleDeclaration;
import org.eclipse.php.internal.core.PHPVersion;
import org.eclipse.php.internal.core.compiler.ast.parser.AbstractPHPSourceParser;
import org.eclipse.php.internal.core.compiler.ast.parser.PHPSourceParserFactory;
import org.junit.Test;
public class ReverseArrayMapperTests {
@Test
public void simpleTest1() {
String initialContent = "<?php array('app'=>'aa', 'app2'=>'ee') ?>";
String expected = "{'app'='aa', 'app2'='ee'}";
testMap(initialContent, expected);
}
@Test
public void simpleTest2() {
String initialContent = "<?php array('app'=>'aa', 'app2'=>array('a'=>'b', 'c'=>'d')) ?>";
testMap(initialContent, "{'app'='aa', 'app2'={'a'='b', 'c'='d'}}");
}
@Test
public void simpleTest3() {
String initialContent = "<?php array('app'=>'aa', 'app2'=>array('0','a'=>'b', 'c'=>'d')) ?>";
testMap(initialContent, "{'app'='aa', 'app2'={'0'=null, 'a'='b', 'c'='d'}}");
}
@Test
public void simpleTest4() {
String initialContent = "<?php array('app', array('0','a'=>'b', 'c'=>'d')) ?>";
testMap(initialContent, "{'app'=null, {'0'=null, 'a'='b', 'c'='d'}=null}");
}
@Test
public void simpleTest5WithInteger() {
String initialContent = "<?php array('app', array('0','a'=>1, 'c'=>2)) ?>";
testMap(initialContent, "{'app'=null, {'0'=null, 'a'=1, 'c'=2}=null}");
}
private void testMap(String initialContent, String expected) {
AbstractPHPSourceParser parser = PHPSourceParserFactory.createParser(PHPVersion.PHP5_3);
IModuleDeclaration m = null;
try {
m = parser.parse(new StringReader(initialContent), null, true);
} catch (Exception e) {
}
if (m instanceof ModuleDeclaration) {
ModuleDeclaration md = (ModuleDeclaration) m;
Object array = ((org.eclipse.php.internal.core.compiler.ast.nodes.ExpressionStatement) md.getStatements().get(0)).getExpr();
Map map = ArrayMapper.getMap((org.eclipse.php.internal.core.compiler.ast.nodes.ArrayCreation) array);
Assert.assertEquals(expected, map.toString());
}
}
}