Merge pull request #2 from google/master
merge upstream/master into master
This commit is contained in:
commit
130e5aa86a
|
@ -10,6 +10,13 @@ language: cpp
|
|||
# It is more tedious, but grants us far more flexibility.
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
dist: trusty
|
||||
sudo: required
|
||||
group: deprecated-2017Q3
|
||||
before_install: chmod -R +x ./ci/*platformio.sh
|
||||
install: ./ci/install-platformio.sh
|
||||
script: ./ci/build-platformio.sh
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
sudo : true
|
||||
|
|
|
@ -26,7 +26,7 @@ If you are a Googler, you can either create an internal change or work on GitHub
|
|||
## Contributing A Patch
|
||||
|
||||
1. Submit an issue describing your proposed change to the
|
||||
[issue tracker](https://github.com/abseil/googletest).
|
||||
[issue tracker](https://github.com/google/googletest).
|
||||
1. Please don't mix more than one logical change per submittal,
|
||||
because it makes the history hard to follow. If you want to make a
|
||||
change that doesn't have a corresponding issue in the issue
|
||||
|
@ -79,7 +79,7 @@ itself is a valuable contribution.
|
|||
To keep the source consistent, readable, diffable and easy to merge,
|
||||
we use a fairly rigid coding style, as defined by the [google-styleguide](https://github.com/google/styleguide) project. All patches will be expected
|
||||
to conform to the style outlined [here](https://google.github.io/styleguide/cppguide.html).
|
||||
Use [.clang-format](https://github.com/abseil/googletest/blob/master/.clang-format) to check your formatting
|
||||
Use [.clang-format](https://github.com/google/googletest/blob/master/.clang-format) to check your formatting
|
||||
|
||||
## Requirements for Contributors ###
|
||||
|
||||
|
|
2
ci/build-platformio.sh
Normal file
2
ci/build-platformio.sh
Normal file
|
@ -0,0 +1,2 @@
|
|||
# run PlatformIO builds
|
||||
platformio run
|
5
ci/install-platformio.sh
Normal file
5
ci/install-platformio.sh
Normal file
|
@ -0,0 +1,5 @@
|
|||
# install PlatformIO
|
||||
sudo pip install -U platformio
|
||||
|
||||
# update PlatformIO
|
||||
platformio update
|
|
@ -5,7 +5,7 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|||
Name: gmock
|
||||
Description: GoogleMock (without main() function)
|
||||
Version: @PROJECT_VERSION@
|
||||
URL: https://github.com/abseil/googletest
|
||||
URL: https://github.com/google/googletest
|
||||
Requires: gtest
|
||||
Libs: -L${libdir} -lgmock @CMAKE_THREAD_LIBS_INIT@
|
||||
Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@
|
||||
|
|
|
@ -5,7 +5,7 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|||
Name: gmock_main
|
||||
Description: GoogleMock (with main() function)
|
||||
Version: @PROJECT_VERSION@
|
||||
URL: https://github.com/abseil/googletest
|
||||
URL: https://github.com/google/googletest
|
||||
Requires: gmock
|
||||
Libs: -L${libdir} -lgmock_main @CMAKE_THREAD_LIBS_INIT@
|
||||
Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@
|
||||
|
|
|
@ -661,7 +661,7 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6,
|
|||
// MORE INFORMATION:
|
||||
//
|
||||
// To learn more about using these macros, please search for 'ACTION' on
|
||||
// https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
// https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
|
||||
// An internal macro needed for implementing ACTION*().
|
||||
#define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_\
|
||||
|
|
|
@ -289,7 +289,7 @@ $range j2 2..i
|
|||
// MORE INFORMATION:
|
||||
//
|
||||
// To learn more about using these macros, please search for 'ACTION' on
|
||||
// https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
// https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
|
||||
$range i 0..n
|
||||
$range k 0..n-1
|
||||
|
|
|
@ -261,7 +261,7 @@
|
|||
//
|
||||
// To learn more about using these macros, please search for 'MATCHER'
|
||||
// on
|
||||
// https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
// https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
|
||||
#define MATCHER(name, description)\
|
||||
class name##Matcher {\
|
||||
|
|
|
@ -263,7 +263,7 @@ $$ }} This line fixes auto-indentation of the following code in Emacs.
|
|||
//
|
||||
// To learn more about using these macros, please search for 'MATCHER'
|
||||
// on
|
||||
// https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
// https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md
|
||||
|
||||
$range i 0..n
|
||||
$for i
|
||||
|
|
|
@ -1296,14 +1296,24 @@ class PredicateFormatterFromMatcher {
|
|||
// We don't write MatcherCast<const T&> either, as that allows
|
||||
// potentially unsafe downcasting of the matcher argument.
|
||||
const Matcher<const T&> matcher = SafeMatcherCast<const T&>(matcher_);
|
||||
StringMatchResultListener listener;
|
||||
if (MatchPrintAndExplain(x, matcher, &listener))
|
||||
|
||||
// The expected path here is that the matcher should match (i.e. that most
|
||||
// tests pass) so optimize for this case.
|
||||
if (matcher.Matches(x)) {
|
||||
return AssertionSuccess();
|
||||
}
|
||||
|
||||
::std::stringstream ss;
|
||||
ss << "Value of: " << value_text << "\n"
|
||||
<< "Expected: ";
|
||||
matcher.DescribeTo(&ss);
|
||||
|
||||
// Rerun the matcher to "PrintAndExain" the failure.
|
||||
StringMatchResultListener listener;
|
||||
if (MatchPrintAndExplain(x, matcher, &listener)) {
|
||||
ss << "\n The matcher failed on the initial attempt; but passed when "
|
||||
"rerun to generate the explanation.";
|
||||
}
|
||||
ss << "\n Actual: " << listener.str();
|
||||
return AssertionFailure() << ss.str();
|
||||
}
|
||||
|
|
|
@ -291,7 +291,7 @@ void ReportUninterestingCall(CallReaction reaction, const std::string& msg) {
|
|||
"call should not happen. Do not suppress it by blindly adding "
|
||||
"an EXPECT_CALL() if you don't mean to enforce the call. "
|
||||
"See "
|
||||
"https://github.com/abseil/googletest/blob/master/googlemock/"
|
||||
"https://github.com/google/googletest/blob/master/googlemock/"
|
||||
"docs/CookBook.md#"
|
||||
"knowing-when-to-expect for details.\n",
|
||||
stack_frames_to_skip);
|
||||
|
|
|
@ -32,6 +32,22 @@
|
|||
#include "gmock/gmock.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#ifdef ARDUINO
|
||||
void setup() {
|
||||
// Since Arduino doesn't have a command line, fake out the argc/argv arguments
|
||||
int argc = 1;
|
||||
const auto arg0 = "PlatformIO";
|
||||
char* argv0 = const_cast<char*>(arg0);
|
||||
char** argv = &argv0;
|
||||
|
||||
// Since Google Mock depends on Google Test, InitGoogleMock() is
|
||||
// also responsible for initializing Google Test. Therefore there's
|
||||
// no need for calling testing::InitGoogleTest() separately.
|
||||
testing::InitGoogleMock(&argc, argv);
|
||||
}
|
||||
void loop() { RUN_ALL_TESTS(); }
|
||||
#else
|
||||
|
||||
// MS C++ compiler/linker has a bug on Windows (not on Windows CE), which
|
||||
// causes a link error when _tmain is defined in a static library and UNICODE
|
||||
// is enabled. For this reason instead of _tmain, main function is used on
|
||||
|
@ -52,3 +68,4 @@ GTEST_API_ int main(int argc, char** argv) {
|
|||
testing::InitGoogleMock(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -85,6 +85,7 @@ using std::pair;
|
|||
using std::set;
|
||||
using std::stringstream;
|
||||
using std::vector;
|
||||
using testing::_;
|
||||
using testing::A;
|
||||
using testing::AllArgs;
|
||||
using testing::AllOf;
|
||||
|
@ -110,12 +111,12 @@ using testing::Le;
|
|||
using testing::Lt;
|
||||
using testing::MakeMatcher;
|
||||
using testing::MakePolymorphicMatcher;
|
||||
using testing::MatchResultListener;
|
||||
using testing::Matcher;
|
||||
using testing::MatcherCast;
|
||||
using testing::MatcherInterface;
|
||||
using testing::Matches;
|
||||
using testing::MatchesRegex;
|
||||
using testing::MatchResultListener;
|
||||
using testing::NanSensitiveDoubleEq;
|
||||
using testing::NanSensitiveDoubleNear;
|
||||
using testing::NanSensitiveFloatEq;
|
||||
|
@ -135,15 +136,14 @@ using testing::StartsWith;
|
|||
using testing::StrCaseEq;
|
||||
using testing::StrCaseNe;
|
||||
using testing::StrEq;
|
||||
using testing::StrNe;
|
||||
using testing::StringMatchResultListener;
|
||||
using testing::StrNe;
|
||||
using testing::Truly;
|
||||
using testing::TypedEq;
|
||||
using testing::UnorderedPointwise;
|
||||
using testing::Value;
|
||||
using testing::WhenSorted;
|
||||
using testing::WhenSortedBy;
|
||||
using testing::_;
|
||||
using testing::internal::DummyMatchResultListener;
|
||||
using testing::internal::ElementMatcherPair;
|
||||
using testing::internal::ElementMatcherPairs;
|
||||
|
@ -152,10 +152,11 @@ using testing::internal::FloatingEqMatcher;
|
|||
using testing::internal::FormatMatcherDescription;
|
||||
using testing::internal::IsReadableTypeName;
|
||||
using testing::internal::MatchMatrix;
|
||||
using testing::internal::PredicateFormatterFromMatcher;
|
||||
using testing::internal::RE;
|
||||
using testing::internal::StreamMatchResultListener;
|
||||
using testing::internal::Strings;
|
||||
using testing::internal::string;
|
||||
using testing::internal::Strings;
|
||||
|
||||
// For testing ExplainMatchResultTo().
|
||||
class GreaterThanMatcher : public MatcherInterface<int> {
|
||||
|
@ -4932,7 +4933,7 @@ TYPED_TEST(ContainerEqTest, DuplicateDifference) {
|
|||
}
|
||||
#endif // GTEST_HAS_TYPED_TEST
|
||||
|
||||
// Tests that mutliple missing values are reported.
|
||||
// Tests that multiple missing values are reported.
|
||||
// Using just vector here, so order is predictable.
|
||||
TEST(ContainerEqExtraTest, MultipleValuesMissing) {
|
||||
static const int vals[] = {1, 1, 2, 3, 5, 8};
|
||||
|
@ -6910,6 +6911,88 @@ TEST(ArgsTest, ExplainsMatchResultWithInnerExplanation) {
|
|||
Explain(m, std::make_tuple('\0', 42, 43)));
|
||||
}
|
||||
|
||||
class PredicateFormatterFromMatcherTest : public ::testing::Test {
|
||||
protected:
|
||||
enum Behavior { kInitialSuccess, kAlwaysFail, kFlaky };
|
||||
|
||||
// A matcher that can return different results when used multiple times on the
|
||||
// same input. No real matcher should do this; but this lets us test that we
|
||||
// detect such behavior and fail appropriately.
|
||||
class MockMatcher : public MatcherInterface<Behavior> {
|
||||
public:
|
||||
bool MatchAndExplain(Behavior behavior,
|
||||
MatchResultListener* listener) const override {
|
||||
*listener << "[MatchAndExplain]";
|
||||
switch (behavior) {
|
||||
case kInitialSuccess:
|
||||
// The first call to MatchAndExplain should use a "not interested"
|
||||
// listener; so this is expected to return |true|. There should be no
|
||||
// subsequent calls.
|
||||
return !listener->IsInterested();
|
||||
|
||||
case kAlwaysFail:
|
||||
return false;
|
||||
|
||||
case kFlaky:
|
||||
// The first call to MatchAndExplain should use a "not interested"
|
||||
// listener; so this will return |false|. Subsequent calls should have
|
||||
// an "interested" listener; so this will return |true|, thus
|
||||
// simulating a flaky matcher.
|
||||
return listener->IsInterested();
|
||||
}
|
||||
|
||||
GTEST_LOG_(FATAL) << "This should never be reached";
|
||||
return false;
|
||||
}
|
||||
|
||||
void DescribeTo(ostream* os) const override { *os << "[DescribeTo]"; }
|
||||
|
||||
void DescribeNegationTo(ostream* os) const override {
|
||||
*os << "[DescribeNegationTo]";
|
||||
}
|
||||
};
|
||||
|
||||
AssertionResult RunPredicateFormatter(Behavior behavior) {
|
||||
auto matcher = MakeMatcher(new MockMatcher);
|
||||
PredicateFormatterFromMatcher<Matcher<Behavior>> predicate_formatter(
|
||||
matcher);
|
||||
return predicate_formatter("dummy-name", behavior);
|
||||
}
|
||||
|
||||
const std::string kMatcherType =
|
||||
"testing::gmock_matchers_test::PredicateFormatterFromMatcherTest::"
|
||||
"Behavior";
|
||||
};
|
||||
|
||||
TEST_F(PredicateFormatterFromMatcherTest, ShortCircuitOnSuccess) {
|
||||
AssertionResult result = RunPredicateFormatter(kInitialSuccess);
|
||||
EXPECT_TRUE(result); // Implicit cast to bool.
|
||||
std::string expect;
|
||||
EXPECT_EQ(expect, result.message());
|
||||
}
|
||||
|
||||
TEST_F(PredicateFormatterFromMatcherTest, NoShortCircuitOnFailure) {
|
||||
AssertionResult result = RunPredicateFormatter(kAlwaysFail);
|
||||
EXPECT_FALSE(result); // Implicit cast to bool.
|
||||
std::string expect =
|
||||
"Value of: dummy-name\nExpected: [DescribeTo]\n"
|
||||
" Actual: 1" +
|
||||
OfType(kMatcherType) + ", [MatchAndExplain]";
|
||||
EXPECT_EQ(expect, result.message());
|
||||
}
|
||||
|
||||
TEST_F(PredicateFormatterFromMatcherTest, DetectsFlakyShortCircuit) {
|
||||
AssertionResult result = RunPredicateFormatter(kFlaky);
|
||||
EXPECT_FALSE(result); // Implicit cast to bool.
|
||||
std::string expect =
|
||||
"Value of: dummy-name\nExpected: [DescribeTo]\n"
|
||||
" The matcher failed on the initial attempt; but passed when rerun to "
|
||||
"generate the explanation.\n"
|
||||
" Actual: 2" +
|
||||
OfType(kMatcherType) + ", [MatchAndExplain]";
|
||||
EXPECT_EQ(expect, result.message());
|
||||
}
|
||||
|
||||
} // namespace gmock_matchers_test
|
||||
} // namespace testing
|
||||
|
||||
|
|
|
@ -2176,7 +2176,7 @@ class GMockVerboseFlagTest : public VerboseFlagPreservingFixture {
|
|||
"call should not happen. Do not suppress it by blindly adding "
|
||||
"an EXPECT_CALL() if you don't mean to enforce the call. "
|
||||
"See "
|
||||
"https://github.com/abseil/googletest/blob/master/googlemock/docs/"
|
||||
"https://github.com/google/googletest/blob/master/googlemock/docs/"
|
||||
"CookBook.md#"
|
||||
"knowing-when-to-expect for details.";
|
||||
|
||||
|
|
|
@ -75,14 +75,14 @@ GMOCK WARNING:
|
|||
Uninteresting mock function call - returning default value.
|
||||
Function call: Bar2(0, 1)
|
||||
Returns: false
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
[ OK ] GMockOutputTest.UninterestingCall
|
||||
[ RUN ] GMockOutputTest.UninterestingCallToVoidFunction
|
||||
|
||||
GMOCK WARNING:
|
||||
Uninteresting mock function call - returning directly.
|
||||
Function call: Bar3(0, 1)
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
[ OK ] GMockOutputTest.UninterestingCallToVoidFunction
|
||||
[ RUN ] GMockOutputTest.RetiredExpectation
|
||||
unknown file: Failure
|
||||
|
@ -266,14 +266,14 @@ Uninteresting mock function call - taking default action specified at:
|
|||
FILE:#:
|
||||
Function call: Bar2(2, 2)
|
||||
Returns: true
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
|
||||
GMOCK WARNING:
|
||||
Uninteresting mock function call - taking default action specified at:
|
||||
FILE:#:
|
||||
Function call: Bar2(1, 1)
|
||||
Returns: false
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/abseil/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
NOTE: You can safely ignore the above warning unless this call should not happen. Do not suppress it by blindly adding an EXPECT_CALL() if you don't mean to enforce the call. See https://github.com/google/googletest/blob/master/googlemock/docs/CookBook.md#knowing-when-to-expect for details.
|
||||
[ OK ] GMockOutputTest.UninterestingCallWithDefaultAction
|
||||
[ RUN ] GMockOutputTest.ExplicitActionsRunOutWithDefaultAction
|
||||
|
||||
|
|
|
@ -5,6 +5,6 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|||
Name: gtest
|
||||
Description: GoogleTest (without main() function)
|
||||
Version: @PROJECT_VERSION@
|
||||
URL: https://github.com/abseil/googletest
|
||||
URL: https://github.com/google/googletest
|
||||
Libs: -L${libdir} -lgtest @CMAKE_THREAD_LIBS_INIT@
|
||||
Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@
|
||||
|
|
|
@ -5,7 +5,7 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|||
Name: gtest_main
|
||||
Description: GoogleTest (with main() function)
|
||||
Version: @PROJECT_VERSION@
|
||||
URL: https://github.com/abseil/googletest
|
||||
URL: https://github.com/google/googletest
|
||||
Requires: gtest
|
||||
Libs: -L${libdir} -lgtest_main @CMAKE_THREAD_LIBS_INIT@
|
||||
Cflags: -I${includedir} @GTEST_HAS_PTHREAD_MACRO@ @CMAKE_THREAD_LIBS_INIT@
|
||||
|
|
|
@ -285,7 +285,7 @@
|
|||
# define GTEST_FLAG_PREFIX_DASH_ "gtest-"
|
||||
# define GTEST_FLAG_PREFIX_UPPER_ "GTEST_"
|
||||
# define GTEST_NAME_ "Google Test"
|
||||
# define GTEST_PROJECT_URL_ "https://github.com/abseil/googletest/"
|
||||
# define GTEST_PROJECT_URL_ "https://github.com/google/googletest/"
|
||||
#endif // !defined(GTEST_DEV_EMAIL_)
|
||||
|
||||
#if !defined(GTEST_INIT_GOOGLE_TEST_NAME_)
|
||||
|
@ -785,13 +785,17 @@ typedef struct _RTL_CRITICAL_SECTION GTEST_CRITICAL_SECTION;
|
|||
# define GTEST_HAS_SEH 0
|
||||
# endif
|
||||
|
||||
#define GTEST_IS_THREADSAFE \
|
||||
(GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ \
|
||||
|| (GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) \
|
||||
|| GTEST_HAS_PTHREAD)
|
||||
|
||||
#endif // GTEST_HAS_SEH
|
||||
|
||||
#ifndef GTEST_IS_THREADSAFE
|
||||
|
||||
#define GTEST_IS_THREADSAFE \
|
||||
(GTEST_HAS_MUTEX_AND_THREAD_LOCAL_ || \
|
||||
(GTEST_OS_WINDOWS && !GTEST_OS_WINDOWS_PHONE && !GTEST_OS_WINDOWS_RT) || \
|
||||
GTEST_HAS_PTHREAD)
|
||||
|
||||
#endif // GTEST_IS_THREADSAFE
|
||||
|
||||
// GTEST_API_ qualifies all symbols that must be exported. The definitions below
|
||||
// are guarded by #ifndef to give embedders a chance to define GTEST_API_ in
|
||||
// gtest/internal/custom/gtest-port.h
|
||||
|
|
|
@ -246,7 +246,7 @@ static std::string DeathTestThreadWarning(size_t thread_count) {
|
|||
msg << "detected " << thread_count << " threads.";
|
||||
}
|
||||
msg << " See "
|
||||
"https://github.com/abseil/googletest/blob/master/googletest/docs/"
|
||||
"https://github.com/google/googletest/blob/master/googletest/docs/"
|
||||
"advanced.md#death-tests-and-threads"
|
||||
<< " for more explanation and suggested solutions, especially if"
|
||||
<< " this is the last message you see before your test times out.";
|
||||
|
|
|
@ -3761,7 +3761,8 @@ void XmlUnitTestResultPrinter::OutputXmlTestInfo(::std::ostream* stream,
|
|||
}
|
||||
|
||||
OutputXmlAttribute(stream, kTestcase, "status",
|
||||
test_info.should_run() ? "run" : "notrun");
|
||||
result.Skipped() ? "skipped" :
|
||||
test_info.should_run() ? "run" : "notrun");
|
||||
OutputXmlAttribute(stream, kTestcase, "time",
|
||||
FormatTimeInMillisAsSeconds(result.elapsed_time()));
|
||||
OutputXmlAttribute(stream, kTestcase, "classname", test_case_name);
|
||||
|
@ -4126,6 +4127,7 @@ void JsonUnitTestResultPrinter::OutputJsonTestInfo(::std::ostream* stream,
|
|||
}
|
||||
|
||||
OutputJsonKey(stream, kTestcase, "status",
|
||||
result.Skipped() ? "SKIPPED" :
|
||||
test_info.should_run() ? "RUN" : "NOTRUN", kIndent);
|
||||
OutputJsonKey(stream, kTestcase, "time",
|
||||
FormatTimeInMillisAsDuration(result.elapsed_time()), kIndent);
|
||||
|
@ -5363,7 +5365,7 @@ bool ShouldRunTestOnShard(int total_shards, int shard_index, int test_id) {
|
|||
// each TestCase and TestInfo object.
|
||||
// If shard_tests == true, further filters tests based on sharding
|
||||
// variables in the environment - see
|
||||
// https://github.com/abseil/googletest/blob/master/googletest/docs/advanced.md
|
||||
// https://github.com/google/googletest/blob/master/googletest/docs/advanced.md
|
||||
// . Returns the number of tests that should run.
|
||||
int UnitTestImpl::FilterTests(ReactionToSharding shard_tests) {
|
||||
const Int32 total_shards = shard_tests == HONOR_SHARDING_PROTOCOL ?
|
||||
|
|
|
@ -30,8 +30,24 @@
|
|||
#include <stdio.h>
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#ifdef ARDUINO
|
||||
void setup() {
|
||||
// Since Arduino doesn't have a command line, fake out the argc/argv arguments
|
||||
int argc = 1;
|
||||
const auto arg0 = "PlatformIO";
|
||||
char* argv0 = const_cast<char*>(arg0);
|
||||
char** argv = &argv0;
|
||||
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
}
|
||||
|
||||
void loop() { RUN_ALL_TESTS(); }
|
||||
|
||||
#else
|
||||
|
||||
GTEST_API_ int main(int argc, char **argv) {
|
||||
printf("Running main() from %s\n", __FILE__);
|
||||
testing::InitGoogleTest(&argc, argv);
|
||||
return RUN_ALL_TESTS();
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -57,7 +57,7 @@ else:
|
|||
STACK_TRACE_TEMPLATE = ''
|
||||
|
||||
EXPECTED_NON_EMPTY = {
|
||||
u'tests': 23,
|
||||
u'tests': 24,
|
||||
u'failures': 4,
|
||||
u'disabled': 2,
|
||||
u'errors': 0,
|
||||
|
@ -123,6 +123,22 @@ EXPECTED_NON_EMPTY = {
|
|||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
u'name': u'SkippedTest',
|
||||
u'tests': 1,
|
||||
u'failures': 0,
|
||||
u'disabled': 0,
|
||||
u'errors': 0,
|
||||
u'time': u'*',
|
||||
u'testsuite': [
|
||||
{
|
||||
u'name': u'Skipped',
|
||||
u'status': u'SKIPPED',
|
||||
u'time': u'*',
|
||||
u'classname': u'SkippedTest'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
u'name': u'MixedResultTest',
|
||||
u'tests': 3,
|
||||
|
|
|
@ -65,7 +65,7 @@ else:
|
|||
sys.argv.remove(NO_STACKTRACE_SUPPORT_FLAG)
|
||||
|
||||
EXPECTED_NON_EMPTY_XML = """<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuites tests="23" failures="4" disabled="2" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42">
|
||||
<testsuites tests="24" failures="4" disabled="2" errors="0" time="*" timestamp="*" name="AllTests" ad_hoc_property="42">
|
||||
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*">
|
||||
<testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/>
|
||||
</testsuite>
|
||||
|
@ -108,6 +108,9 @@ Invalid characters in brackets []%(stack)s]]></failure>
|
|||
<testsuite name="DisabledTest" tests="1" failures="0" disabled="1" errors="0" time="*">
|
||||
<testcase name="DISABLED_test_not_run" status="notrun" time="*" classname="DisabledTest"/>
|
||||
</testsuite>
|
||||
<testsuite name="SkippedTest" tests="1" failures="0" disabled="0" errors="0" time="*">
|
||||
<testcase name="Skipped" status="skipped" time="*" classname="SkippedTest"/>
|
||||
</testsuite>
|
||||
<testsuite name="PropertyRecordingTest" tests="4" failures="0" disabled="0" errors="0" time="*" SetUpTestCase="yes" TearDownTestCase="aye">
|
||||
<testcase name="OneProperty" status="run" time="*" classname="PropertyRecordingTest">
|
||||
<properties>
|
||||
|
@ -183,15 +186,15 @@ EXPECTED_SHARDED_TEST_XML = """<?xml version="1.0" encoding="UTF-8"?>
|
|||
<testsuite name="SuccessfulTest" tests="1" failures="0" disabled="0" errors="0" time="*">
|
||||
<testcase name="Succeeds" status="run" time="*" classname="SuccessfulTest"/>
|
||||
</testsuite>
|
||||
<testsuite name="NoFixtureTest" tests="1" failures="0" disabled="0" errors="0" time="*">
|
||||
<testcase name="RecordProperty" status="run" time="*" classname="NoFixtureTest">
|
||||
<properties>
|
||||
<property name="key" value="1"/>
|
||||
</properties>
|
||||
</testcase>
|
||||
<testsuite name="PropertyRecordingTest" tests="1" failures="0" disabled="0" errors="0" time="*" SetUpTestCase="yes" TearDownTestCase="aye">
|
||||
<testcase name="TwoValuesForOneKeyUsesLastValue" status="run" time="*" classname="PropertyRecordingTest">
|
||||
<properties>
|
||||
<property name="key_1" value="2"/>
|
||||
</properties>
|
||||
</testcase>
|
||||
</testsuite>
|
||||
<testsuite name="Single/ValueParamTest" tests="1" failures="0" disabled="0" errors="0" time="*">
|
||||
<testcase name="AnotherTestThatHasValueParamAttribute/1" value_param="42" status="run" time="*" classname="Single/ValueParamTest" />
|
||||
<testcase name="AnotherTestThatHasValueParamAttribute/0" value_param="33" status="run" time="*" classname="Single/ValueParamTest" />
|
||||
</testsuite>
|
||||
</testsuites>"""
|
||||
|
||||
|
|
|
@ -67,6 +67,13 @@ TEST_F(DisabledTest, DISABLED_test_not_run) {
|
|||
FAIL() << "Unexpected failure: Disabled test should not be run";
|
||||
}
|
||||
|
||||
class SkippedTest : public Test {
|
||||
};
|
||||
|
||||
TEST_F(SkippedTest, Skipped) {
|
||||
GTEST_SKIP();
|
||||
}
|
||||
|
||||
TEST(MixedResultTest, Succeeds) {
|
||||
EXPECT_EQ(1, 1);
|
||||
ASSERT_EQ(1, 1);
|
||||
|
|
51
library.json
Normal file
51
library.json
Normal file
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
"name": "googletest",
|
||||
"keywords": "unittest, unit, test, gtest, gmock",
|
||||
"description": "googletest is a testing framework developed by the Testing Technology team with Google's specific requirements and constraints in mind. No matter whether you work on Linux, Windows, or a Mac, if you write C++ code, googletest can help you. And it supports any kind of tests, not just unit tests.",
|
||||
"license": "BSD-3-Clause",
|
||||
"homepage": "https://github.com/abseil/googletest/blob/master/README.md",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/abseil/googletest.git"
|
||||
},
|
||||
"version": "1.8.1",
|
||||
"exclude": [
|
||||
"ci",
|
||||
"googlemock/build-aux",
|
||||
"googlemock/cmake",
|
||||
"googlemock/make",
|
||||
"googlemock/msvc",
|
||||
"googlemock/scripts",
|
||||
"googlemock/test",
|
||||
"googlemock/CMakeLists.txt",
|
||||
"googlemock/Makefile.am",
|
||||
"googlemock/configure.ac",
|
||||
"googletest/cmake",
|
||||
"googletest/codegear",
|
||||
"googletest/m4",
|
||||
"googletest/make",
|
||||
"googletest/msvc",
|
||||
"googletest/scripts",
|
||||
"googletest/test",
|
||||
"googletest/xcode",
|
||||
"googletest/CMakeLists.txt",
|
||||
"googletest/Makefile.am",
|
||||
"googletest/configure.ac",
|
||||
],
|
||||
"frameworks": "arduino",
|
||||
"platforms": [
|
||||
"espressif32"
|
||||
],
|
||||
"export": {
|
||||
"include": [
|
||||
"googlemock/include/*",
|
||||
"googletest/include/*"
|
||||
]
|
||||
},
|
||||
"build": {
|
||||
"flags": [
|
||||
"-I googlemock/include",
|
||||
"-I googletest/include"
|
||||
]
|
||||
}
|
||||
}
|
31
platformio.ini
Normal file
31
platformio.ini
Normal file
|
@ -0,0 +1,31 @@
|
|||
; PlatformIO Project Configuration File
|
||||
;
|
||||
; Build options: build flags, source filter
|
||||
; Upload options: custom upload port, speed and extra flags
|
||||
; Library options: dependencies, extra library storages
|
||||
; Advanced options: extra scripting
|
||||
;
|
||||
; Please visit documentation for the other options and examples
|
||||
; http://docs.platformio.org/page/projectconf.html
|
||||
|
||||
|
||||
[platformio]
|
||||
#src_dir = ./googlemock
|
||||
#src_dir = ./googletest
|
||||
src_dir = .
|
||||
|
||||
[env:googletest_esp32]
|
||||
platform = espressif32
|
||||
board = esp32dev
|
||||
framework = arduino
|
||||
build_flags = -I./googletest/include -I./googletest
|
||||
src_filter = +<*> -<.git/> -<googlemock> -<googletest/codegear/> -<googletest/samples> -<googletest/test/> -<googletest/xcode> -<googletest/src> +<googletest/src/gtest-all.cc> +<googletest/src/gtest_main.cc>
|
||||
upload_speed = 921600
|
||||
|
||||
[env:googlemock_esp32]
|
||||
platform = espressif32
|
||||
board = esp32dev
|
||||
framework = arduino
|
||||
build_flags = -I./googlemock/include -I./googletest/include -I./googletest -I./googlemock
|
||||
src_filter = +<*> -<.git/> -<googletest> -<googlemock/test/> -<googlemock/src> +<googlemock/src/gmock-all.cc> +<googlemock/src/gmock_main.cc> +<googletest/src/gtest-all.cc>
|
||||
upload_speed = 921600
|
Loading…
Reference in New Issue
Block a user