/*******************************************************************************
* (C) Copyright 2010 IBM Corp. 2010
* 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:
* Thavidu Ranatunga (IBM) - Initial implementation.
*******************************************************************************/
package org.eclipse.linuxtools.internal.perf.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.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.perf.PerfCore;
import org.eclipse.linuxtools.internal.perf.PerfPlugin;
import org.eclipse.linuxtools.internal.perf.PerfVersion;
import org.eclipse.linuxtools.internal.perf.launch.PerfEventsTab;
import org.eclipse.linuxtools.internal.perf.launch.PerfOptionsTab;
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 LaunchTabsTest extends AbstractTest {
private ILaunchConfiguration config;
private Shell testShell;
@Before
public void setUp() throws Exception {
proj = createProjectAndBuild(FrameworkUtil.getBundle(this.getClass()), "fibTest"); //$NON-NLS-1$
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(PerfPlugin.LAUNCHCONF_ID);
}
@Override
protected void setProfileAttributes(ILaunchConfigurationWorkingCopy wc) {
PerfEventsTab eventsTab = new PerfEventsTab();
PerfOptionsTab optionsTab = new PerfOptionsTab();
eventsTab.setDefaults(wc);
optionsTab.setDefaults(wc);
}
//getter functions for otherwise unaccessible member variables
private static class TestOptionsTab extends PerfOptionsTab {
protected Text getTxtKernelLocation() { return txtKernelLocation; }
protected Button getChkRecordRealtime() { return chkRecordRealtime; }
protected Button getChkRecordVerbose() { return chkRecordVerbose; }
protected Button getChkSourceLineNumbers() { return chkSourceLineNumbers; }
protected Button getChkKernelSourceLineNumbers() { return chkKernelSourceLineNumbers; }
protected Button getChkMultiplexEvents() { return chkMultiplexEvents; }
protected Button getChkModuleSymbols() { return chkModuleSymbols; }
protected Button getChkHideUnresolvedSymbols() { return chkHideUnresolvedSymbols; }
}
@Test
public void testOptionsTab() throws CoreException {
ILaunchConfigurationWorkingCopy wc = config.getWorkingCopy();
TestOptionsTab tab = new TestOptionsTab();
tab.createControl(new Shell());
assertNotNull(tab.getImage());
assertNotNull(tab.getName());
//default config
tab.setDefaults(wc);
tab.initializeFrom(config);
assertTrue(tab.isValid(config));
Button rrCheck = tab.getChkRecordRealtime();
rrCheck.setSelection(true);
rrCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_Record_Realtime, false));
rrCheck.setSelection(false);
rrCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_Record_Realtime, true));
Button rvCheck = tab.getChkRecordVerbose();
rvCheck.setSelection(true);
rvCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_Record_Verbose, false));
rvCheck.setSelection(false);
rvCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_Record_Verbose, true));
Button slcCheck = tab.getChkSourceLineNumbers();
slcCheck.setSelection(true);
slcCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_SourceLineNumbers, false));
slcCheck.setSelection(false);
slcCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_SourceLineNumbers, true));
Button kslcCheck = tab.getChkKernelSourceLineNumbers();
kslcCheck.setSelection(true);
kslcCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_Kernel_SourceLineNumbers, false));
kslcCheck.setSelection(false);
kslcCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_Kernel_SourceLineNumbers, true));
PerfVersion version = PerfCore.getPerfVersion(config);
Button meCheck = tab.getChkMultiplexEvents();
if (meCheck.isEnabled()) {
assertTrue (version != null && new PerfVersion(2, 6, 35).isNewer(version));
meCheck.setSelection(true);
meCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_Multiplex, false));
meCheck.setSelection(false);
meCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_Multiplex, true));
} else {
assertTrue (version == null || !new PerfVersion(2, 6, 35).isNewer(version));
}
Button msCheck = tab.getChkModuleSymbols();
msCheck.setSelection(true);
msCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_ModuleSymbols, false));
msCheck.setSelection(false);
msCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_ModuleSymbols, true));
Button husCheck = tab.getChkHideUnresolvedSymbols();
husCheck.setSelection(true);
husCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(true, config.getAttribute(PerfPlugin.ATTR_HideUnresolvedSymbols, false));
husCheck.setSelection(false);
husCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertEquals(false, config.getAttribute(PerfPlugin.ATTR_HideUnresolvedSymbols, true));
rrCheck.setSelection(true);
rrCheck.notifyListeners(SWT.Selection, null);
rvCheck.setSelection(true);
rvCheck.notifyListeners(SWT.Selection, null);
slcCheck.setSelection(true);
slcCheck.notifyListeners(SWT.Selection, null);
kslcCheck.setSelection(true);
kslcCheck.notifyListeners(SWT.Selection, null);
meCheck.setSelection(true);
meCheck.notifyListeners(SWT.Selection, null);
msCheck.setSelection(true);
msCheck.notifyListeners(SWT.Selection, null);
husCheck.setSelection(true);
husCheck.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
tab.initializeFrom(config);
assertTrue(rrCheck.getSelection());
assertTrue(rvCheck.getSelection());
assertTrue(slcCheck.getSelection());
assertTrue(kslcCheck.getSelection());
assertTrue(meCheck.getSelection());
assertTrue(msCheck.getSelection());
assertTrue(husCheck.getSelection());
Text klocText = tab.getTxtKernelLocation();
klocText.setText("doesntexist"); //$NON-NLS-1$
klocText.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertFalse(tab.isValid(config));
klocText.setText(""); //$NON-NLS-1$
klocText.notifyListeners(SWT.Selection, null);
performApply(tab, wc);
assertTrue(tab.isValid(config));
}
//getter functions for otherwise unaccessible member variables
private static class TestEventsTab extends PerfEventsTab {
public Button get_chkDefaultEvent() { return chkDefaultEvent; }
}
@Test
public void testEventsTab() throws CoreException {
TestEventsTab tab = new TestEventsTab();
tab.createControl(new Shell());
assertNotNull(tab.getImage());
assertNotNull(tab.getName());
//default config
tab.setDefaults(config.getWorkingCopy());
tab.initializeFrom(config);
assertTrue(tab.isValid(config));
assertTrue(tab.get_chkDefaultEvent().getSelection());
tab.get_chkDefaultEvent().notifyListeners(SWT.Selection, null);
tab.get_chkDefaultEvent().setSelection(false);
tab.get_chkDefaultEvent().notifyListeners(SWT.Selection, null);
assertFalse(tab.get_chkDefaultEvent().getSelection());
}
public void performApply (ILaunchConfigurationTab tab, ILaunchConfigurationWorkingCopy wc) throws CoreException {
tab.performApply(wc);
wc.doSave();
}
}