/*
* Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner,
* Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain,
* Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter,
* Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann,
* Samuel Zweifel
*
* This file is part of Jukefox.
*
* Jukefox is free software: you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or any later version. Jukefox 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* Jukefox. If not, see <http://www.gnu.org/licenses/>.
*/
package data;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.HashSet;
import org.junit.Assert;
import org.junit.Test;
import ch.ethz.dcg.jukefox.data.settings.ModelSettings;
import ch.ethz.dcg.jukefox.manager.DirectoryManager;
public class SettingsTest {
private final DirectoryManager directoryManager = new DirectoryManager();
private final File serTestFile1 = directoryManager.getSettingsFile();
private HashSet<String> createDefaultAlbumNamesToGroup(){
HashSet<String> result = new HashSet<String>();
result.add("Alpha");
result.add("Beta");
result.add("Gamma");
return result;
}
private void compareDefaultSettings(ModelSettings settings)
{
compareSettings(settings, true, 42, 77, createDefaultAlbumNamesToGroup());
}
private void compareSettings(ModelSettings settings, boolean famousArtistsInserted,
int numberOfStartedImports, int recomputeTaskId, HashSet<String> albumNamesToGroup)
{
Assert.assertNotNull(settings);
Assert.assertEquals(famousArtistsInserted, settings.isFamousArtistsInserted());
Assert.assertEquals(numberOfStartedImports, settings.getNumberOfStartedImports());
Assert.assertEquals(recomputeTaskId, settings.getRecomputeTaskId());
Assert.assertNotNull(albumNamesToGroup);
Assert.assertNotNull(settings.getAlbumNamesToGroup());
Assert.assertEquals(albumNamesToGroup.size(), settings.getAlbumNamesToGroup().size());
for (int i = 0; i < albumNamesToGroup.size(); i++)
{
Assert.assertEquals(albumNamesToGroup.toArray()[i], settings.getAlbumNamesToGroup().toArray()[i]);
}
}
private ModelSettings createDefaultTestSettingsFile(File serTestFile)
{
return createTestSettingsFile(serTestFile, true, 42, 77, createDefaultAlbumNamesToGroup());
}
private ModelSettings createTestSettingsFile(File serTestFile, boolean famousArtistsInserted,
int numberOfStartedImports, int recomputeTaskId, HashSet<String> albumNamesToGroup)
{
if (serTestFile.exists())
{
serTestFile.delete();
}
ModelSettings testSettings = null;
try {
testSettings = new ModelSettings(serTestFile);
Assert.assertTrue(serTestFile.exists());
} catch (Exception e) {
Assert.fail(e.getMessage());
}
testSettings.setFamousArtistsInserted(famousArtistsInserted);
testSettings.setNumberOfStartedImports(numberOfStartedImports);
testSettings.setRecomputeTaskId(recomputeTaskId);
testSettings.setAlbumNamesToGroup(albumNamesToGroup);
doubleCheckSettings(serTestFile, famousArtistsInserted, numberOfStartedImports, recomputeTaskId, albumNamesToGroup);
return testSettings;
}
private void doubleCheckSettings(File serTestFile, boolean famousArtistsInserted,
int numberOfStartedImports, int recomputeTaskId, HashSet<String> albumNamesToGroup)
{
Assert.assertTrue(serTestFile.exists());
ObjectInputStream ois = null;
FileInputStream fileIn = null;
ModelSettings settings = null;
try {
fileIn = new FileInputStream(serTestFile);
ois = new ObjectInputStream(fileIn);
settings = (ModelSettings) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
} finally {
if (ois != null) try { ois.close(); } catch (Exception e) {}
if (fileIn != null) try { fileIn.close(); } catch (Exception e) {}
}
compareSettings(settings, famousArtistsInserted, numberOfStartedImports, recomputeTaskId, albumNamesToGroup);
}
/**
* Creates test settings without an existing file
*/
@Test
public void testCreateSettingsWithoutFile()
{
if (serTestFile1.exists())
{
serTestFile1.delete();
}
ModelSettings testSettings = null;
try {
testSettings = new ModelSettings(serTestFile1);
Assert.assertTrue(serTestFile1.exists());
} catch (Exception e) {
Assert.fail(e.getMessage());
}
compareSettings(testSettings, false, 0, 0, new HashSet<String>());
doubleCheckSettings(serTestFile1, false, 0, 0, new HashSet<String>());
serTestFile1.delete();
}
/**
* Creates test settings with an already existing file
*/
@Test
public void testCreateSettingsWithFile()
{
createDefaultTestSettingsFile(serTestFile1);
ModelSettings testSettings = null;
try {
testSettings = new ModelSettings(serTestFile1);
} catch (Exception e) {
Assert.fail(e.getMessage());
}
Assert.assertTrue(serTestFile1.exists());
compareDefaultSettings(testSettings);
serTestFile1.delete();
}
@Test
public void testSetFamousArtistsInserted()
{
ModelSettings testSettings = createDefaultTestSettingsFile(serTestFile1);
testSettings.setFamousArtistsInserted(false);
compareSettings(testSettings, false, 42, 77, createDefaultAlbumNamesToGroup());
doubleCheckSettings(serTestFile1, false, 42, 77, createDefaultAlbumNamesToGroup());
serTestFile1.delete();
}
@Test
public void testSetNumberOfStartedImports()
{
ModelSettings testSettings = createDefaultTestSettingsFile(serTestFile1);
testSettings.setNumberOfStartedImports(88);
compareSettings(testSettings, true, 88, 77, createDefaultAlbumNamesToGroup());
doubleCheckSettings(serTestFile1, true, 88, 77, createDefaultAlbumNamesToGroup());
serTestFile1.delete();
}
@Test
public void testSetRecomputeTaskId()
{
ModelSettings testSettings = createDefaultTestSettingsFile(serTestFile1);
testSettings.setRecomputeTaskId(11);
compareSettings(testSettings, true, 42, 11, createDefaultAlbumNamesToGroup());
doubleCheckSettings(serTestFile1, true, 42, 11, createDefaultAlbumNamesToGroup());
serTestFile1.delete();
}
@Test
public void testIncRecomputeTaskId()
{
ModelSettings testSettings = createDefaultTestSettingsFile(serTestFile1);
testSettings.incRecomputeTaskId();
compareSettings(testSettings, true, 42, 78, createDefaultAlbumNamesToGroup());
doubleCheckSettings(serTestFile1, true, 42, 78, createDefaultAlbumNamesToGroup());
serTestFile1.delete();
}
@Test
public void testResetRecomputeTaskId()
{
ModelSettings testSettings = createDefaultTestSettingsFile(serTestFile1);
testSettings.resetRecomputeTaskId();
compareSettings(testSettings, true, 42, 0, createDefaultAlbumNamesToGroup());
doubleCheckSettings(serTestFile1, true, 42, 0, createDefaultAlbumNamesToGroup());
serTestFile1.delete();
}
@Test
public void testAddAlbumNameToGroup()
{
ModelSettings testSettings = createDefaultTestSettingsFile(serTestFile1);
String albumNameToGroup = "Omega";
testSettings.addAlbumNameToGroup(albumNameToGroup);
HashSet<String> defaultAlbumNamesToGroup = createDefaultAlbumNamesToGroup();
HashSet<String> expectedAlbumNamesToGroup = new HashSet<String>();
for (String string : defaultAlbumNamesToGroup) {
expectedAlbumNamesToGroup.add(string);
}
expectedAlbumNamesToGroup.add(albumNameToGroup);
compareSettings(testSettings, true, 42, 77, expectedAlbumNamesToGroup);
doubleCheckSettings(serTestFile1, true, 42, 77, expectedAlbumNamesToGroup);
serTestFile1.delete();
}
}