diff --git a/testsrunner/org.eclipse.cdt.testsrunner.boost/src/org/eclipse/cdt/testsrunner/internal/boost/BoostXmlLogHandler.java b/testsrunner/org.eclipse.cdt.testsrunner.boost/src/org/eclipse/cdt/testsrunner/internal/boost/BoostXmlLogHandler.java index 08b40e823f6..e8c25f46148 100644 --- a/testsrunner/org.eclipse.cdt.testsrunner.boost/src/org/eclipse/cdt/testsrunner/internal/boost/BoostXmlLogHandler.java +++ b/testsrunner/org.eclipse.cdt.testsrunner.boost/src/org/eclipse/cdt/testsrunner/internal/boost/BoostXmlLogHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Anton Gorenkov + * Copyright (c) 2011, 2013 Anton Gorenkov and others. * 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 @@ -7,6 +7,7 @@ * * Contributors: * Anton Gorenkov - initial API and implementation + * Marc-Andre Laperle (Ericsson) *******************************************************************************/ package org.eclipse.cdt.testsrunner.internal.boost; @@ -87,7 +88,14 @@ public class BoostXmlLogHandler extends DefaultHandler { /** Current test case status. */ private ITestItem.Status testStatus; - + /** + * Keep track of the last test case name so that we can handle + * parameterized test cases which have the same name + */ + private String lastTestCaseName = ""; //$NON-NLS-1$ + private static final int SAME_TEST_CASE_NAME_COUNT_START = 2; + private int sameTestCaseNameCount = SAME_TEST_CASE_NAME_COUNT_START; + BoostXmlLogHandler(ITestModelUpdater modelUpdater) { this.modelUpdater = modelUpdater; } @@ -102,6 +110,15 @@ public class BoostXmlLogHandler extends DefaultHandler { } else if (qName == XML_NODE_TEST_CASE) { String testCaseName = attrs.getValue(XML_ATTR_TEST_CASE_NAME); + + if (lastTestCaseName.equals(testCaseName)) { + testCaseName += " (" + sameTestCaseNameCount + ")"; //$NON-NLS-1$ //$NON-NLS-2$ + ++sameTestCaseNameCount; + } else { + lastTestCaseName = testCaseName; + sameTestCaseNameCount = SAME_TEST_CASE_NAME_COUNT_START; + } + modelUpdater.enterTestCase(testCaseName); testStatus = Status.Passed; diff --git a/testsrunner/org.eclipse.cdt.testsrunner.test/src/org/eclipse/cdt/testsrunner/testsrunners/BoostTestCase.java b/testsrunner/org.eclipse.cdt.testsrunner.test/src/org/eclipse/cdt/testsrunner/testsrunners/BoostTestCase.java index 053a5ea553c..679840b0a8a 100644 --- a/testsrunner/org.eclipse.cdt.testsrunner.test/src/org/eclipse/cdt/testsrunner/testsrunners/BoostTestCase.java +++ b/testsrunner/org.eclipse.cdt.testsrunner.test/src/org/eclipse/cdt/testsrunner/testsrunners/BoostTestCase.java @@ -1,12 +1,13 @@ /******************************************************************************* - * Copyright (c) 2011 Anton Gorenkov + * Copyright (c) 2011, 2013 Anton Gorenkov and others. * 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: - * Anton Gorenkov - initial implementation + * Anton Gorenkov - initial implementation + * Marc-Andre Laperle (Ericsson) *******************************************************************************/ package org.eclipse.cdt.testsrunner.testsrunners; @@ -478,4 +479,33 @@ public class BoostTestCase extends BaseTestCase { expectTestingException(); } + // + // + // + // + // + // + // + // + // + // + // + // + // + // + public void testParameterizedTests() { + mockModelUpdater.skipCalls("setTestStatus"); + mockModelUpdater.enterTestSuite("MainTS"); + mockModelUpdater.enterTestCase("test_function"); + mockModelUpdater.exitTestCase(); + mockModelUpdater.enterTestCase("test_function (2)"); + mockModelUpdater.exitTestCase(); + mockModelUpdater.enterTestCase("test_function (3)"); + mockModelUpdater.exitTestCase(); + mockModelUpdater.enterTestCase("another_test_function"); + mockModelUpdater.exitTestCase(); + mockModelUpdater.enterTestCase("another_test_function (2)"); + mockModelUpdater.exitTestCase(); + mockModelUpdater.exitTestSuite(); + } } diff --git a/testsrunner/org.eclipse.cdt.testsrunner/src/org/eclipse/cdt/testsrunner/internal/model/TestModelManager.java b/testsrunner/org.eclipse.cdt.testsrunner/src/org/eclipse/cdt/testsrunner/internal/model/TestModelManager.java index 0db8d5af989..0a74979c9d2 100644 --- a/testsrunner/org.eclipse.cdt.testsrunner/src/org/eclipse/cdt/testsrunner/internal/model/TestModelManager.java +++ b/testsrunner/org.eclipse.cdt.testsrunner/src/org/eclipse/cdt/testsrunner/internal/model/TestModelManager.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Anton Gorenkov + * Copyright (c) 2011, 2013 Anton Gorenkov and others. * 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 @@ -7,6 +7,7 @@ * * Contributors: * Anton Gorenkov - initial API and implementation + * Marc-Andre Laperle (Ericsson) *******************************************************************************/ package org.eclipse.cdt.testsrunner.internal.model; @@ -235,7 +236,9 @@ public class TestModelManager implements ITestModelUpdater, ITestModelAccessor { for (int childIndex = 0; childIndex < lastInsertIndex; childIndex++) { newTestItem = checkTestItem(children.get(childIndex), name); if (newTestItem != null) { - children.add(lastInsertIndex, children.remove(childIndex)); + TestItem removed = children.remove(childIndex); + lastInsertIndex = Math.min(lastInsertIndex, children.size()); + children.add(lastInsertIndex, removed); notifyAboutChildrenUpdate(currTestSuite); break; }