fork

Fork of cpputest by Rohit Grover

Committer:
rgrover1
Date:
Tue Jan 28 09:27:41 2014 +0000
Revision:
0:0b799af9d58e
Child:
1:4769360130ed
CppUTest unit test framework.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:0b799af9d58e 1 /*
rgrover1 0:0b799af9d58e 2 * Copyright (c) 2007, Michael Feathers, James Grenning and Bas Vodde
rgrover1 0:0b799af9d58e 3 * All rights reserved.
rgrover1 0:0b799af9d58e 4 *
rgrover1 0:0b799af9d58e 5 * Redistribution and use in source and binary forms, with or without
rgrover1 0:0b799af9d58e 6 * modification, are permitted provided that the following conditions are met:
rgrover1 0:0b799af9d58e 7 * * Redistributions of source code must retain the above copyright
rgrover1 0:0b799af9d58e 8 * notice, this list of conditions and the following disclaimer.
rgrover1 0:0b799af9d58e 9 * * Redistributions in binary form must reproduce the above copyright
rgrover1 0:0b799af9d58e 10 * notice, this list of conditions and the following disclaimer in the
rgrover1 0:0b799af9d58e 11 * documentation and/or other materials provided with the distribution.
rgrover1 0:0b799af9d58e 12 * * Neither the name of the <organization> nor the
rgrover1 0:0b799af9d58e 13 * names of its contributors may be used to endorse or promote products
rgrover1 0:0b799af9d58e 14 * derived from this software without specific prior written permission.
rgrover1 0:0b799af9d58e 15 *
rgrover1 0:0b799af9d58e 16 * THIS SOFTWARE IS PROVIDED BY THE EARLIER MENTIONED AUTHORS ``AS IS'' AND ANY
rgrover1 0:0b799af9d58e 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
rgrover1 0:0b799af9d58e 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rgrover1 0:0b799af9d58e 19 * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
rgrover1 0:0b799af9d58e 20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
rgrover1 0:0b799af9d58e 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
rgrover1 0:0b799af9d58e 22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
rgrover1 0:0b799af9d58e 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
rgrover1 0:0b799af9d58e 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
rgrover1 0:0b799af9d58e 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rgrover1 0:0b799af9d58e 26 */
rgrover1 0:0b799af9d58e 27
rgrover1 0:0b799af9d58e 28 #include "CppUTest/TestHarness.h"
rgrover1 0:0b799af9d58e 29 #include "CppUTest/CommandLineArguments.h"
rgrover1 0:0b799af9d58e 30 #include "CppUTest/PlatformSpecificFunctions.h"
rgrover1 0:0b799af9d58e 31
rgrover1 0:0b799af9d58e 32 CommandLineArguments::CommandLineArguments(int ac, const char** av) :
rgrover1 0:0b799af9d58e 33 ac_(ac), av_(av), verbose_(false), runTestsAsSeperateProcess_(false), repeat_(1), groupFilter_(""), nameFilter_(""), outputType_(OUTPUT_ECLIPSE)
rgrover1 0:0b799af9d58e 34 {
rgrover1 0:0b799af9d58e 35 }
rgrover1 0:0b799af9d58e 36
rgrover1 0:0b799af9d58e 37 CommandLineArguments::~CommandLineArguments()
rgrover1 0:0b799af9d58e 38 {
rgrover1 0:0b799af9d58e 39 }
rgrover1 0:0b799af9d58e 40
rgrover1 0:0b799af9d58e 41 bool CommandLineArguments::parse(TestPlugin* plugin)
rgrover1 0:0b799af9d58e 42 {
rgrover1 0:0b799af9d58e 43 bool correctParameters = true;
rgrover1 0:0b799af9d58e 44 for (int i = 1; i < ac_; i++) {
rgrover1 0:0b799af9d58e 45 SimpleString argument = av_[i];
rgrover1 0:0b799af9d58e 46 if (argument == "-v") verbose_ = true;
rgrover1 0:0b799af9d58e 47 else if (argument == "-p") runTestsAsSeperateProcess_ = true;
rgrover1 0:0b799af9d58e 48 else if (argument.startsWith("-r")) SetRepeatCount(ac_, av_, i);
rgrover1 0:0b799af9d58e 49 else if (argument.startsWith("-g")) SetGroupFilter(ac_, av_, i);
rgrover1 0:0b799af9d58e 50 else if (argument.startsWith("-sg")) SetStrictGroupFilter(ac_, av_, i);
rgrover1 0:0b799af9d58e 51 else if (argument.startsWith("-n")) SetNameFilter(ac_, av_, i);
rgrover1 0:0b799af9d58e 52 else if (argument.startsWith("-sn")) SetStrictNameFilter(ac_, av_, i);
rgrover1 0:0b799af9d58e 53 else if (argument.startsWith("TEST(")) SetTestToRunBasedOnVerboseOutput(ac_, av_, i, "TEST(");
rgrover1 0:0b799af9d58e 54 else if (argument.startsWith("IGNORE_TEST(")) SetTestToRunBasedOnVerboseOutput(ac_, av_, i, "IGNORE_TEST(");
rgrover1 0:0b799af9d58e 55 else if (argument.startsWith("-o")) correctParameters = SetOutputType(ac_, av_, i);
rgrover1 0:0b799af9d58e 56 else if (argument.startsWith("-p")) correctParameters = plugin->parseAllArguments(ac_, av_, i);
rgrover1 0:0b799af9d58e 57 else correctParameters = false;
rgrover1 0:0b799af9d58e 58
rgrover1 0:0b799af9d58e 59 if (correctParameters == false) {
rgrover1 0:0b799af9d58e 60 return false;
rgrover1 0:0b799af9d58e 61 }
rgrover1 0:0b799af9d58e 62 }
rgrover1 0:0b799af9d58e 63 return true;
rgrover1 0:0b799af9d58e 64 }
rgrover1 0:0b799af9d58e 65
rgrover1 0:0b799af9d58e 66 const char* CommandLineArguments::usage() const
rgrover1 0:0b799af9d58e 67 {
rgrover1 0:0b799af9d58e 68 return "usage [-v] [-r#] [-g|sg groupName] [-n|sn testName] [-o{normal, junit}]\n";
rgrover1 0:0b799af9d58e 69 }
rgrover1 0:0b799af9d58e 70
rgrover1 0:0b799af9d58e 71 bool CommandLineArguments::isVerbose() const
rgrover1 0:0b799af9d58e 72 {
rgrover1 0:0b799af9d58e 73 return verbose_;
rgrover1 0:0b799af9d58e 74 }
rgrover1 0:0b799af9d58e 75
rgrover1 0:0b799af9d58e 76 bool CommandLineArguments::runTestsInSeperateProcess() const
rgrover1 0:0b799af9d58e 77 {
rgrover1 0:0b799af9d58e 78 return runTestsAsSeperateProcess_;
rgrover1 0:0b799af9d58e 79 }
rgrover1 0:0b799af9d58e 80
rgrover1 0:0b799af9d58e 81
rgrover1 0:0b799af9d58e 82 int CommandLineArguments::getRepeatCount() const
rgrover1 0:0b799af9d58e 83 {
rgrover1 0:0b799af9d58e 84 return repeat_;
rgrover1 0:0b799af9d58e 85 }
rgrover1 0:0b799af9d58e 86
rgrover1 0:0b799af9d58e 87 TestFilter CommandLineArguments::getGroupFilter() const
rgrover1 0:0b799af9d58e 88 {
rgrover1 0:0b799af9d58e 89 return groupFilter_;
rgrover1 0:0b799af9d58e 90 }
rgrover1 0:0b799af9d58e 91
rgrover1 0:0b799af9d58e 92 TestFilter CommandLineArguments::getNameFilter() const
rgrover1 0:0b799af9d58e 93 {
rgrover1 0:0b799af9d58e 94 return nameFilter_;
rgrover1 0:0b799af9d58e 95 }
rgrover1 0:0b799af9d58e 96
rgrover1 0:0b799af9d58e 97 void CommandLineArguments::SetRepeatCount(int ac, const char** av, int& i)
rgrover1 0:0b799af9d58e 98 {
rgrover1 0:0b799af9d58e 99 repeat_ = 0;
rgrover1 0:0b799af9d58e 100
rgrover1 0:0b799af9d58e 101 SimpleString repeatParameter(av[i]);
rgrover1 0:0b799af9d58e 102 if (repeatParameter.size() > 2) repeat_ = PlatformSpecificAtoI(av[i] + 2);
rgrover1 0:0b799af9d58e 103 else if (i + 1 < ac) {
rgrover1 0:0b799af9d58e 104 repeat_ = PlatformSpecificAtoI(av[i + 1]);
rgrover1 0:0b799af9d58e 105 if (repeat_ != 0) i++;
rgrover1 0:0b799af9d58e 106 }
rgrover1 0:0b799af9d58e 107
rgrover1 0:0b799af9d58e 108 if (0 == repeat_) repeat_ = 2;
rgrover1 0:0b799af9d58e 109
rgrover1 0:0b799af9d58e 110 }
rgrover1 0:0b799af9d58e 111
rgrover1 0:0b799af9d58e 112 SimpleString CommandLineArguments::getParameterField(int ac, const char** av, int& i, const SimpleString& parameterName)
rgrover1 0:0b799af9d58e 113 {
rgrover1 0:0b799af9d58e 114 size_t parameterLength = parameterName.size();
rgrover1 0:0b799af9d58e 115 SimpleString parameter(av[i]);
rgrover1 0:0b799af9d58e 116 if (parameter.size() > parameterLength) return av[i] + parameterLength;
rgrover1 0:0b799af9d58e 117 else if (i + 1 < ac) return av[++i];
rgrover1 0:0b799af9d58e 118 return "";
rgrover1 0:0b799af9d58e 119 }
rgrover1 0:0b799af9d58e 120
rgrover1 0:0b799af9d58e 121 void CommandLineArguments::SetGroupFilter(int ac, const char** av, int& i)
rgrover1 0:0b799af9d58e 122 {
rgrover1 0:0b799af9d58e 123 groupFilter_ = TestFilter(getParameterField(ac, av, i, "-g"));
rgrover1 0:0b799af9d58e 124 }
rgrover1 0:0b799af9d58e 125
rgrover1 0:0b799af9d58e 126 void CommandLineArguments::SetStrictGroupFilter(int ac, const char** av, int& i)
rgrover1 0:0b799af9d58e 127 {
rgrover1 0:0b799af9d58e 128 groupFilter_ = TestFilter(getParameterField(ac, av, i, "-sg"));
rgrover1 0:0b799af9d58e 129 groupFilter_.strictMatching();
rgrover1 0:0b799af9d58e 130 }
rgrover1 0:0b799af9d58e 131
rgrover1 0:0b799af9d58e 132 void CommandLineArguments::SetNameFilter(int ac, const char** av, int& i)
rgrover1 0:0b799af9d58e 133 {
rgrover1 0:0b799af9d58e 134 nameFilter_ = getParameterField(ac, av, i, "-n");
rgrover1 0:0b799af9d58e 135 }
rgrover1 0:0b799af9d58e 136
rgrover1 0:0b799af9d58e 137 void CommandLineArguments::SetStrictNameFilter(int ac, const char** av, int& index)
rgrover1 0:0b799af9d58e 138 {
rgrover1 0:0b799af9d58e 139 nameFilter_ = getParameterField(ac, av, index, "-sn");
rgrover1 0:0b799af9d58e 140 nameFilter_.strictMatching();
rgrover1 0:0b799af9d58e 141 }
rgrover1 0:0b799af9d58e 142
rgrover1 0:0b799af9d58e 143 void CommandLineArguments::SetTestToRunBasedOnVerboseOutput(int ac, const char** av, int& index, const char* parameterName)
rgrover1 0:0b799af9d58e 144 {
rgrover1 0:0b799af9d58e 145 SimpleString wholename = getParameterField(ac, av, index, parameterName);
rgrover1 0:0b799af9d58e 146 SimpleString testname = wholename.subStringFromTill(',', ')');
rgrover1 0:0b799af9d58e 147 testname = testname.subString(2, testname.size());
rgrover1 0:0b799af9d58e 148 groupFilter_ = wholename.subStringFromTill(wholename.at(0), ',');
rgrover1 0:0b799af9d58e 149 nameFilter_ = testname;
rgrover1 0:0b799af9d58e 150 nameFilter_.strictMatching();
rgrover1 0:0b799af9d58e 151 groupFilter_.strictMatching();
rgrover1 0:0b799af9d58e 152 }
rgrover1 0:0b799af9d58e 153
rgrover1 0:0b799af9d58e 154 bool CommandLineArguments::SetOutputType(int ac, const char** av, int& i)
rgrover1 0:0b799af9d58e 155 {
rgrover1 0:0b799af9d58e 156 SimpleString outputType = getParameterField(ac, av, i, "-o");
rgrover1 0:0b799af9d58e 157 if (outputType.size() == 0) return false;
rgrover1 0:0b799af9d58e 158
rgrover1 0:0b799af9d58e 159 if (outputType == "normal" || outputType == "eclipse") {
rgrover1 0:0b799af9d58e 160 outputType_ = OUTPUT_ECLIPSE;
rgrover1 0:0b799af9d58e 161 return true;
rgrover1 0:0b799af9d58e 162 }
rgrover1 0:0b799af9d58e 163 if (outputType == "junit") {
rgrover1 0:0b799af9d58e 164 outputType_ = OUTPUT_JUNIT;
rgrover1 0:0b799af9d58e 165 return true;
rgrover1 0:0b799af9d58e 166 }
rgrover1 0:0b799af9d58e 167 return false;
rgrover1 0:0b799af9d58e 168 }
rgrover1 0:0b799af9d58e 169
rgrover1 0:0b799af9d58e 170 bool CommandLineArguments::isEclipseOutput() const
rgrover1 0:0b799af9d58e 171 {
rgrover1 0:0b799af9d58e 172 return outputType_ == OUTPUT_ECLIPSE;
rgrover1 0:0b799af9d58e 173 }
rgrover1 0:0b799af9d58e 174
rgrover1 0:0b799af9d58e 175 bool CommandLineArguments::isJUnitOutput() const
rgrover1 0:0b799af9d58e 176 {
rgrover1 0:0b799af9d58e 177 return outputType_ == OUTPUT_JUNIT;
rgrover1 0:0b799af9d58e 178 }
rgrover1 0:0b799af9d58e 179