regex_test.cxx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "jvalidate/regex.h"
  2. #include <gmock/gmock.h>
  3. #include <gtest/gtest.h>
  4. using testing::IsEmpty;
  5. using testing::Not;
  6. template <typename T> class RegexEngineTest : public testing::Test {};
  7. using RegexEngines = testing::Types<jvalidate::StdRegexEngine
  8. #if JVALIDATE_HAS_ICU
  9. ,
  10. jvalidate::ICURegexEngine
  11. #endif
  12. >;
  13. TYPED_TEST_SUITE(RegexEngineTest, RegexEngines);
  14. TYPED_TEST(RegexEngineTest, HasEngineName) {
  15. EXPECT_THAT(TypeParam::engine_name(), Not(IsEmpty()));
  16. }
  17. TYPED_TEST(RegexEngineTest, IsRegexIsNoexceptOnBadRegex) {
  18. EXPECT_NO_THROW(TypeParam::is_regex("(ABC){1,2"));
  19. EXPECT_FALSE(TypeParam::is_regex("(ABC){1,2"));
  20. }
  21. TYPED_TEST(RegexEngineTest, IsRegexIsNoexceptOnGoodRegex) {
  22. EXPECT_NO_THROW(TypeParam::is_regex("(ABC){1,2}"));
  23. EXPECT_TRUE(TypeParam::is_regex("(ABC){1,2}"));
  24. }
  25. TYPED_TEST(RegexEngineTest, SearchCanMatchSubstring) {
  26. EXPECT_NO_THROW(TypeParam().search("\\d", "10 dollars"));
  27. EXPECT_TRUE(TypeParam().search("\\d", "10 dollars"));
  28. }
  29. TYPED_TEST(RegexEngineTest, SearchCanSetBoundaries) {
  30. EXPECT_NO_THROW(TypeParam().search("^\\d$", "10 dollars"));
  31. EXPECT_FALSE(TypeParam().search("^\\d$", "10 dollars"));
  32. }
  33. TYPED_TEST(RegexEngineTest, SearchIsNoexceptOnBadRegex) {
  34. TypeParam engine;
  35. EXPECT_NO_THROW(engine.search("(ABC){1,2", "ABC"));
  36. EXPECT_FALSE(engine.search("(ABC){1,2", "ABC"));
  37. // Repeated calls *can* use a cached result, even if compilation failed
  38. EXPECT_FALSE(engine.search("(ABC){1,2", "ABC"));
  39. }
  40. #if !defined(JVALIDATE_MONOTEST)
  41. int main(int argc, char ** argv) {
  42. testing::InitGoogleMock(&argc, argv);
  43. return RUN_ALL_TESTS();
  44. }
  45. #endif