test_globpattern.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from panda3d.core import GlobPattern
  2. def test_globpattern_matches_file():
  3. patt = GlobPattern('/a/b/c')
  4. assert patt.matches_file('/a/b/c')
  5. assert patt.matches_file('///a////b//c')
  6. assert patt.matches_file('/a/b/././c')
  7. assert not patt.matches_file('')
  8. assert not patt.matches_file('/')
  9. assert not patt.matches_file('/a/b/d')
  10. assert not patt.matches_file('/A/b/c')
  11. assert not patt.matches_file('/a/b/c/')
  12. assert not patt.matches_file('/a/b/c/.')
  13. assert not patt.matches_file('a/b/c')
  14. assert not patt.matches_file('./a/b/c')
  15. # Test regular pattern
  16. patt = GlobPattern('*a')
  17. assert patt.matches_file('a')
  18. assert patt.matches_file('aa')
  19. assert patt.matches_file('xa')
  20. assert not patt.matches_file('A')
  21. assert not patt.matches_file('ax')
  22. assert not patt.matches_file('xax')
  23. # Test path ending in directory
  24. for patt in GlobPattern('/a/b/c/'), \
  25. GlobPattern('/a/b/c/.'), \
  26. GlobPattern('/a/b//c//'), \
  27. GlobPattern('/a/b/./c/./'):
  28. assert patt.matches_file('/a/b/c/')
  29. assert patt.matches_file('///a////b//c//')
  30. assert patt.matches_file('/a/b/././c/')
  31. assert patt.matches_file('/a/b/c/.')
  32. assert not patt.matches_file('/a/b/c')
  33. assert not patt.matches_file('/a/b/c/./d')
  34. assert not patt.matches_file('a/b/c/')
  35. assert not patt.matches_file('./a/b/c/')
  36. # Test globstar in middle
  37. for patt in GlobPattern('/a/**/c'), GlobPattern('/a/**/**/c'):
  38. assert patt.matches_file('/a/c')
  39. assert patt.matches_file('/a/b/c')
  40. assert patt.matches_file('/a/b/d/c')
  41. assert not patt.matches_file('/a/b/c/d')
  42. assert not patt.matches_file('/d/b/c')
  43. assert not patt.matches_file('/a/b/d')
  44. # Test globstar in beginning
  45. for patt in GlobPattern('/**/b/c'), GlobPattern('/**/**/**/b/c'):
  46. assert patt.matches_file('/a/b/c')
  47. assert patt.matches_file('/a/d/b/c')
  48. assert patt.matches_file('/a/b/c')
  49. assert patt.matches_file('/a/b/c/./b//c')
  50. assert not patt.matches_file('/a/b/c/d')
  51. assert not patt.matches_file('/a/c')
  52. assert not patt.matches_file('/a/b/d')
  53. # Test globstar at end
  54. for patt in GlobPattern('/a/b/**'), \
  55. GlobPattern('/a/b/**/**'), \
  56. GlobPattern('/a/b//**//**/**'):
  57. assert patt.matches_file('/a/b/')
  58. assert patt.matches_file('/a/b/.')
  59. assert patt.matches_file('/a/b//')
  60. assert patt.matches_file('/a/b/c')
  61. assert patt.matches_file('/a/b/c/d/e/f/g/h')
  62. assert patt.matches_file('/a/b/d/c')
  63. assert not patt.matches_file('/a/')
  64. assert not patt.matches_file('/a/c/b')
  65. # Test multiple globstars at multiple locations
  66. patt = GlobPattern('/a/**/b/**/c')
  67. assert patt.matches_file('/a/b/c')
  68. assert patt.matches_file('/a/./b/./c')
  69. assert patt.matches_file('/a//b//c')
  70. assert patt.matches_file('/a/x/y/b/c')
  71. assert patt.matches_file('/a/b/x/y/c')
  72. assert patt.matches_file('/a/b/c/a/b/c')
  73. assert patt.matches_file('/a/x/y/b/x/y/c')
  74. assert not patt.matches_file('/a/b/x')
  75. assert not patt.matches_file('/a/b/c/x')
  76. assert not patt.matches_file('/a/b/c/')
  77. assert not patt.matches_file('/a/b/c/.')