regex_test.cxx 1.7 KB

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