/*******************************************************************************
* Copyright (c) 2006-2012
* Software Technology Group, Dresden University of Technology
* DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026
*
* 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:
* Software Technology Group - TU Dresden, Germany;
* DevBoost GmbH - Berlin, Germany
* - initial API and implementation
******************************************************************************/
package org.emftext.language.java.test.bugs;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.Resource.Factory;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.emftext.language.java.JavaClasspath;
import org.emftext.language.java.classifiers.Class;
import org.emftext.language.java.classifiers.Classifier;
import org.emftext.language.java.classifiers.ClassifiersFactory;
import org.emftext.language.java.commons.Commentable;
import org.emftext.language.java.containers.CompilationUnit;
import org.emftext.language.java.containers.ContainersFactory;
import org.emftext.language.java.types.ClassifierReference;
import org.emftext.language.java.types.TypesFactory;
import org.junit.Test;
public class Bug1415Test extends AbstractTestCase {
private static String OUT_FOLDER = "./output";
public Bug1415Test() {
super();
emptyFolder(new File(OUT_FOLDER), false);
}
@Test
public void testWithoutResourceSet() throws IOException {
Commentable commentable = ContainersFactory.eINSTANCE.createCompilationUnit();
Classifier classifier = commentable.getConcreteClassifier("java.util.List");
ClassifierReference reference = TypesFactory.eINSTANCE.createClassifierReference();
reference.setTarget(classifier);
Factory f = (Factory) Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().get("java");
Resource r = f.createResource(URI.createFileURI(OUT_FOLDER + "/test1415-1.java"));
r.getContents().add(reference);
r.save(null);
BufferedReader in = new BufferedReader(new FileReader(OUT_FOLDER + "/test1415-1.java"));
String str = in.readLine();
//proxy can not be resolved without RS
assertTrue(reference.getTarget().eIsProxy());
//TODO #1828: check if the Printer2 should be extended to extract correct names from these classifiers!
//assertEquals("List", str);
assertEquals("//@classifiers[name='List']", str);
in.close();
}
@Test
public void testWithoutNamespacePrinting() throws IOException {
Commentable commentable = ContainersFactory.eINSTANCE.createCompilationUnit();
Classifier classifier = commentable.getConcreteClassifier("java.util.List");
ClassifierReference reference = TypesFactory.eINSTANCE.createClassifierReference();
reference.setTarget(classifier);
ResourceSet rs = createResourceSet();
Resource r = rs.createResource(URI.createFileURI(OUT_FOLDER + "/test1415-2.java"));
r.getContents().add(reference);
r.save(null);
BufferedReader in = new BufferedReader(new FileReader(OUT_FOLDER + "/test1415-2.java"));
String str = in.readLine();
assertFalse(reference.getTarget().eIsProxy());
//TODO #1828: check if the Printer2 should be extended to extract correct names from these classifiers!
//assertEquals("List", str);
assertEquals("//@classifiers[name='List']", str);
in.close();
}
@Test
public void testWithNamespacePrinting() throws IOException {
Commentable commentable = ContainersFactory.eINSTANCE.createCompilationUnit();
Classifier classifier = commentable.getConcreteClassifier("java.util.List");
ClassifierReference reference = TypesFactory.eINSTANCE.createClassifierReference();
reference.setTarget(classifier);
ResourceSet rs = createResourceSet();
Resource r = rs.createResource(URI.createFileURI(OUT_FOLDER + "/test1415-3.java"));
rs.getLoadOptions().put(JavaClasspath.OPTION_ALWAYS_USE_FULLY_QUALIFIED_NAMES, true);
r.getContents().add(reference);
r.save(null);
BufferedReader in = new BufferedReader(new FileReader(OUT_FOLDER + "/test1415-3.java"));
String str = in.readLine();
assertFalse(reference.getTarget().eIsProxy());
//TODO #1828: check if the Printer2 should be extended to extract correct names from these classifiers!
// assertEquals("java.util.List", str);
assertEquals("//@classifiers[name='List']", str);
in.close();
}
@Test
public void testFileSplitting() throws IOException {
CompilationUnit cu1 = ContainersFactory.eINSTANCE.createCompilationUnit();
CompilationUnit cu2 = ContainersFactory.eINSTANCE.createCompilationUnit();
Class class1 = ClassifiersFactory.eINSTANCE.createClass();
Class class2 = ClassifiersFactory.eINSTANCE.createClass();
cu1.getClassifiers().add(class1);
cu2.getClassifiers().add(class2);
cu1.getNamespaces().add("org");
cu1.getNamespaces().add("my");
cu1.getNamespaces().add("namespace1");
class1.setName("Class1");
cu2.getNamespaces().add("org");
cu2.getNamespaces().add("my");
cu2.getNamespaces().add("namespace2");
class2.setName("Class2");
String src_folder_name = "test1415-src-folder-1";
ResourceSet rs = createResourceSet();
Resource r = rs.createResource(URI.createFileURI(OUT_FOLDER + "/" + src_folder_name + ".java"));
r.getContents().add(cu1);
r.getContents().add(cu2);
r.save(null);
assertTrue(new File(OUT_FOLDER + "/" + src_folder_name + "/org/my/namespace1/Class1.java").exists());
assertTrue(new File(OUT_FOLDER + "/" + src_folder_name + "/org/my/namespace2/Class2.java").exists());
}
@Test
public void testFileSplittingWithoutResourceSet() throws IOException {
CompilationUnit cu1 = ContainersFactory.eINSTANCE.createCompilationUnit();
CompilationUnit cu2 = ContainersFactory.eINSTANCE.createCompilationUnit();
Class class1 = ClassifiersFactory.eINSTANCE.createClass();
Class class2 = ClassifiersFactory.eINSTANCE.createClass();
cu1.getClassifiers().add(class1);
cu2.getClassifiers().add(class2);
cu1.getNamespaces().add("org");
cu1.getNamespaces().add("my");
cu1.getNamespaces().add("namespace1");
class1.setName("Class1");
cu2.getNamespaces().add("org");
cu2.getNamespaces().add("my");
cu2.getNamespaces().add("namespace2");
class2.setName("Class2");
String src_folder_name = "test1415-src-folder-2";
Factory f = (Factory) Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().get("java");
Resource r = f.createResource(URI.createFileURI(OUT_FOLDER + "/" + src_folder_name + ".java"));
r.getContents().add(cu1);
r.getContents().add(cu2);
r.save(null);
assertTrue(new File(OUT_FOLDER + "/" + src_folder_name + "/org/my/namespace1/Class1.java").exists());
assertTrue(new File(OUT_FOLDER + "/" + src_folder_name + "/org/my/namespace2/Class2.java").exists());
}
public void emptyFolder(File path, boolean deleteFolder) {
if (path.exists() && !path.getName().startsWith(".")) {
File[] files = path.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
emptyFolder(files[i], true);
} else {
files[i].delete();
}
}
}
if (deleteFolder) path.delete();
}
}