package jp.co.worksap.workspace.ide.eclipse;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.text.IsEqualIgnoringCase.equalToIgnoringCase;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.doReturn;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.mockito.Mockito;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
public class EclipseWorkspaceInitializerTest {
@Rule
public TemporaryFolder folder = new TemporaryFolder();
private EclipseWorkspaceInitializer initializer;
private File workspace;
private File settingDirectory;
private File prefFile;
@Before
public void setUp() throws IOException {
initializer = new EclipseWorkspaceInitializer();
workspace = folder.newFolder();
settingDirectory = new File(workspace, ".settings");
prefFile = new File(settingDirectory, "org.eclipse.core.resources.prefs");
assertThat(settingDirectory.exists(), is(false));
assertThat(prefFile.exists(), is(false));
}
@Test
public void workspaceInitializationShouldCreatePrefFile() throws IOException {
initializer.initialize(new EclipseConfiguration(), workspace);
assertThat(settingDirectory.isDirectory(), is(true));
assertThat(prefFile.isFile(), is(true));
}
@Test
public void workspaceInitializationUsesProperEncoding() throws IOException {
EclipseConfiguration configuration = Mockito.spy(new EclipseConfiguration());
doReturn(Charset.forName("SHIFT_JIS")).when(configuration).getDefaultCharset();
initializer.initialize(configuration, workspace);
assertThat(findCharset(), is(equalToIgnoringCase("SHIFT_JIS")));
}
private String findCharset() throws IOException {
for (String line : Files.readLines(prefFile, Charsets.UTF_8)) {
if (line.startsWith(EclipseWorkspaceInitializer.PREFIX_OF_ENCODING)) {
return line.substring(EclipseWorkspaceInitializer.PREFIX_OF_ENCODING.length());
}
}
throw new IllegalStateException("no encoding found");
}
}