package org.erlide.engine.model.erlang.configuration;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import java.util.Collection;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.erlide.engine.internal.model.root.FileProjectConfigurator;
import org.erlide.engine.internal.model.root.ProjectConfiguratorFactory;
import org.erlide.engine.model.erlang.ErlangProjectPropertiesMatcher;
import org.erlide.engine.model.root.ErlangProjectProperties;
import org.erlide.engine.model.root.IProjectConfigurator;
import org.erlide.engine.model.root.ProjectConfigType;
import org.erlide.engine.model.root.ProjectConfigurationSerializer;
import org.junit.Test;
public class RebarProjectConfigurationTest extends AbstractProjectConfigurationTest {
@Override
@Test
public void configCanBeParsed() throws CoreException {
project.setConfigType(ProjectConfigType.REBAR);
project.storeAllProperties();
setFileContent(ProjectConfigType.REBAR.getConfigName(), "");
final IProjectConfigurator persister = ProjectConfiguratorFactory.getDefault()
.getConfig(project.getConfigType(), project);
final ProjectConfigurationSerializer configurator = ((FileProjectConfigurator) persister)
.getSerializer();
final ErlangProjectProperties expected = new ErlangProjectProperties();
expected.setOutputDir(new Path("ebin"));
final ErlangProjectProperties actual = configurator.decodeConfig("");
assertThat(actual, is(ErlangProjectPropertiesMatcher.sameAs(expected)));
}
@Test
public void propertiesShouldFollowConfigFileChange() throws CoreException {
project.setConfigType(ProjectConfigType.REBAR);
final String cfgFile = ProjectConfigType.REBAR.getConfigName();
final String config = getFileContent(cfgFile);
final String config1 = config + "{erl_opts, [{i, \"myinclude\"}, "
+ "{src_dirs, [\"src\", \"src2\"]}]}.";
setFileContent(cfgFile, config1);
final ErlangProjectProperties p2 = project.getProperties();
final Collection<IPath> actualSources = p2.getSourceDirs();
assertThat(actualSources, hasSize(2));
assertThat(actualSources, hasItem(new Path("src2")));
final Collection<IPath> actualIncludes = p2.getIncludeDirs();
assertThat(actualIncludes, hasSize(1));
assertThat(actualIncludes, hasItem(new Path("myinclude")));
}
}