/*******************************************************************************
* Copyright (c) 2012 eBay Inc. 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:
* eBay Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintStream;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import junit.framework.TestCase;
import org.eclipse.vjet.core.codegen.bootstrap.CodeGenInputEntity;
import org.eclipse.vjet.core.codegen.bootstrap.CodeGenOutputEntity;
import org.eclipse.vjet.core.codegen.bootstrap.CodeGenStatus;
import org.eclipse.vjet.core.codegen.bootstrap.ICodeGenTool;
import org.eclipse.vjet.core.codegen.bootstrap.ICodeGeneratorMarker;
import org.eclipse.vjet.core.codegen.bootstrap.IJava2JsCodeGenInput;
import org.eclipse.vjet.core.codegen.bootstrap.IJava2JsCodeGenOutput;
import org.eclipse.vjet.core.codegen.bootstrap.IToolMonitor;
import org.eclipse.vjet.core.codegen.bootstrap.Java2JsCodeGenInput;
import org.eclipse.vjet.core.codegen.bootstrap.StatusCode;
import org.eclipse.vjet.dsf.javatojs.FileUtils;
import org.eclipse.vjet.eclipse.core.ts.JstLibResolver;
import org.eclipse.vjet.eclipse.javatojs.core.JavaToJsCodeGenTool;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data.Array;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data.Methods;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data.child.Fields;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data1.ArrayJsr;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data1.NewMethod;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data1.arrays;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data3.ForInitializer;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.java2js.data4.SampleCodeGen;
import org.eclipse.vjet.eclipse.javatojs.core.tests.codegen.js.VJetSdkEnvironment;
import org.junit.Ignore;
public class JavaToJsCodeGenTests extends TestCase {
private static final String CONFIG_FILE = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js.properties";
private static final String CONFIG_FILE1 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js1.properties";
private static final String CONFIG_FILE2 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js2.properties";
private static final String CONFIG_FILE3 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js3.properties";
private static final String CONFIG_FILE4 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js4.properties";
private static final String CONFIG_FILE5 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js5.properties";
private static final String CONFIG_FILE6 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js6.properties";
private static final String CONFIG_FILE7 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js7.properties";
private static final String CONFIG_FILE8 = "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/java2js8.properties";
private static List<File> s_testFiles1 = new ArrayList<File>();
private static String[] s_inputFiles = new String[] {
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.java",
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/Fields.java",
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Methods.java" };
private static PrintStream sysout = System.out;
private static ByteArrayOutputStream buffer;
protected static File getSrcDir(Class clz, String hack) {
String packageDirPath = FileUtils.getPath(clz, null, hack);
if (packageDirPath != null) {
String packageName = clz.getPackage().getName();
String packagePath = packageName.replace('.', '/');
packageDirPath = packageDirPath.substring(0,
packageDirPath.indexOf(packagePath));
return new File(packageDirPath);
} else {
return null;
}
}
private static void addTestFile1(String pkg, Class c, Boolean bIncludeJsr) {
final File parentFile = getSrcDir(c, "src");
File js = new File(parentFile, pkg + c.getSimpleName() + ".js");
File jsr = new File(parentFile, pkg + c.getSimpleName() + "Jsr.java");
s_testFiles1.add(js);
if (bIncludeJsr) {
s_testFiles1.add(jsr);
}
}
@Override
protected void setUp() throws Exception {
JstLibResolver.getInstance().setSdkEnvironment(
new VJetSdkEnvironment(new String[0], "DefaultSdk"));
}
public void testJavaToJsCodeGenPkg() {
CodeGenInputEntity inputEntity = new CodeGenInputEntity("Array.java",
Array.class.getPackage().getName());
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data");
inputEntity.setData(inFile.toURL());
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
javaToJsCodeGen(inputEntity);
}
public void testJavaToJsCodeGen() {
CodeGenInputEntity inputEntity = new CodeGenInputEntity("Array.java",
Array.class.getPackage().getName());
File inFile = null;
FileInputStream inputStream = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.java");
inputStream = new FileInputStream(inFile);
inputEntity.setInputStream(new InputStreamReader(inputStream));
inputEntity.setData(inFile.toURL());
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
javaToJsCodeGen(inputEntity);
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
// ignore
}
}
}
public void testJavaToJsCodeGen2() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, true);
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
inputlist.add(input);
}
javaToJsCodeGen(inputlist, monitor);
}
/*
* This test verifies if the "Unknown input file type:" is getting thrown,
* if a invalid file name(other than java file extension) is provided as
* input
*/
public void testJavaToJsCodeGen3() {
Boolean bException = false;
CodeGenInputEntity inputEntity = new CodeGenInputEntity("Array.jav",
Array.class.getPackage().getName());
File inFile = null;
FileInputStream inputStream = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.jav");
inputStream = new FileInputStream(inFile);
inputEntity.setInputStream(new InputStreamReader(inputStream));
inputEntity.setData(inFile.toURL());
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
try {
javaToJsCodeGen(inputEntity);
fail("unknown suffix expected exception");
} catch (Exception e) {
assertTrue(e.getMessage().startsWith("Unknown input file type:"));
bException = true;
}
assertTrue(bException);
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
// ignore
}
}
}
/*
* This test checks if the translation is happening when a java filename
* containing all lower case characters is provided and also if verifies if
* the generated JS filename is having filename as same as the java file
* name.
*/
public void testJavaToJsCodeGen4() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/",
arrays.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/arrays.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
}
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
true, true, false, false);
}
/*
* This test checks if the translation is happening when a java filename
* containing all lower case characters is provided and also if verifies if
* the generated JS filename is having filename as same as the java file
* name.
*/
public void testJavaToJsCodeGen5() {
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/",
ArrayJsr.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/ArrayJsr.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
}
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
false, true, true, false);
}
/*
* assert statement is present in the NewMethod.java. This test checks if
* warning status code is getting thrown when we attempt to translate this
* class file.
*/
public void testJavaToJsCodeGen6() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/",
NewMethod.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data1/NewMethod.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
}
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Warning,
true, true, false, false);
}
/*
* Below test case uses translationMode as "ONDEMAND" This also checks if
* the path in JS file is getting generated properly
*/
@Ignore
public void testJavaToJsCodeGen7() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/child/",
Fields.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE2)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
}
javaToJsCodeGen2(inputlist, monitor,
"com.ebay.darwin.codegen.java2js.data.Array");
javaToJsCodeGen2(inputlist, monitor,
"com.ebay.darwin.codegen.java2js.data.child.Fields");
}
public static boolean CheckPath(File file, String path) {
if (!file.exists() || !file.canWrite() || file.isDirectory()) {
return false;
}
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
if (line.contains(path)) {
return true;
}
}
} catch (Exception e) {
System.out.println("Error reading file - " + file);
} finally {
try {
if (br != null)
br.close();
} catch (IOException e) {
// NOPMD - ignore
}
}
return false;
}
/*
* To check if an exception is getting thrown if the config file is not
* provided
*/
public void testJavaToJsCodeGen8() {
Boolean bException = false;
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, true);
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
// input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
inputlist.add(input);
}
try {
javaToJsCodeGen(inputlist, monitor);
} catch (Exception e) {
e.printStackTrace();
assertTrue(e.getMessage().startsWith(
"IJava2JsCodeGenInput.getJava2JsProperties() is null"));
bException = true;
}
assertTrue(bException);
}
/*
* To check if the plugin uses default value if configInitializer and
* fileFilter are not set in the java2js.properties (provided externally)
*/
public void testJavaToJsCodeGen9() {
Boolean bException = false;
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE6)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
inputlist.add(input);
}
javaToJsCodeGen(inputlist, monitor);
}
/*
* This method checks if the JS files are getting generated when
* parallelenabled is set to true
*/
public void testJavaToJsCodeGen10() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, true);
s_inputFiles = new String[] {
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.java",
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Methods.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE8)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
inputlist.add(input);
}
javaToJsCodeGen(inputlist, monitor);
}
/*
* This test makes sure that translation is restricted if the java file
* contains code gen annotations
*/
public void testJavaToJsCodeGen11() {
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data4/",
SampleCodeGen.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data4/SampleCodeGen.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
}
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
false, true, true, false);
}
/*
* To check if the sysouts are getting printed if the the verbose is enabled
*/
public void testJavaToJsCodeGen12() {
buffer = new ByteArrayOutputStream();
PrintStream newOut = new PrintStream(buffer);
// change sysout to goto buffer instead of console for validation
System.setOut(newOut);
Boolean bException = false;
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/Array.java" };
IToolMonitor monitor = new NullToolMonitor();
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE6)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
for (String f : s_inputFiles) {
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(new File(f).toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
inputlist.add(input);
}
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
true, true, false, true);
assertTrue(buffer.size() > 0);
System.setOut(sysout);
}
public void testJavaToJsCodeGenPkg2() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/child/",
Fields.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, true);
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data");
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
// File config = null;
// try {
// config = new File(CONFIG_FILE1);
// } catch (Exception e) {
// e.printStackTrace();
// fail("Exception - "+e.getMessage());
// }
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE1)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
IToolMonitor monitor = new NullToolMonitor();
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(inFile.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
javaToJsCodeGen(inputlist, monitor);
}
/*
* Below test case uses translationMode as ONDEMAND and includeChildPkgs as
* false This case is added to make sure that JS files are getting generated
* even if it is present in the child package though includeChildPkgs is set
* to false
*/
public void testJavaToJsCodeGenPkg3() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/child/",
Fields.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, true);
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data");
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE5)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
IToolMonitor monitor = new NullToolMonitor();
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(inFile.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
javaToJsCodeGen(inputlist, monitor);
}
/*
* Below test case uses genJsr as false
*/
public void testJavaToJsCodeGenPkg4() {
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, false);
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/child/",
Fields.class, false);
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, false);
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data");
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE3)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
IToolMonitor monitor = new NullToolMonitor();
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(inFile.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
true, false, true, false);
}
/*
* Below test case uses includeChildPkgs as false
*/
public void testJavaToJsCodeGenPkg5() {
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Array.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/child/",
Fields.class, true);
addTestFile1(
"org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data/",
Methods.class, true);
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data");
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE4)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
IToolMonitor monitor = new NullToolMonitor();
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(inFile.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
true, true, false, false);
}
/*
* This test uses com.ebay.darwin.codegen.java2js.MyTranslationInitializer
* instead of
* org.eclipse.vjet.dsf.javatojs.control.DefaultTranslationInitializer
*
* policy.addExcludePackage(new
* Pkg("com.ebay.darwin.codegen.java2js.data3.*")); has been added in the
* MyTranslationInitializer to verify if the translation is excluded for
* this package
*/
public void testJavaToJsCodeGenPkg6() {
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data3/",
ForInitializer.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data3/ForFilter.java" };
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data3");
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE7)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
IToolMonitor monitor = new NullToolMonitor();
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(inFile.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
false, true, true, false);
}
/*
* This test makes sure that translation is restricted if the java file
* contains code gen annotations
*/
public void testJavaToJsCodeGenPkg7() {
addTestFile1(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data4/",
SampleCodeGen.class, true);
s_inputFiles = new String[] { "src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data3/SampleCodeGen.java" };
File inFile = null;
try {
inFile = new File(
"src/org/eclipse/vjet/eclipse/javatojs/core/tests/codegen/java2js/data4");
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
Properties prop = new Properties();
try {
prop.load(new FileInputStream(new File(CONFIG_FILE)));
} catch (Exception e) {
e.printStackTrace();
fail("Exception - " + e.getMessage());
}
IToolMonitor monitor = new NullToolMonitor();
List<IJava2JsCodeGenInput> inputlist = new ArrayList<IJava2JsCodeGenInput>();
Java2JsCodeGenInput input = new Java2JsCodeGenInput();
input.setJava2jsProp(prop);
try {
input.setUrl(inFile.toURL());
} catch (MalformedURLException e) {
e.printStackTrace();
}
inputlist.add(input);
javaToJsCodeGen1(inputlist, monitor, s_testFiles1, StatusCode.Success,
false, true, true, false);
}
private void javaToJsCodeGen(List<IJava2JsCodeGenInput> input,
IToolMonitor monitor) {
JavaToJsCodeGenTool codeGenTool = new JavaToJsCodeGenTool();
List<IJava2JsCodeGenOutput> outputs = codeGenTool.generate(input,
monitor);
List<File> fileResult = new ArrayList<File>();
for (IJava2JsCodeGenOutput output : outputs) {
URL url = output.getUrl();
assertNotNull(url);
File file = null;
try {
file = new File(url.toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
fail();
}
System.out.println("CodeGen file = " + file.getAbsolutePath());
fileResult.add(file);
for (ICodeGeneratorMarker marker : output.getMarkers()) {
StringBuilder msg = new StringBuilder();
msg.append(marker.getStatus());
msg.append(" : ");
msg.append(marker.getMessage());
System.out.println(msg.toString());
assertSame(StatusCode.Success, marker.getStatus());
}
}
for (File f : s_testFiles1) {
assertTrue("Failed to find file in results" + f,
fileResult.contains(f));
}
}
private void javaToJsCodeGen1(List<IJava2JsCodeGenInput> input,
IToolMonitor monitor, List testFiles, StatusCode status,
Boolean bfileValidation, Boolean bGenJsr,
Boolean bincludeChildPkgs, Boolean bVerbose) {
JavaToJsCodeGenTool codeGenTool = new JavaToJsCodeGenTool();
List<IJava2JsCodeGenOutput> outputs = codeGenTool.generate(input,
monitor);
List<File> fileResult = new ArrayList<File>();
for (IJava2JsCodeGenOutput output : outputs) {
URL url = output.getUrl();
assertNotNull(url);
File file = null;
try {
file = new File(url.toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
fail();
}
System.out.println("CodeGen file = " + file.getAbsolutePath());
fileResult.add(file);
for (ICodeGeneratorMarker marker : output.getMarkers()) {
StringBuilder msg = new StringBuilder();
msg.append(marker.getStatus());
msg.append(" : ");
msg.append(marker.getMessage());
System.out.println(msg.toString());
assertSame(status, marker.getStatus());
}
}
if (status.toString().equalsIgnoreCase(StatusCode.Success.toString())
&& bfileValidation && bGenJsr && bincludeChildPkgs) {
for (File f : s_testFiles1) {
assertTrue(fileResult.size() > 0);
assertTrue("Failed to find file in results" + f,
fileResult.contains(f));
}
}
if (!bfileValidation) {
for (File f : s_testFiles1) {
assertTrue(fileResult.size() == 0);
assertTrue("Failed to find file in results" + f,
!fileResult.contains(f));
}
}
if (!bGenJsr) {
for (File f : s_testFiles1) {
assertTrue(fileResult.size() > 0);
// assertFalse(f.toString().endsWith("Jsr.java"));
assertFalse(fileResult.contains(f.toString().endsWith(
"Jsr.java")));
}
}
if (!bincludeChildPkgs) {
for (File f : s_testFiles1) {
assertTrue(fileResult.size() > 0);
if (!(f.toString().endsWith("Fields.js") || f.toString()
.endsWith("FieldsJsr.java"))) {
assertTrue("Failed to find file in results" + f,
fileResult.contains(f));
}
System.out.println(fileResult.contains(f.toString()));
assertFalse((f.toString().endsWith("FieldsJsr.java") || fileResult
.contains(f.toString().endsWith("Fields.js")))
&& fileResult.contains(f.toString()));
}
}
if (bVerbose) {
assertTrue(buffer.toString().contains("-> Read java sources ..."));
assertTrue(buffer.toString().contains(
"-> Translate java sources to JST ..."));
for (File f : fileResult) {
assertTrue(buffer.toString().contains(f.toString()));
}
}
}
private void javaToJsCodeGen2(List<IJava2JsCodeGenInput> input,
IToolMonitor monitor, String strPath) {
Boolean b = false;
JavaToJsCodeGenTool codeGenTool = new JavaToJsCodeGenTool();
List<IJava2JsCodeGenOutput> outputs = codeGenTool.generate(input,
monitor);
List<File> fileResult = new ArrayList<File>();
for (IJava2JsCodeGenOutput output : outputs) {
URL url = output.getUrl();
assertNotNull(url);
File file = null;
try {
file = new File(url.toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
fail();
}
System.out.println("CodeGen file = " + file.getAbsolutePath());
fileResult.add(file);
if (file.getAbsolutePath().toString().contains("Array.js")) {
b = CheckPath(file, strPath);
}
for (ICodeGeneratorMarker marker : output.getMarkers()) {
StringBuilder msg = new StringBuilder();
msg.append(marker.getStatus());
msg.append(" : ");
msg.append(marker.getMessage());
System.out.println(msg.toString());
assertSame(StatusCode.Success, marker.getStatus());
}
}
for (File f : s_testFiles1) {
assertTrue("Failed to find file in results" + f,
fileResult.contains(f));
}
assertTrue(b);
}
private void javaToJsCodeGen(CodeGenInputEntity inputEntity) {
ICodeGenTool codeGenTool = new JavaToJsCodeGenTool();
List<ByteArrayOutputStream> outList = new ArrayList<ByteArrayOutputStream>();
// get output entity
List<CodeGenOutputEntity> outputEntities = codeGenTool
.getOutputEntities(inputEntity);
// Set the output stream on the entity
for (CodeGenOutputEntity outputEntity : outputEntities) {
// Create the stream
ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
outList.add(os);
outputEntity.setOutputStream(new OutputStreamWriter(os));
}
try {
// gen
List<CodeGenStatus> statusList = codeGenTool.generate(inputEntity,
outputEntities);
for (CodeGenStatus status : statusList) {
StringBuilder msg = new StringBuilder();
msg.append(status.getStatus());
msg.append(" : ");
msg.append(status.getMessage());
System.out.println(msg.toString());
assertSame(status.getStatus(), StatusCode.Success);
}
for (ByteArrayOutputStream os : outList) {
assertTrue(os.size() > 0);
}
} catch (Exception e) {
e.printStackTrace();
fail("unexpected exception - " + e.getMessage());
}
}
@Override
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
super.tearDown();
s_testFiles1.clear();
System.setOut(sysout);
}
}