package org.ow2.mind.adl.annotations;
import static org.objectweb.fractal.adl.NodeUtil.castNodeError;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.util.Collection;
import java.util.HashMap;
import org.objectweb.fractal.adl.ADLException;
import org.objectweb.fractal.adl.Definition;
import org.objectweb.fractal.adl.Loader;
import org.objectweb.fractal.adl.error.Error;
import org.ow2.mind.CommonFrontendModule;
import org.ow2.mind.adl.ADLFrontendModule;
import org.ow2.mind.adl.ErrorLoader;
import org.ow2.mind.adl.ast.ImplementationContainer;
import org.ow2.mind.adl.ast.Source;
import org.ow2.mind.annotation.AnnotationErrors;
import org.ow2.mind.annotation.AnnotationHelper;
import org.ow2.mind.error.ErrorCollection;
import org.ow2.mind.idl.IDLFrontendModule;
import org.ow2.mind.plugin.PluginLoaderModule;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
public class TestAnnotations {
private Loader loader;
@BeforeMethod(alwaysRun = true)
public void setUp() {
final Injector injector = Guice.createInjector(new CommonFrontendModule(),
new PluginLoaderModule(), new IDLFrontendModule(),
new ADLFrontendModule() {
protected void configureErrorLoader() {
bind(Loader.class).annotatedWith(Names.named("ErrorLoader"))
.toChainStartingWith(ErrorLoader.class)
.endingWith(Loader.class);
}
});
loader = injector.getInstance(Key.get(Loader.class,
Names.named("ErrorLoader")));
}
@Test(groups = {"functional"})
public void test1() throws Exception {
final Definition definition = loader.load("pkg1.annotations.SourceFlag",
new HashMap<Object, Object>());
final Source[] sources = castNodeError(definition,
ImplementationContainer.class).getSources();
for (final Source source : sources) {
final Flag flag = AnnotationHelper.getAnnotation(source, Flag.class);
assertEquals(flag.value, "-DFOO");
}
}
@Test(groups = {"functional"})
public void test2() throws Exception {
final Definition definition = loader.load(
"pkg1.annotations.PathAnnotation1", new HashMap<Object, Object>());
final Source[] sources = castNodeError(definition,
ImplementationContainer.class).getSources();
for (final Source source : sources) {
final PathAnnotation path = AnnotationHelper.getAnnotation(source,
PathAnnotation.class);
assertEquals(path.value, "/tmp/mind.exe");
}
}
@Test(groups = {"functional"})
public void test3() throws Exception {
final Definition definition = loader.load(
"pkg1.annotations.PathAnnotation2", new HashMap<Object, Object>());
final Source[] sources = castNodeError(definition,
ImplementationContainer.class).getSources();
for (final Source source : sources) {
final PathAnnotation path = AnnotationHelper.getAnnotation(source,
PathAnnotation.class);
assertEquals(path.value, "/tmp/mind");
}
}
@Test(groups = {"functional"})
public void test4() throws Exception {
final Definition definition = loader.load(
"pkg1.annotations.PathAnnotation3", new HashMap<Object, Object>());
final Source[] sources = castNodeError(definition,
ImplementationContainer.class).getSources();
for (final Source source : sources) {
final PathAnnotation path = AnnotationHelper.getAnnotation(source,
PathAnnotation.class);
assertEquals(
path.url.getFile().substring(path.url.getFile().lastIndexOf('/') + 1),
"foo.c");
}
}
@Test(groups = {"functional"})
public void test5() throws Exception {
try {
loader.load("pkg1.annotations.PathAnnotation4",
new HashMap<Object, Object>());
} catch (final ADLException e) {
assertTrue(e.getError() instanceof ErrorCollection);
final Collection<Error> errors = ((ErrorCollection) e.getError())
.getErrors();
assertEquals(errors.size(), 1);
final Error err = errors.iterator().next();
assertSame(err.getTemplate(), AnnotationErrors.INVALID_ANNOTATION);
}
}
@Test(groups = {"functional"})
public void test6() throws Exception {
final Definition definition = loader.load(
"pkg1.annotations.PathAnnotation5", new HashMap<Object, Object>());
final Source[] sources = castNodeError(definition,
ImplementationContainer.class).getSources();
for (final Source source : sources) {
final PathAnnotation path = AnnotationHelper.getAnnotation(source,
PathAnnotation.class);
assertEquals(
path.url.getFile().substring(path.url.getFile().lastIndexOf('/') + 1),
"foo.c");
}
}
}