diff --git a/base/Android.bp b/base/Android.bp index ad0edf4a9..01800afad 100644 --- a/base/Android.bp +++ b/base/Android.bp @@ -116,6 +116,7 @@ cc_test { "stringprintf_test.cpp", "strings_test.cpp", "test_main.cpp", + "test_utils_test.cpp", ], target: { android: { diff --git a/base/include/android-base/test_utils.h b/base/include/android-base/test_utils.h index 4cfa06ba5..2edafe344 100644 --- a/base/include/android-base/test_utils.h +++ b/base/include/android-base/test_utils.h @@ -17,6 +17,7 @@ #ifndef ANDROID_BASE_TEST_UTILS_H #define ANDROID_BASE_TEST_UTILS_H +#include #include #include @@ -70,4 +71,32 @@ class CapturedStderr { DISALLOW_COPY_AND_ASSIGN(CapturedStderr); }; +#define ASSERT_MATCH(str, pattern) \ + do { \ + if (!std::regex_search((str), std::regex((pattern)))) { \ + FAIL() << "regex mismatch: expected " << (pattern) << " in:\n" << (str); \ + } \ + } while (0) + +#define ASSERT_NOT_MATCH(str, pattern) \ + do { \ + if (std::regex_search((str), std::regex((pattern)))) { \ + FAIL() << "regex mismatch: expected to not find " << (pattern) << " in:\n" << (str); \ + } \ + } while (0) + +#define EXPECT_MATCH(str, pattern) \ + do { \ + if (!std::regex_search((str), std::regex((pattern)))) { \ + ADD_FAILURE() << "regex mismatch: expected " << (pattern) << " in:\n" << (str); \ + } \ + } while (0) + +#define EXPECT_NOT_MATCH(str, pattern) \ + do { \ + if (std::regex_search((str), std::regex((pattern)))) { \ + ADD_FAILURE() << "regex mismatch: expected to not find " << (pattern) << " in:\n" << (str); \ + } \ + } while (0) + #endif // ANDROID_BASE_TEST_UTILS_H diff --git a/base/test_utils_test.cpp b/base/test_utils_test.cpp new file mode 100644 index 000000000..597271a72 --- /dev/null +++ b/base/test_utils_test.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "android-base/test_utils.h" + +#include +#include + +namespace android { +namespace base { + +TEST(TestUtilsTest, AssertMatch) { + ASSERT_MATCH("foobar", R"(fo+baz?r)"); + EXPECT_FATAL_FAILURE(ASSERT_MATCH("foobar", R"(foobaz)"), "regex mismatch"); +} + +TEST(TestUtilsTest, AssertNotMatch) { + ASSERT_NOT_MATCH("foobar", R"(foobaz)"); + EXPECT_FATAL_FAILURE(ASSERT_NOT_MATCH("foobar", R"(foobar)"), "regex mismatch"); +} + +TEST(TestUtilsTest, ExpectMatch) { + EXPECT_MATCH("foobar", R"(fo+baz?r)"); + EXPECT_NONFATAL_FAILURE(EXPECT_MATCH("foobar", R"(foobaz)"), "regex mismatch"); +} + +TEST(TestUtilsTest, ExpectNotMatch) { + EXPECT_NOT_MATCH("foobar", R"(foobaz)"); + EXPECT_NONFATAL_FAILURE(EXPECT_NOT_MATCH("foobar", R"(foobar)"), "regex mismatch"); +} + +} // namespace base +} // namespace android diff --git a/debuggerd/debuggerd_test.cpp b/debuggerd/debuggerd_test.cpp index 0d17a3b5c..939f4d257 100644 --- a/debuggerd/debuggerd_test.cpp +++ b/debuggerd/debuggerd_test.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -75,22 +76,6 @@ constexpr char kWaitForGdbKey[] = "debug.debuggerd.wait_for_gdb"; return value; \ }() -#define ASSERT_MATCH(str, pattern) \ - do { \ - std::regex r((pattern)); \ - if (!std::regex_search((str), r)) { \ - FAIL() << "regex mismatch: expected " << (pattern) << " in: \n" << (str); \ - } \ - } while (0) - -#define ASSERT_NOT_MATCH(str, pattern) \ - do { \ - std::regex r((pattern)); \ - if (std::regex_search((str), r)) { \ - FAIL() << "regex mismatch: expected to not find " << (pattern) << " in: \n" << (str); \ - } \ - } while (0) - #define ASSERT_BACKTRACE_FRAME(result, frame_name) \ ASSERT_MATCH(result, R"(#\d\d pc [0-9a-f]+\s+ /system/lib)" ARCH_SUFFIX \ R"(/libc.so \()" frame_name R"(\+)")