/******************************************************************************* * Copyright (c) 2009 Red Hat, Inc. * 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: * Kent Sebastian <ksebasti@redhat.com> - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.oprofile.launch.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 org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.ILaunchConfigurationTab; import org.eclipse.linuxtools.internal.oprofile.core.daemon.OprofileDaemonOptions; import org.eclipse.linuxtools.internal.oprofile.launch.OprofileLaunchPlugin; import org.eclipse.linuxtools.internal.oprofile.launch.configuration.OprofileSetupTab; import org.eclipse.linuxtools.oprofile.launch.tests.utils.LaunchTestingOptions; import org.eclipse.linuxtools.oprofile.launch.tests.utils.OprofileTestingEventConfigTab; import org.eclipse.linuxtools.profiling.tests.AbstractTest; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.osgi.framework.FrameworkUtil; public class TestSetup extends AbstractTest { protected ILaunchConfiguration config; protected Shell testShell; protected IProject project; @Before public void setUp() throws Exception { proj = createProjectAndBuild(FrameworkUtil.getBundle(this.getClass()), "primeTest"); //$NON-NLS-1$ project = proj.getProject(); config = createConfiguration(proj.getProject()); testShell = new Shell(Display.getDefault()); testShell.setLayout(new GridLayout()); } @After public void tearDown() throws Exception { testShell.dispose(); deleteProject(proj); } @Override protected ILaunchConfigurationType getLaunchConfigType() { return getLaunchManager().getLaunchConfigurationType(OprofileLaunchPlugin.ID_LAUNCH_PROFILE); } @Override protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) { OprofileTestingEventConfigTab configTab = new OprofileTestingEventConfigTab(); OprofileSetupTab setupTab = new OprofileSetupTab(); configTab.setOprofileProject(proj.getProject()); configTab.setDefaults(wc); setupTab.setDefaults(wc); } //getter functions for otherwise unaccessible member variables private class OprofileTestingSetupTab extends OprofileSetupTab { @Override protected IProject getOprofileProject() { return proj.getProject(); } @Override public void setDefaults(ILaunchConfigurationWorkingCopy config) { options = new LaunchTestingOptions(); options.saveConfiguration(config); } protected Button getKernelCheck() { return checkSeparateKernel; } protected Button getLibraryCheck() { return checkSeparateLibrary; } protected Text getTextKernelImage() { return kernelImageFileText; } } @Test public void testSetupTab() throws CoreException { OprofileTestingSetupTab tab = new OprofileTestingSetupTab(); tab.createControl(new Shell()); assertNotNull(tab.getImage()); assertNotNull(tab.getName()); ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy(); //default config tab.setDefaults(wc); tab.initializeFrom(config); Button libraryCheck = tab.getLibraryCheck(); libraryCheck.setSelection(true); libraryCheck.notifyListeners(SWT.Selection, null); performApply(tab, wc); assertEquals(OprofileDaemonOptions.SEPARATE_LIBRARY, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); libraryCheck.setSelection(false); libraryCheck.notifyListeners(SWT.Selection, null); performApply(tab, wc); assertEquals(OprofileDaemonOptions.SEPARATE_NONE, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); Button kernelCheck = tab.getKernelCheck(); kernelCheck.setSelection(true); kernelCheck.notifyListeners(SWT.Selection, null); performApply(tab, wc); assertEquals(OprofileDaemonOptions.SEPARATE_KERNEL, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); kernelCheck.setSelection(false); kernelCheck.notifyListeners(SWT.Selection, null); performApply(tab, wc); assertEquals(OprofileDaemonOptions.SEPARATE_NONE, config.getAttribute(OprofileLaunchPlugin.ATTR_SEPARATE_SAMPLES, -1)); libraryCheck.setSelection(true); libraryCheck.notifyListeners(SWT.Selection, null); kernelCheck.setSelection(true); kernelCheck.notifyListeners(SWT.Selection, null); performApply(tab, wc); tab.initializeFrom(config); assertTrue(libraryCheck.getSelection()); assertTrue(kernelCheck.getSelection()); Text kernelLocationText = tab.getTextKernelImage(); kernelLocationText.setText("doesntexist"); //$NON-NLS-1$ kernelLocationText.notifyListeners(SWT.Selection, null); performApply(tab, wc); assertFalse(tab.isValid(config)); kernelLocationText.setText(""); //$NON-NLS-1$ kernelLocationText.notifyListeners(SWT.Selection, null); performApply(tab, wc); assertTrue(tab.isValid(config)); } @Test public void testEventConfigTab() throws CoreException { OprofileTestingEventConfigTab tab = new OprofileTestingEventConfigTab(); tab.createControl(new Shell()); assertNotNull(tab.getImage()); assertNotNull(tab.getName()); tab.setDefaults(config.getWorkingCopy()); tab.initializeFrom(config); assertTrue(tab.isValid(config)); assertTrue(tab.getDefaultCheck().getSelection()); tab.getDefaultCheck().notifyListeners(SWT.Selection, null); tab.getDefaultCheck().setSelection(false); tab.getDefaultCheck().notifyListeners(SWT.Selection, null); ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy(); wc.setAttribute(OprofileLaunchPlugin.ATTR_USE_DEFAULT_EVENT, false); performApply(tab, wc); assertFalse(tab.isValid(config)); } private void performApply (ILaunchConfigurationTab tab , ILaunchConfigurationWorkingCopy wc) throws CoreException { tab.performApply(wc); wc.doSave(); } }