Java tutorial
/******************************************************************************* * Copyright (c) 2010, SAP AG. * 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: * Mathias Kinzler (SAP AG) - initial implementation *******************************************************************************/ package org.eclipse.egit.ui.prefpages.configuration; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.egit.ui.UIText; import org.eclipse.egit.ui.common.EGitTestCase; import org.eclipse.egit.ui.test.Eclipse; import org.eclipse.egit.ui.test.TestUtil; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jgit.storage.file.FileBasedConfig; import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.SystemReader; import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException; import org.eclipse.swtbot.swt.finder.junit.SWTBotJunit4ClassRunner; import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree; import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem; 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; @RunWith(SWTBotJunit4ClassRunner.class) public class GlobalConfigurationPageTest { private static final String TESTSECTION = "testsection"; private static final String TESTSUBSECTION = "testsubsection"; private static final String TESTNAME = "testname"; private static final SWTWorkbenchBot bot = new SWTWorkbenchBot(); private static final TestUtil util = new TestUtil(); private static FileBasedConfig config; private SWTBotShell preferencePage; @BeforeClass public static void beforeClass() throws Exception { EGitTestCase.closeWelcomePage(); config = SystemReader.getInstance().openUserConfig(FS.DETECTED); config.load(); } @Before public void before() throws Exception { config.unsetSection(TESTSECTION, TESTSUBSECTION); config.unsetSection(TESTSECTION, null); config.save(); getGitConfigurationPreferencePage(); } private void getGitConfigurationPreferencePage() { preferencePage = new Eclipse().openPreferencePage(preferencePage); SWTBotTreeItem team = preferencePage.bot().tree().getTreeItem("Team"); team.expand().getNode(util.getPluginLocalizedValue("GitPreferences_name")).expand() .getNode(util.getPluginLocalizedValue("ConfigurationPage.name")).select(); } @After public void after() throws Exception { if (preferencePage != null) preferencePage.close(); } @AfterClass public static void afterTest() throws Exception { // reset saved preferences state SWTBotShell preferencePage = new Eclipse().openPreferencePage(null); preferencePage.bot().tree(0).getTreeItem("General").select(); preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); } @Test public void testNodes() throws Exception { SWTBotTree configTree = preferencePage.bot().tree(1); for (String section : config.getSections()) { SWTBotTreeItem sectionItem = configTree.getTreeItem(section); for (String subsection : config.getSubsections(section)) { SWTBotTreeItem subsectionItem = sectionItem.getNode(subsection); for (String entryName : config.getNames(section, subsection)) { try { subsectionItem.getNode(entryName); } catch (WidgetNotFoundException e) { subsectionItem.getNode(entryName + "[0]"); } } } for (String entryName : config.getNames(section)) { try { sectionItem.getNode(entryName); } catch (WidgetNotFoundException e) { sectionItem.getNode(entryName + "[0]"); } } } } @Test public void testAddSectionEntry() throws Exception { preferencePage.bot().button(UIText.ConfigurationEditorComponent_NewValueButton).click(); SWTBotShell addDialog = bot.shell(UIText.AddConfigEntryDialog_AddConfigTitle); addDialog.activate(); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel).setText(TESTSECTION + "." + TESTNAME); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_ValueLabel).setText("true"); // close the dialog addDialog.bot().button(IDialogConstants.OK_LABEL).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); assertTrue("Missing section", config.getSections().contains(TESTSECTION)); assertTrue("Missing name", config.getNames(TESTSECTION).contains(TESTNAME)); assertEquals("Wrong value", "true", config.getString(TESTSECTION, null, TESTNAME)); } @Test public void testAddSubSectionEntry() throws Exception { preferencePage.bot().button(UIText.ConfigurationEditorComponent_NewValueButton).click(); SWTBotShell addDialog = bot.shell(UIText.AddConfigEntryDialog_AddConfigTitle); addDialog.activate(); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel) .setText(TESTSECTION + "." + TESTSUBSECTION + "." + TESTNAME); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_ValueLabel).setText("true"); // close the dialog addDialog.bot().button(IDialogConstants.OK_LABEL).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); assertTrue("Missing section", config.getSections().contains(TESTSECTION)); assertTrue("Missing subsection", config.getSubsections(TESTSECTION).contains(TESTSUBSECTION)); assertTrue("Missing name", config.getNames(TESTSECTION, TESTSUBSECTION).contains(TESTNAME)); assertEquals("Wrong value", "true", config.getString(TESTSECTION, TESTSUBSECTION, TESTNAME)); } @Test public void testAddSubSectionEntryWithSuggestion() throws Exception { config.setString(TESTSECTION, TESTSUBSECTION, TESTNAME, "true"); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTSUBSECTION).select(); preferencePage.bot().button(UIText.ConfigurationEditorComponent_NewValueButton).click(); SWTBotShell addDialog = bot.shell(UIText.AddConfigEntryDialog_AddConfigTitle); addDialog.activate(); String suggested = addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel).getText(); assertEquals(TESTSECTION + "." + TESTSUBSECTION + ".", suggested); addDialog.close(); } @Test public void testChangeValue() throws Exception { config.setString(TESTSECTION, null, TESTNAME, "true"); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTNAME).select(); String text = preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).getText(); assertEquals("true", text); preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).setText("false"); bot.button(UIText.ConfigurationEditorComponent_ChangeButton).click(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTNAME).select(); text = preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).getText(); assertEquals("false", text); List<String> list = new ArrayList<String>(1); list.add("first"); list.add("second"); config.setStringList(TESTSECTION, null, TESTNAME, list); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTNAME + "[1]").select(); text = preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).getText(); assertEquals("second", text); preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).setText("new"); bot.button(UIText.ConfigurationEditorComponent_ChangeButton).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); assertEquals(1, Arrays.asList(config.getStringList(TESTSECTION, null, TESTNAME)).indexOf("new")); } @Test public void testAddValue() throws Exception { config.setString(TESTSECTION, null, TESTNAME, "true"); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTNAME).select(); preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).setText("second"); bot.button(UIText.ConfigurationEditorComponent_AddButton).click(); // press apply preferencePage.bot().button(JFaceResources.getString("apply")).click(); config.load(); List<String> values = Arrays.asList(config.getStringList(TESTSECTION, null, TESTNAME)); assertEquals("Wrong number of values", 2, values.size()); assertTrue(values.contains("true")); assertTrue(values.contains("second")); // add another value preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTNAME + "[1]").select(); preferencePage.bot().textWithLabel(UIText.ConfigurationEditorComponent_ValueLabel).setText("middle"); bot.button(UIText.ConfigurationEditorComponent_AddButton).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); values = Arrays.asList(config.getStringList(TESTSECTION, null, TESTNAME)); assertEquals("Wrong number of values", 3, values.size()); assertTrue(values.contains("true")); assertEquals(1, values.indexOf("middle")); assertTrue(values.contains("second")); } @Test public void testCantCreateSameEntryValue() throws Exception { config.setString(TESTSECTION, null, TESTNAME, "already"); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().button(UIText.ConfigurationEditorComponent_NewValueButton).click(); SWTBotShell addDialog = bot.shell(UIText.AddConfigEntryDialog_AddConfigTitle); addDialog.activate(); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel).setText(TESTSECTION + "." + TESTNAME); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_ValueLabel).setText("true"); assertTrue(!addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.close(); } @Test public void testChecksForKey() throws Exception { preferencePage.bot().button(UIText.ConfigurationEditorComponent_NewValueButton).click(); SWTBotShell addDialog = bot.shell(UIText.AddConfigEntryDialog_AddConfigTitle); addDialog.activate(); // neither key nor value set assertTrue(!addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_ValueLabel).setText("Somevalue"); // key empty assertTrue(!addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel).setText(TESTSECTION); // no dot assertTrue(!addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel).setText(TESTSECTION + "." + TESTNAME); // ok: one dot assertTrue(addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel) .setText(TESTSECTION + "." + TESTSUBSECTION + "." + TESTNAME); // ok: two dots assertTrue(addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.bot().textWithLabel(UIText.AddConfigEntryDialog_KeyLabel) .setText(TESTSECTION + "." + TESTSUBSECTION + "." + TESTNAME + "." + TESTNAME); // too many dots assertTrue(!addDialog.bot().button(IDialogConstants.OK_LABEL).isEnabled()); addDialog.close(); } @Test public void testRemoveValue() throws Exception { List<String> values = new ArrayList<String>(2); values.add("true"); values.add("false"); config.setStringList(TESTSECTION, null, TESTNAME, values); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTNAME + "[0]").select(); bot.button(UIText.ConfigurationEditorComponent_DeleteButton).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); values = Arrays.asList(config.getStringList(TESTSECTION, null, TESTNAME)); assertEquals("Wrong number of values", 1, values.size()); assertTrue(values.contains("false")); } @Test public void testRemoveSubSection() throws Exception { List<String> values = new ArrayList<String>(2); values.add("true"); values.add("false"); config.setStringList(TESTSECTION, null, TESTNAME, values); config.setStringList(TESTSECTION, TESTSUBSECTION, TESTNAME, values); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).getNode(TESTSUBSECTION).select(); bot.button(UIText.ConfigurationEditorComponent_RemoveAllButton).click(); SWTBotShell confirm = bot.shell(UIText.ConfigurationEditorComponent_RemoveSubsectionTitle); confirm.activate(); confirm.bot().button(IDialogConstants.OK_LABEL).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); assertTrue("Subsection should be deleted", !config.getSubsections(TESTSECTION).contains(TESTSUBSECTION)); } @Test public void testRemoveSection() throws Exception { List<String> values = new ArrayList<String>(2); values.add("true"); values.add("false"); config.setStringList(TESTSECTION, null, TESTNAME, values); config.setStringList(TESTSECTION, TESTSUBSECTION, TESTNAME, values); config.save(); getGitConfigurationPreferencePage(); preferencePage.bot().tree(1).getTreeItem(TESTSECTION).select(); bot.button(UIText.ConfigurationEditorComponent_RemoveAllButton).click(); SWTBotShell confirm = bot.shell(UIText.ConfigurationEditorComponent_RemoveSectionTitle); confirm.activate(); confirm.bot().button(IDialogConstants.OK_LABEL).click(); // close the editor preferencePage.bot().button(IDialogConstants.OK_LABEL).click(); config.load(); assertTrue("Values in section should be deleted", config.getStringList(TESTSECTION, null, TESTNAME).length == 0); } @Test public void testOpenEditor() throws Exception { try { preferencePage.bot().button(UIText.ConfigurationEditorComponent_OpenEditorButton).click(); preferencePage.close(); assertEquals(config.getFile().getName(), bot.activeEditor().getTitle()); } finally { bot.activeEditor().close(); } } }