/** * Copyright (C) 2009 STMicroelectronics * * This file is part of "Mind Compiler" is free software: you can redistribute * it and/or modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Contact: mind@ow2.org * * Authors: Matthieu Leclercq * Contributors: */ package org.ow2.mind; import static junit.framework.Assert.fail; import org.objectweb.fractal.adl.Node; import org.objectweb.fractal.adl.NodeFactory; import org.ow2.mind.annotation.ast.AnnotationArgument; import org.ow2.mind.annotation.ast.AnnotationNode; import org.ow2.mind.plugin.PluginLoaderModule; import org.ow2.mind.value.ast.Array; import org.ow2.mind.value.ast.NumberLiteral; import org.ow2.mind.value.ast.StringLiteral; import org.ow2.mind.value.ast.Value; import org.testng.annotations.BeforeMethod; import com.google.inject.Guice; import com.google.inject.Injector; public abstract class AbstractTestcase { NodeFactory nodeFactory; protected Injector injector; @BeforeMethod(alwaysRun = true) public void setUp() { injector = Guice.createInjector(new CommonFrontendModule(), new PluginLoaderModule()); nodeFactory = injector.getInstance(NodeFactory.class); setUp(injector); } protected abstract void setUp(Injector injector); protected AnnotationNode newAnnotationNode(final String type, final AnnotationArgument... args) { final AnnotationNode annoAST = newNode("annotation", AnnotationNode.class); annoAST.setType(type); for (final AnnotationArgument arg : args) { annoAST.addAnnotationArgument(arg); } return annoAST; } protected AnnotationArgument newAnnotationArgument(final String name, final Value value) { final AnnotationArgument arg = newNode("annotationArgument", AnnotationArgument.class); arg.setName(name); arg.setValue(value); return arg; } protected Value newAnnotationValue(final String type, final AnnotationArgument... args) { final AnnotationNode annoAST = newNode("annotation", AnnotationNode.class, Value.class); annoAST.setType(type); for (final AnnotationArgument arg : args) { annoAST.addAnnotationArgument(arg); } return (Value) annoAST; } protected NumberLiteral newNumberLiteral(final Number value) { final NumberLiteral n = newNode("value", NumberLiteral.class); n.setValue(value.toString()); return n; } protected StringLiteral newStringLiteral(final String value) { final StringLiteral n = newNode("value", StringLiteral.class); n.setValue("\"" + value + "\""); return n; } protected Array newArray(final Value... values) { final Array a = newNode("value", Array.class); for (final Value value : values) { a.addValue(value); } return a; } protected <T extends Node> T newNode(final String type, final Class<T> nodeItf, final Class<?>... otherItfs) { try { Node node; if (otherItfs == null || otherItfs.length == 0) { node = nodeFactory.newNode(type, nodeItf.getName()); } else { final String[] names = new String[otherItfs.length + 1]; names[0] = nodeItf.getName(); for (int i = 0; i < otherItfs.length; i++) { names[i + 1] = otherItfs[i].getName(); } node = nodeFactory.newNode(type, names); } return nodeItf.cast(node); } catch (final ClassNotFoundException e) { fail(e.getMessage()); return null; } } }