/******************************************************************************* * 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.memcheck.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.eclipse.linuxtools.internal.valgrind.core.ValgrindStackFrame; import org.eclipse.linuxtools.internal.valgrind.memcheck.MemcheckPlugin; import org.eclipse.linuxtools.internal.valgrind.tests.AbstractValgrindTest; import org.eclipse.linuxtools.valgrind.core.IValgrindMessage; public abstract class AbstractMemcheckTest extends AbstractValgrindTest { @Override public String getToolID() { return MemcheckPlugin.TOOL_ID; } /** * Check messages appear as expected for the specified test. * * @param messages IValgrindMessage messages * @param testName test name */ public void checkTestMessages(IValgrindMessage[] messages, String testName) { assertTrue(messages.length > 0); String lostBytesMsg = "10 bytes in 1 blocks are definitely lost in loss record 1 of 1"; //$NON-NLS-1$ String invalidReadMsg = "Invalid read of size 1"; //$NON-NLS-1$ String invalidWriteMsg = "Invalid write of size 1"; //$NON-NLS-1$ for (IValgrindMessage message : messages) { for (IValgrindMessage child : message.getChildren()) { if (child instanceof ValgrindStackFrame) { ValgrindStackFrame stackFrameMsg = (ValgrindStackFrame) child; // check expected error messages exist for basicTest (child process in multiProcTest) if (("testNumErrors".equals(testName) || "testExec".equals(testName)) //$NON-NLS-1$ //$NON-NLS-2$ && "test.c".equals(stackFrameMsg.getFile())) { //$NON-NLS-1$ assertTrue(stackFrameMsg.getLine() >= 15); switch (stackFrameMsg.getLine()) { case 15: assertTrue(message.getText().contains(lostBytesMsg)); break; case 16: assertTrue(message.getText().contains(invalidReadMsg)); break; case 17: assertTrue(message.getText().contains(invalidWriteMsg)); break; default: break; } } // check expected error messages exist for parent process in multiProcTest if (("testNoExec".equals(testName) || "testExec".equals(testName)) //$NON-NLS-1$ //$NON-NLS-2$ && "parent.c".equals(stackFrameMsg.getFile())) { //$NON-NLS-1$ assertEquals(8, stackFrameMsg.getLine()); assertTrue(child.getParent().getText().contains(lostBytesMsg)); } } } } } }