package org.overture.vdm2jml.tests;
import java.io.File;
import java.util.List;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.overture.ast.definitions.SClassDefinition;
import org.overture.ast.lex.Dialect;
import org.overture.codegen.vdm2jml.util.NameGen;
import org.overture.config.Settings;
import org.overture.typechecker.util.TypeCheckerUtil;
import org.overture.typechecker.util.TypeCheckerUtil.TypeCheckResult;
public class NameGenTests
{
public static final String MSG = "Got unexpected name suggestion from name generator";
public static final String TEST_FILE = "src" + File.separatorChar + "test"
+ File.separatorChar + "resources" + File.separatorChar
+ "NameGenTests.vdmpp";
private NameGen nameGen;
@Before
public void init()
{
Settings.dialect = Dialect.VDM_PP;
TypeCheckResult<List<SClassDefinition>> res = TypeCheckerUtil.typeCheckPp(new File(TEST_FILE));
Assert.assertTrue("Expected model to type check without errors: "
+ res, res.parserResult.errors.isEmpty()
&& res.errors.isEmpty());
Assert.assertTrue("Expected only a single class definition", res.result.size() == 1);
this.nameGen = new NameGen(res.result.get(0));
}
@Test
public void notTaken()
{
Assert.assertEquals(MSG, "x", nameGen.getName("x"));
}
@Test
public void suggestSameNameTwice()
{
nameGen.getName("x");
Assert.assertEquals(MSG, "x_1", nameGen.getName("x"));
}
@Test
public void suggestSameNameThreeTimes()
{
nameGen.getName("x");
nameGen.getName("x");
Assert.assertEquals(MSG, "x_2", nameGen.getName("x"));
}
@Test
public void suggestField()
{
Assert.assertEquals(MSG, "field_1", nameGen.getName("field"));
}
@Test
public void addExtraName()
{
nameGen.addName("x");
Assert.assertEquals(MSG, "x_1", nameGen.getName("x"));
}
@Test
public void suggestLocalName()
{
Assert.assertEquals(MSG, "i_1", nameGen.getName("i"));
}
}