PageRenderTime 58ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/source/tools/quickbook/test/unit/glob_test.cpp

https://bitbucket.org/liflg/library-boost
C++ | 163 lines | 143 code | 11 blank | 9 comment | 0 complexity | 4e1e966d60781b2a9b7caf6733bc4a23 MD5 | raw file
  1. /*=============================================================================
  2. Copyright (c) 2013 Daniel James
  3. Use, modification and distribution is subject to the Boost Software
  4. License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  5. http://www.boost.org/LICENSE_1_0.txt)
  6. =============================================================================*/
  7. #include <boost/detail/lightweight_test.hpp>
  8. #include "glob.hpp"
  9. void glob_tests()
  10. {
  11. BOOST_TEST(quickbook::glob("", ""));
  12. BOOST_TEST(!quickbook::glob("*", ""));
  13. BOOST_TEST(quickbook::glob("*", "a"));
  14. BOOST_TEST(quickbook::glob("*b", "b"));
  15. BOOST_TEST(quickbook::glob("*b", "ab"));
  16. BOOST_TEST(quickbook::glob("*b", "bab"));
  17. BOOST_TEST(quickbook::glob("*b*", "b"));
  18. BOOST_TEST(quickbook::glob("*b*", "ab"));
  19. BOOST_TEST(quickbook::glob("*b*", "bc"));
  20. BOOST_TEST(quickbook::glob("*b*", "abc"));
  21. BOOST_TEST(!quickbook::glob("*b*", ""));
  22. BOOST_TEST(!quickbook::glob("*b*", "a"));
  23. BOOST_TEST(!quickbook::glob("*b*", "ac"));
  24. BOOST_TEST(quickbook::glob("hello.txt", "hello.txt"));
  25. BOOST_TEST(!quickbook::glob("world.txt", "helloworld.txt"));
  26. BOOST_TEST(quickbook::glob("*world.txt", "helloworld.txt"));
  27. BOOST_TEST(!quickbook::glob("world.txt*", "helloworld.txt"));
  28. BOOST_TEST(!quickbook::glob("hello", "helloworld.txt"));
  29. BOOST_TEST(!quickbook::glob("*hello", "helloworld.txt"));
  30. BOOST_TEST(quickbook::glob("hello*", "helloworld.txt"));
  31. BOOST_TEST(quickbook::glob("*world*", "helloworld.txt"));
  32. BOOST_TEST(quickbook::glob("?", "a"));
  33. BOOST_TEST(!quickbook::glob("?", ""));
  34. BOOST_TEST(!quickbook::glob("?", "ab"));
  35. BOOST_TEST(quickbook::glob("a?", "ab"));
  36. BOOST_TEST(quickbook::glob("?b", "ab"));
  37. BOOST_TEST(quickbook::glob("?bc", "abc"));
  38. BOOST_TEST(quickbook::glob("a?c", "abc"));
  39. BOOST_TEST(quickbook::glob("ab?", "abc"));
  40. BOOST_TEST(!quickbook::glob("?bc", "aac"));
  41. BOOST_TEST(!quickbook::glob("a?c", "bbc"));
  42. BOOST_TEST(!quickbook::glob("ab?", "abcd"));
  43. BOOST_TEST(quickbook::glob("[a]", "a"));
  44. BOOST_TEST(!quickbook::glob("[^a]", "a"));
  45. BOOST_TEST(!quickbook::glob("[b]", "a"));
  46. BOOST_TEST(quickbook::glob("[^b]", "a"));
  47. BOOST_TEST(quickbook::glob("[a-z]", "a"));
  48. BOOST_TEST(!quickbook::glob("[^a-z]", "a"));
  49. BOOST_TEST(!quickbook::glob("[b-z]", "a"));
  50. BOOST_TEST(quickbook::glob("[^b-z]", "a"));
  51. BOOST_TEST(quickbook::glob("[-a]", "a"));
  52. BOOST_TEST(quickbook::glob("[-a]", "-"));
  53. BOOST_TEST(!quickbook::glob("[-a]", "b"));
  54. BOOST_TEST(!quickbook::glob("[^-a]", "a"));
  55. BOOST_TEST(!quickbook::glob("[^-a]", "-"));
  56. BOOST_TEST(quickbook::glob("[^-a]", "b"));
  57. BOOST_TEST(quickbook::glob("[a-]", "a"));
  58. BOOST_TEST(quickbook::glob("[a-]", "-"));
  59. BOOST_TEST(!quickbook::glob("[a-]", "b"));
  60. BOOST_TEST(!quickbook::glob("[^a-]", "a"));
  61. BOOST_TEST(!quickbook::glob("[^a-]", "-"));
  62. BOOST_TEST(quickbook::glob("[^a-]", "b"));
  63. BOOST_TEST(quickbook::glob("[a-ce-f]", "a"));
  64. BOOST_TEST(!quickbook::glob("[a-ce-f]", "d"));
  65. BOOST_TEST(quickbook::glob("[a-ce-f]", "f"));
  66. BOOST_TEST(!quickbook::glob("[a-ce-f]", "g"));
  67. BOOST_TEST(!quickbook::glob("[^a-ce-f]", "a"));
  68. BOOST_TEST(quickbook::glob("[^a-ce-f]", "d"));
  69. BOOST_TEST(!quickbook::glob("[^a-ce-f]", "f"));
  70. BOOST_TEST(quickbook::glob("[^a-ce-f]", "g"));
  71. BOOST_TEST(!quickbook::glob("[b]", "a"));
  72. BOOST_TEST(quickbook::glob("[a]bc", "abc"));
  73. BOOST_TEST(quickbook::glob("a[b]c", "abc"));
  74. BOOST_TEST(quickbook::glob("ab[c]", "abc"));
  75. BOOST_TEST(quickbook::glob("a[a-c]c", "abc"));
  76. BOOST_TEST(quickbook::glob("*[b]*", "abc"));
  77. BOOST_TEST(quickbook::glob("[\\]]", "]"));
  78. BOOST_TEST(!quickbook::glob("[^\\]]", "]"));
  79. BOOST_TEST(quickbook::glob("b*ana", "banana"));
  80. BOOST_TEST(quickbook::glob("1234*1234*1234", "123412341234"));
  81. BOOST_TEST(!quickbook::glob("1234*1234*1234", "1234123341234"));
  82. BOOST_TEST(quickbook::glob("1234*1234*1234", "123412312312341231231234"));
  83. BOOST_TEST(!quickbook::glob("1234*1234*1234", "12341231231234123123123"));
  84. }
  85. void invalid_glob_tests()
  86. {
  87. // Note that glob only throws an exception when the pattern matches up to
  88. // the point where the error occurs.
  89. BOOST_TEST_THROWS(quickbook::glob("[", "a"), quickbook::glob_error);
  90. BOOST_TEST_THROWS(quickbook::glob("[^", "a"), quickbook::glob_error);
  91. BOOST_TEST_THROWS(quickbook::glob("[xyz", "a"), quickbook::glob_error);
  92. BOOST_TEST_THROWS(quickbook::glob("[xyz\\", "a"), quickbook::glob_error);
  93. BOOST_TEST_THROWS(quickbook::glob("[x\\y", "a"), quickbook::glob_error);
  94. BOOST_TEST_THROWS(quickbook::glob("[a-", "a"), quickbook::glob_error);
  95. BOOST_TEST_THROWS(quickbook::glob("[a-z", "a"), quickbook::glob_error);
  96. BOOST_TEST_THROWS(quickbook::glob("[a-\\", "a"), quickbook::glob_error);
  97. BOOST_TEST_THROWS(quickbook::glob("[a-\\a", "a"), quickbook::glob_error);
  98. BOOST_TEST_THROWS(quickbook::glob("xyx[", "xyxa"), quickbook::glob_error);
  99. BOOST_TEST_THROWS(quickbook::glob("]", "a"), quickbook::glob_error);
  100. BOOST_TEST_THROWS(quickbook::glob("abc]", "abcd"), quickbook::glob_error);
  101. BOOST_TEST_THROWS(quickbook::glob("]def", "a"), quickbook::glob_error);
  102. BOOST_TEST_THROWS(quickbook::glob("[]", "a"), quickbook::glob_error);
  103. BOOST_TEST_THROWS(quickbook::glob("[[]", "a"), quickbook::glob_error);
  104. BOOST_TEST_THROWS(quickbook::glob("[]]", "a"), quickbook::glob_error);
  105. BOOST_TEST_THROWS(quickbook::glob("**", "a"), quickbook::glob_error);
  106. BOOST_TEST_THROWS(quickbook::glob("[/]", "a"), quickbook::glob_error);
  107. BOOST_TEST_THROWS(quickbook::glob("[\\/]", "a"), quickbook::glob_error);
  108. BOOST_TEST_THROWS(quickbook::glob("[ -/]", "a"), quickbook::glob_error);
  109. BOOST_TEST_THROWS(quickbook::glob("[ -\\/]", "a"), quickbook::glob_error);
  110. BOOST_TEST_THROWS(quickbook::glob("\\", "a"), quickbook::glob_error);
  111. BOOST_TEST_THROWS(quickbook::glob("\\\\", "a"), quickbook::glob_error);
  112. }
  113. void check_glob_tests()
  114. {
  115. BOOST_TEST(!quickbook::check_glob(""));
  116. BOOST_TEST(!quickbook::check_glob("file"));
  117. BOOST_TEST(!quickbook::check_glob("file\\[\\]"));
  118. BOOST_TEST(quickbook::check_glob("[x]"));
  119. BOOST_TEST(quickbook::check_glob("abc[x]"));
  120. BOOST_TEST(quickbook::check_glob("[x]abd"));
  121. BOOST_TEST_THROWS(quickbook::check_glob("["), quickbook::glob_error);
  122. BOOST_TEST_THROWS(quickbook::check_glob("[^"), quickbook::glob_error);
  123. BOOST_TEST_THROWS(quickbook::check_glob("[xyz"), quickbook::glob_error);
  124. BOOST_TEST_THROWS(quickbook::check_glob("[xyz\\"), quickbook::glob_error);
  125. BOOST_TEST_THROWS(quickbook::check_glob("[x\\y"), quickbook::glob_error);
  126. BOOST_TEST_THROWS(quickbook::check_glob("[a-"), quickbook::glob_error);
  127. BOOST_TEST_THROWS(quickbook::check_glob("[a-z"), quickbook::glob_error);
  128. BOOST_TEST_THROWS(quickbook::check_glob("[a-\\"), quickbook::glob_error);
  129. BOOST_TEST_THROWS(quickbook::check_glob("[a-\\a"), quickbook::glob_error);
  130. BOOST_TEST_THROWS(quickbook::check_glob("xyx["), quickbook::glob_error);
  131. BOOST_TEST_THROWS(quickbook::check_glob("]"), quickbook::glob_error);
  132. BOOST_TEST_THROWS(quickbook::check_glob("abc]"), quickbook::glob_error);
  133. BOOST_TEST_THROWS(quickbook::check_glob("]def"), quickbook::glob_error);
  134. BOOST_TEST_THROWS(quickbook::check_glob("[]"), quickbook::glob_error);
  135. BOOST_TEST_THROWS(quickbook::check_glob("[[]"), quickbook::glob_error);
  136. BOOST_TEST_THROWS(quickbook::check_glob("[]]"), quickbook::glob_error);
  137. BOOST_TEST_THROWS(quickbook::check_glob("**"), quickbook::glob_error);
  138. BOOST_TEST_THROWS(quickbook::check_glob("[/]"), quickbook::glob_error);
  139. BOOST_TEST_THROWS(quickbook::check_glob("[\\/]"), quickbook::glob_error);
  140. BOOST_TEST_THROWS(quickbook::check_glob("[ -/]"), quickbook::glob_error);
  141. BOOST_TEST_THROWS(quickbook::check_glob("[ -\\/]"), quickbook::glob_error);
  142. BOOST_TEST_THROWS(quickbook::check_glob("\\"), quickbook::glob_error);
  143. BOOST_TEST_THROWS(quickbook::check_glob("\\\\"), quickbook::glob_error);
  144. }
  145. int main()
  146. {
  147. glob_tests();
  148. invalid_glob_tests();
  149. check_glob_tests();
  150. return boost::report_errors();
  151. }