/*******************************************************************************
* Copyright (c) 2013 Red Hat Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Neil Guzman - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.rpm.createrepo.preference.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.linuxtools.internal.rpm.createrepo.Activator;
import org.eclipse.linuxtools.internal.rpm.createrepo.CreaterepoPreferenceConstants;
import org.eclipse.linuxtools.internal.rpm.createrepo.CreaterepoProject;
import org.eclipse.linuxtools.internal.rpm.createrepo.ICreaterepoChecksums;
import org.eclipse.linuxtools.internal.rpm.createrepo.ICreaterepoCompressionTypes;
import org.eclipse.linuxtools.internal.rpm.createrepo.Messages;
import org.eclipse.linuxtools.internal.rpm.createrepo.form.tests.ICreaterepoTestConstants;
import org.eclipse.linuxtools.internal.rpm.createrepo.form.tests.TestCreaterepoProject;
import org.eclipse.linuxtools.internal.rpm.createrepo.form.tests.TestUtils;
import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;
import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.osgi.service.prefs.BackingStoreException;
/**
* Tests for CreaterepoGeneralPropertyPage class.
*/
@RunWith(SWTBotJunit4ClassRunner.class)
public class CreaterepoGeneralPropertyPageTest {
private static TestCreaterepoProject testProject;
private static SWTWorkbenchBot bot;
private static SWTBotView navigator;
private CreaterepoProject project;
/**
* Initialize the test project.
*
* @throws CoreException
*/
@BeforeClass
public static void setUpBeforeClass() throws CoreException {
testProject = new TestCreaterepoProject();
assertTrue(testProject.getProject().exists());
bot = new SWTWorkbenchBot();
testProject.restoreDefaults();
try {
bot.shell(ICreaterepoTestConstants.MAIN_SHELL).activate();
} catch (WidgetNotFoundException e) {
// cannot activate main shell, continue anyways
}
TestUtils.openResourcePerspective(bot);
navigator = TestUtils.enterProjectFolder(bot);
}
/**
* Delete the project when tests are done.
*
* @throws CoreException
*/
@AfterClass
public static void tearDownAfterClass() throws CoreException {
TestUtils.exitProjectFolder(bot, navigator);
testProject.dispose();
assertFalse(testProject.getProject().exists());
}
/**
* Get the CreaterepoProject at the beginning of each test.
*
* @throws CoreException
* @throws IOException
*/
@Before
public void setUp() throws CoreException {
project = testProject.getCreaterepoProject();
assertNotNull(project);
// before doing anything with SWTBot, activate the main shell
try {
bot.shell(ICreaterepoTestConstants.MAIN_SHELL).activate();
} catch (WidgetNotFoundException e) {
// cannot activate main shell, continue anyways
}
openPropertyPage();
}
/**
* Restore the defaults for the general preference page.
*
* @throws BackingStoreException
*/
@After
public void tearDown() throws BackingStoreException {
try {
if (bot.shell(String.format(ICreaterepoTestConstants.PROPERTIES_SHELL,
ICreaterepoTestConstants.REPO_NAME)).isActive()) {
bot.shell(String.format(ICreaterepoTestConstants.PROPERTIES_SHELL,
ICreaterepoTestConstants.REPO_NAME)).close();
}
} catch (WidgetNotFoundException e) {
// cannot close property shell
}
testProject.restoreDefaults();
IEclipsePreferences pref = project.getEclipsePreferences();
pref.clear();
pref.flush();
assertEquals(0, pref.keys().length);
}
/**
* Test if all preferences modified in the general createrepo property
* page persist to project preferences.
*/
@Test
public void testChangePreferences() {
bot.checkBox(Messages.CreaterepoGeneralPropertyPage_projectSettings).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanChecksumName).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanGenerateSQLDB).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanIgnoreSymlinks).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanPrettyXML).click();
bot.textWithLabel(Messages.CreaterepoPreferencePage_numWorkers).setText("9"); //$NON-NLS-1$
bot.textWithLabel(Messages.CreaterepoPreferencePage_numChangelogLimit).setText("13"); //$NON-NLS-1$
bot.checkBox(Messages.CreaterepoPreferencePage_booleanCheckTS).click();
bot.radio(ICreaterepoChecksums.SHA512).click();
bot.radio(ICreaterepoCompressionTypes.XZ).click();
bot.button(ICreaterepoTestConstants.OK_BUTTON).click();
openPropertyPage();
IEclipsePreferences pref = project.getEclipsePreferences();
IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
assertEquals(prefStore.getBoolean(CreaterepoPreferenceConstants.PREF_GENERAL_ENABLED),
bot.checkBox(Messages.CreaterepoGeneralPropertyPage_projectSettings).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanChecksumName).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanGenerateSQLDB).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanIgnoreSymlinks).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanPrettyXML).isChecked());
assertEquals(pref.getInt(CreaterepoPreferenceConstants.PREF_WORKERS,
prefStore.getInt(CreaterepoPreferenceConstants.PREF_WORKERS)),
Integer.parseInt(bot.textWithLabel(Messages.CreaterepoPreferencePage_numWorkers).getText()));
assertEquals(pref.getInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT,
prefStore.getInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT)),
Integer.parseInt(bot.textWithLabel(Messages.CreaterepoPreferencePage_numChangelogLimit).getText()));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanCheckTS).isChecked());
assertTrue(bot.radio(pref.get(CreaterepoPreferenceConstants.PREF_CHECKSUM,
prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_CHECKSUM))).isSelected());
assertTrue(bot.radio(pref.get(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE,
prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE))).isSelected());
}
/**
* Test if all preferences modified in the general createrepo property
* page will reset to default.
*/
@Test
public void testRestoreDefaults() {
bot.checkBox(Messages.CreaterepoGeneralPropertyPage_projectSettings).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanChecksumName).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanGenerateSQLDB).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanIgnoreSymlinks).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanPrettyXML).click();
bot.textWithLabel(Messages.CreaterepoPreferencePage_numWorkers).setText("9"); //$NON-NLS-1$
bot.textWithLabel(Messages.CreaterepoPreferencePage_numChangelogLimit).setText("13"); //$NON-NLS-1$
bot.checkBox(Messages.CreaterepoPreferencePage_booleanCheckTS).click();
bot.radio(ICreaterepoChecksums.SHA512).click();
bot.radio(ICreaterepoCompressionTypes.XZ).click();
bot.button(ICreaterepoTestConstants.OK_BUTTON).click();
openPropertyPage();
bot.button(ICreaterepoTestConstants.DEFAULTS).click();
bot.button(ICreaterepoTestConstants.OK_BUTTON).click();
IEclipsePreferences pref = project.getEclipsePreferences();
IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
assertTrue(prefStore.isDefault(CreaterepoPreferenceConstants.PREF_GENERAL_ENABLED));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME)),
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB)),
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS)),
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML)),
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML));
assertEquals(pref.getInt(CreaterepoPreferenceConstants.PREF_WORKERS,
prefStore.getInt(CreaterepoPreferenceConstants.PREF_WORKERS)),
prefStore.getDefaultInt(CreaterepoPreferenceConstants.PREF_WORKERS));
assertEquals(pref.getInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT,
prefStore.getInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT)),
prefStore.getDefaultInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS)),
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS));
assertEquals(pref.get(CreaterepoPreferenceConstants.PREF_CHECKSUM, prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_CHECKSUM)),
prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_CHECKSUM));
assertEquals(pref.get(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE, prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE)),
prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE));
}
/**
* Test if all preferences stay the same as it was after pressing cancel
* instead of ok.
*/
@Test
public void testCancel() {
bot.checkBox(Messages.CreaterepoGeneralPropertyPage_projectSettings).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanChecksumName).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanGenerateSQLDB).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanIgnoreSymlinks).click();
bot.checkBox(Messages.CreaterepoPreferencePage_booleanPrettyXML).click();
bot.textWithLabel(Messages.CreaterepoPreferencePage_numWorkers).setText("9"); //$NON-NLS-1$
bot.textWithLabel(Messages.CreaterepoPreferencePage_numChangelogLimit).setText("13"); //$NON-NLS-1$
bot.checkBox(Messages.CreaterepoPreferencePage_booleanCheckTS).click();
bot.radio(ICreaterepoChecksums.SHA512).click();
bot.radio(ICreaterepoCompressionTypes.XZ).click();
bot.button(ICreaterepoTestConstants.OK_BUTTON).click();
openPropertyPage();
bot.button(ICreaterepoTestConstants.DEFAULTS).click();
bot.button(ICreaterepoTestConstants.CANCEL_BUTTON).click();
openPropertyPage();
IEclipsePreferences pref = project.getEclipsePreferences();
IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
assertEquals(prefStore.getBoolean(CreaterepoPreferenceConstants.PREF_GENERAL_ENABLED),
bot.checkBox(Messages.CreaterepoGeneralPropertyPage_projectSettings).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_UNIQUE_MD_NAME)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanChecksumName).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_GENERATE_DB)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanGenerateSQLDB).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_IGNORE_SYMLINKS)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanIgnoreSymlinks).isChecked());
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_PRETTY_XML)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanPrettyXML).isChecked());
assertEquals(pref.getInt(CreaterepoPreferenceConstants.PREF_WORKERS,
prefStore.getInt(CreaterepoPreferenceConstants.PREF_WORKERS)),
Integer.parseInt(bot.textWithLabel(Messages.CreaterepoPreferencePage_numWorkers).getText()));
assertEquals(pref.getInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT,
prefStore.getInt(CreaterepoPreferenceConstants.PREF_CHANGELOG_LIMIT)),
Integer.parseInt(bot.textWithLabel(Messages.CreaterepoPreferencePage_numChangelogLimit).getText()));
assertEquals(pref.getBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS,
prefStore.getDefaultBoolean(CreaterepoPreferenceConstants.PREF_CHECK_TS)),
bot.checkBox(Messages.CreaterepoPreferencePage_booleanCheckTS).isChecked());
assertTrue(bot.radio(pref.get(CreaterepoPreferenceConstants.PREF_CHECKSUM,
prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_CHECKSUM))).isSelected());
assertTrue(bot.radio(pref.get(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE,
prefStore.getDefaultString(CreaterepoPreferenceConstants.PREF_COMPRESSION_TYPE))).isSelected());
}
/**
* Open the property page.
*/
private static void openPropertyPage() {
TestUtils.openPropertyPage(bot, navigator);
bot.tree().select(ICreaterepoTestConstants.CREATEREPO_CATEGORY);
}
}