/*******************************************************************************
* Copyright (c) 2008, 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:
* Elliott Baron <ebaron@redhat.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.valgrind.massif.tests;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifHeapTreeNode;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifPlugin;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot;
import org.eclipse.linuxtools.internal.valgrind.massif.MassifSnapshot.SnapshotType;
import org.eclipse.linuxtools.internal.valgrind.tests.AbstractValgrindTest;
import org.eclipse.linuxtools.internal.valgrind.ui.ValgrindUIPlugin;
import org.eclipse.linuxtools.internal.valgrind.ui.ValgrindViewPart;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.ITextEditor;
public abstract class AbstractMassifTest extends AbstractValgrindTest {
@Override
protected String getToolID() {
return MassifPlugin.TOOL_ID;
}
protected void checkFile(IProject proj, MassifHeapTreeNode node) {
IEditorPart editor = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
IEditorInput input = editor.getEditorInput();
assertTrue(input instanceof IFileEditorInput);
IFileEditorInput fileInput = (IFileEditorInput) input;
IResource expectedResource = proj.findMember(node.getFilename());
assertNotNull(expectedResource);
File expectedFile = expectedResource.getLocation().toFile();
File actualFile = fileInput.getFile().getLocation().toFile();
assertEquals(expectedFile, actualFile);
}
protected void checkLine(MassifHeapTreeNode node) {
IEditorPart editor = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
assertTrue(editor instanceof ITextEditor);
ITextEditor textEditor = (ITextEditor) editor;
ISelection selection = textEditor.getSelectionProvider().getSelection();
assertTrue(selection instanceof TextSelection);
TextSelection textSelection = (TextSelection) selection;
int line = textSelection.getStartLine() + 1; // zero-indexed
assertEquals(node.getLine(), line);
}
/**
* Check snapshots contain the expected used bytes.
*
* @param snapshots MassifSnapshots to check
* @param usefulBytesDelta scale of useful bytes
* @param extraBytesDelta scale of extra bytes
*/
protected void checkSnapshots(MassifSnapshot[] snapshots, int usefulBytesDelta, int extraBytesDelta){
long expectedHeapBytes = 0;
long expectedHeapExtraBytes = 0;
boolean pastPeakUsage = false;
for (MassifSnapshot snapshot : snapshots) {
if (snapshot.getTime() == 0) {
// no need to update expected values
} else if (snapshot.getType().compareTo(SnapshotType.PEAK) == 0) {
pastPeakUsage = true;
// no need to update expected values
} else if (!pastPeakUsage) {
expectedHeapBytes += usefulBytesDelta;
expectedHeapExtraBytes += extraBytesDelta;
} else {
// past the peak , heap bytes used begin to decrease
expectedHeapBytes -= usefulBytesDelta;
expectedHeapExtraBytes -= extraBytesDelta;
}
assertEquals(expectedHeapBytes, snapshot.getHeapBytes());
assertEquals(expectedHeapExtraBytes, snapshot.getHeapExtra());
assertEquals(expectedHeapBytes + expectedHeapExtraBytes, snapshot.getTotal());
}
}
protected IAction getToolbarAction(String actionId) {
IAction result = null;
ValgrindViewPart view = ValgrindUIPlugin.getDefault().getView();
IToolBarManager manager = view.getViewSite().getActionBars()
.getToolBarManager();
for (IContributionItem item : manager.getItems()) {
if (item instanceof ActionContributionItem) {
ActionContributionItem actionItem = (ActionContributionItem) item;
if (actionItem.getAction().getId()
.equals(actionId)) {
result = actionItem.getAction();
}
}
}
return result;
}
}